locate tin yaptığını sql ile yapmak...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

locate tin yaptığını sql ile yapmak...

Mesaj gönderen huseyinert »

merhaba arkadaşlar, yaptığım programda bir çok locate kullandım acaba locate metodu kullanmak yanlış olurmu, kayıt sayısı artınca problem çıkartırmı ilk sorum bu...
ikincisi: locate yerine sql kullanmak istiyorum ama tam anlamıyla yapamadım,

if data.fatura_kurumu.Locate('kno',data.cariharaket.fieldbynam('f_kurum_no').AsFloat,[])=true then begin

bu kullandığık locate bunu sql ile yapmaya çalıştığımda nasıl olur, ben şu şekilde yaptım bana doğru gibi geliyor ama locate gibi çalışmıyor ve işimi görmüyor


data.fatura_kurumu.Close;
DATA.fatura_kurumu.SQL.Clear;
DATA.fatura_kurumu.SQL.Add('select *from fatura_kurumu where kno='+#39+floattostr(data.cariharaket.fieldbyname('f_kurum_no').AsFloat)+#39+'');
DATA.fatura_kurumu.Open;

if not DATA.fatura_kurumu.isEmpty Then begin
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

like kullan

Kod: Tümünü seç

query1.sql.add('select * from where aramayapalıcakalan like "'+Edit1.text+'%"');
eğer arama kriterini editten alıyorsan bu şekilde kullan..derim

koaly gelsin
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

ben bunun için şöyle birşey denemiştim belki işine yarar,

bunun için iki sorgu kullandım,,

birinci sorguda benim aradığım kayıttan küçük olanları sorguladım,,

select * from tablo where alan=aradığım şeklinde

bunun sonucunda kaç kayıt olduğunu buldum,,

daha sonra ikinci sorguda bir koşul koymadım,,

yani

select * from tablo order by alan

ve bu sorgudan sonra,, ilk sorgudaki kayıt sayısı+1 e gitmesini söyledim

böyle bir yol izledim ve oldukça iyi çalıştı..
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Locate index kullandığından iyi bir arama yöntemidir. Ama ben SQL ile arama yaptırmayı tercih ederim. SQL ile arama daha esnek ve daha iyi bir yöntem.

SQL ile aramanın nasıl yapılacağı çok defa konuşuldu forumda. :ara like

Kolay gelsin.
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

eger arama sonucunda sadece aranan kaydı çekmek için sql tamam güzel..

fakat bütün tablo verileri aktifken aranan kaydın üzerine sql ile konumlanma nasıl yapılacak,, ben soruyu böyle anladım,

sql ile bunu yapmak mümkünmü,,

ben bulamadım ve onun için yukardaki anlattığım şekli kullandım.
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

sağolun

Mesaj gönderen huseyinert »

çok teşekkür ederim cevaplarınız için mussimsek hocam locate kayıt sayısı artınca örneğin 10-20 bin olunca hatalı çalışma yaparmı....

ben kullandığım sql sorgusu yazmıştım acaba yanlışmı, normalde arama işlemini yapmasını biliyorum ama burda tam olarak çalışmıyor arama yapsamda bildiğim şeyler çıkıyor, bir ip ucu verebilirmisiniz

çok teşekkür eedrim her iki durumda da....
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

hocam niye yanlış arama yapsın. Ama şöyle düşün, 30 bin kaydın var, bana MUSTAFA isimli olanları getir dedin. Locate gider, ilk MUSTAFA'ya konumlanır. Ama 30 bin kayıtta atıyorum 50 tane MUSTAFA varsa, hiç esnek bir yöntem olmadığı ortada.

Ama SQL'le yaparsan mevcut 50 kayıtı bir gridde gösterip, kullanıcının seçmesini sağlayabilirsin.

Kolay gelsin.
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

Mesaj gönderen huseyinert »

selim arkadaşın sölediği gibi işlem yapmak istiyorum arkadaş doğru anlamış sql yapmak mümkün değil mi yoksa
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

adminin dediği gibi aradığın kayıttan 1 den fazla varsa SQL en iyi çözüm mesela finkey,findnearest gibi yöntemleri index olamdan kullanamazsın BDE için ama locate her iki şakilde çalışır index varsa indexi kullanır index yoksa normal arama yapar.findkey ise seminerlerden birinde olması gerek bu konu hakkında indexi kullandığı için hız farkını görürsün.ama SQl le like ve where komutu ile yaparsın ama 1 den fazla kayıtta hangisine konumlanacak ona sen karar ver..
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

olmuyor arkdaşlar

Mesaj gönderen huseyinert »

selam arkadaşlar, locate sıralı arama yapıyor olarak biliyorum, buda kayıt çoğaldıkça işimi zorlaştıracak, sql kullamak istiyorum, her yolu deniyorum ama bi türlü olmuyor,

if data.kasa.Locate('cno',data.cariharaket.fieldbyname('kno').Value,[loPartialKey])=False then begin

bunun yerine
data.kasa.Close;
DATA.kasa.SQL.Clear;
DATA.kasa.SQL.Add('select *from kasa where id=:id and cno='+#39+floattostr(data.cariharaket.fieldbyname('kno').AsFloat)+#39+'');
DATA.kasa.Open;
if DATA.kasa.Fields.Fields[18].AsFloat=0 Then begin

bu sql kodunu kullandım ama olmuyor, bu konuda yardıma çok ihtiyacım var, bekliyorum........

mümkünse kod biçiminde cevap göndeririseniz daha faydalı olacak sanırım
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

locate sıralı arama yapmaz, varsa indeksiniz kullanır. Ama arama yaptığınız alanda indeks yoksa tabii ki sıralı arama yapar.

like ile arama yöntemi onlarca kez konuşuldu hocam, :ara Arama kısmından aratıp, ilgili mesajları okuman yeter. Hem öğrenirsin de bu arada.

Kolay gelsin.
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

sağolun

Mesaj gönderen huseyinert »

mussimsek hocam teşekkür ederim ama arattım ama olmuyor eğer mümkünse kodu yazabilirmisiniz,kaç gündür uğraşıyorum ama bi türlü olmuyor....

İlginiz için teşekkür ederim...
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Mesaj gönderen ikra »

select * from tablo where field like "%'+aranan+'%"'

arkadasim like komutu bu sekilde calisiyor... eger sirali listelemek istiyorsan order by '+aranan+' asc yada order by '+aranan+' desc ekleyerek te kullanabilirsin...

bastaki ve sondaki % isaretleri örnegin bir kelime arattiginda bu kelimeyi iceren tüm kelimeler listelenir...

eger basta % kullanir ve sonda kullanmazsan ve RA yazarsan cikan sonuclar IKRA, ICRA gibi olacaktir...

eger basta kullanmaz sonda kullanir isen ve RA yazdiginda sonuclar
RAMAZAN, RAHMI gibi olacaktir...

eger hem basta hem sonda kullanir isen ve RA yazdiginda
IRAN, IRAK gibi icinde RA bulunduran kelimeler listelenecektir...

umarim yardimci olabilmisim dir...
kolay gelsin...
Cevapla