locate yerine sql kullanmak

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

locate yerine sql kullanmak

Mesaj gönderen huseyinert »

s.a arkadaşlar sorgularda sql kullanıyorum fakat şöle bir durumda sql kullanamadım: cari hesabında borçlandırdığımız bir kayıt var daha bu kasamıza gitmedi alacağımızı girdikten sonra bu kasamıza gidiyor. buraya kadar normal kasaya giden kayıt insert olduğu için, ama ben carihesaptaki kasaya giden kayıt üzerinde değişiklik veya silme yaptığımda aynı kaydı kasada da bulmam ve onuda değiştirmem gerekiyor bunun için cari hesaptaki generator alanı (kno) yu kasa da bir alan açarak (cno) her cari hesabında kasaya gidecek kaydın kno sunu kasadaki cno ya aktırıyorum, düzeltme yapılacağı veya silme yapılacağı zaman locate ile konumlandırıp delete/edit yaptırıyorum, ama bu işi sql ile yapmak istiyorum yani locate yerine sql ile sorgulayıp cno yu bulmak delete/edit sonrada normal edit/delete işlemimi yapmak istiyorum bunu çok defa denedim ama bir türlü locate gibi çalıştıramadım sql aradığı kaydı sadece buluyor diyerlerini yok gibi sayıyor locate ise kayıtların içinde ki aradığım kaydın üzerine konumlanıyor bununla ilgili sanırım ama emin değilim yardımcı olursanız sevinirim.
locate kodum şöle:

Kod: Tümünü seç

if data.dataset_kasa.Locate('cno',data.dataset_carihesap.fieldbyname('kno').AsFloat,[])=False then begin
şeklinde
kolay gelsin
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

selam
Aramada Like diye aratırsanız 266 ad. cevap geliyo karşınıza.Buradaki kodları incelerseniz .sqlde arama nasıl yapılmış fikir sahibi olabilirsiniz. Kolay gelsin.
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

Mesaj gönderen huseyinert »

arkadaşlar bu konuda yardımlarınızı hala bekliyorum selman hocamın dediği gibi aratma yaptım ama yine olmuyor zaten ben normal raporlarımda falan sql kullanıyorum like falan hepsini orda sorun yok işte yukarıda anlattığım işemi yaptırırken istediğim gibi çalışmıyor...
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
assoft

Mesaj gönderen assoft »

SQL iyi bir seçim.

Kod: Tümünü seç

Query1.Close;
Query1.SQL.Cleat;
Query1.SQL.Add('Select * From TabloAdi Where AramaYapilacakAlan='''+Edit1.Text+'''');
Query1.Open;
Şeklinde yapabilirsin.
Birde arama yaparken biraz daha dikkatli davranın ki sonuca ulaşasınız.
Kolay gelsin...
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Mesaj gönderen ender_arslanturk »

Merhaba

Kayıt sayısını da düşünecek olursak, eğer zaten bir dataset açıyorum dersen ve silme yapıcak isen sana ExecSQL metodunu öneririm...

Kod: Tümünü seç

.
.
Query1.Sql.Add('Delete from Tabloadi where Alanadi='+edit1.text);
Query1.ExecSQL;
eğer değişiklik ise yapmak istediğin yine ExecSQL metodu iyi...

Kod: Tümünü seç

.
.
Query1.Sql.Add('Update Tabloadi where Alanadi='+edit1.text);
Query1.ExecSQL;
eğer dataset başka bir şey için açık durmak zorunda ise veya içerisinde order by - like var ise... Locate metodu en mantıklısıdır... Öteki türlü performans açısından düşüş gözükebilir... Zaten order ve like kullanımında hata alacaksın...

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

Mesaj gönderen huseyinert »

ender hocam cevabınız için tşk. ederim, locate sıralı arama yapmıyormu?yani buda yavaş olmaası demek, sql daha hızlı arama yaptığından bu yolu kullanmak istiyorum.
...
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Mesaj gönderen ender_arslanturk »

huseyinert yazdı:ender hocam cevabınız için tşk. ederim, locate sıralı arama yapmıyormu?yani buda yavaş olmaası demek, sql daha hızlı arama yaptığından bu yolu kullanmak istiyorum.
...
Aslında komut biraz daha derin... Locate ve findkey olarak arama yaparsanız bazı sonuçlara da ulaşabilirsiniz...

Normalde Locate index siz aramalarda yapılan bir komuttur... İndexli alanlarda ise findkey kullanılır...

Sql cümlenizde şart kullandınız ise bir AOF yaratılır fakat yine de performans karşılaştırmasını küçük bir test ile yapabilirsiniz...
En son ender_arslanturk tarafından 17 Eyl 2005 01:07 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Mesaj gönderen ender_arslanturk »

Uğur1982 yazdı:
locate sıralı arama yapmıyormu?
viewtopic.php?t=8347&highlight=index+varsa+kullan%FDr
Locate ile her türlü arama yapabilirsiniz...

Sadece şunu belirttim...
1. TDataset sınıfına ait metodlar ile arama var ki mesela Locate,findnearest,Findkey

2. SQL cümlesi ile var...

Şimdi bunlar kullanıldığında belki SQL daha esnek gelebilir fakat performans ıda unutmamak gerekir... KAyıt sayısının çok olduğunu düşünürsek Locate mantıklı geliyor...
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

Mesaj gönderen huseyinert »

enver hocam şimdi benim ilk sorumda anlattığım locate i kullanım şeklim doğrumu?, kno ve id ile locate edip bu şekilde işlem yaptırmam doğru mu? bir sorun çıkarmı? kayıt sayısı arttığında


tşk. ederim
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

Selam aslında kayıt fazla olduğunu varsayarsak Locate değil Sql daha hızlıdır.hatta 10binlerce kayıtta Sql ile yapılan aramada %60 daha hızlı dır.
Kolay gelsin.
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Mesaj gönderen ender_arslanturk »

huseyinert yazdı:enver hocam şimdi benim ilk sorumda anlattığım locate i kullanım şeklim doğrumu?, kno ve id ile locate edip bu şekilde işlem yaptırmam doğru mu? bir sorun çıkarmı? kayıt sayısı arttığında


tşk. ederim
Eğer tek bir kayıta konumlama söz konusu ise tabii ki...
selman yazdı:Selam aslında kayıt fazla olduğunu varsayarsak Locate değil Sql daha hızlıdır.hatta 10binlerce kayıtta Sql ile yapılan aramada %60 daha hızlı dır.
Kolay gelsin.
% 60 çok iddialı oldu kardeş.... Eğer sonuç döndüren cümlelerde birden fazla sonuç gerekiyor ise Select ile tabiiki SQL kullanılmalı...
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Merhaba.
Bildiğim kadarıyla Table bileşenlerinin geneli while not eof do döngüsünü kullanarak arama yapıyor..Malumunuzdur ki kayıt sayısı arttıkça özellikle network ortamında, aramalarınızda performans sıkıntısı yaşamanız olasıdır..Bu nedenle sql kullanmanızı salık veririm.
Kolay gelsin.
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Mesaj gönderen ender_arslanturk »

bLue aLonE yazdı:Merhaba.
Bildiğim kadarıyla Table bileşenlerinin geneli while not eof do döngüsünü kullanarak arama yapıyor..Malumunuzdur ki kayıt sayısı arttıkça özellikle network ortamında, aramalarınızda performans sıkıntısı yaşamanız olasıdır..Bu nedenle sql kullanmanızı salık veririm.
Kolay gelsin.
Normal Table ilede locate vb. kullanabilirsiniz... Query gibi... :wink:
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Söylediklerimle bi bağlantı kuramadım :roll:
Cevapla