Lookup Field problemi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
habilkader
Üye
Mesajlar: 61
Kayıt: 14 Eki 2006 11:11

Lookup Field problemi

Mesaj gönderen habilkader »

S.A
Daha önce Acces VT kullarak yazıdığım programı şimdi Firebirde VT ye aktarıyorum IBX bileşenleri kullnıyorum.
CARİ KARTLAR ve FATURA tablom var. Fatura tablosunda olması gereken Cari hesaplara ait adres,tel vb bilgiler lookup field ile Cari Kartlar tablosundan alınıyor.
Ancak firebirdde lookup alanlar yavaşlamaya sebeb oldu. Kodlara break point koyarak yavaşlamanın sebebini ararken şunu farkettim Fatura tablosunu open yaptığımda Cari kartlar tablosunu kayıtsayısı*LookupField adedince tarayıyor yani Scroll olayını gerçekleşiyor.
Tabi cari kartlar tablosunun after scroll ve before scroll olaylarında bazı kodlar var, if-then ile bu kodları by-pas etsem bile sonuçta program bu afterscroll ve beforescroll procedurelerine mutlaka bi uğrayıp merhaba diyor ve buda belli bir geçikmeye neden oluyor.

Ancak aynı işi Access VT ile ve ADO bileşenleri ile yaptığımda böyle bir scroll olayı tetiklenmiyor ve program daha hızlı açılıyordu.

Şimdilik datamodüle yenibir IBQuery nesnesi ile cari kartlar tablosunu sorguyla çektim ve fatura tablosonun lookupfiled alanlarını IBQuerye bağlayarak geçici bir çözüm buldum ancak ne kadar işgörür bilemiyorum.

sonuç olarak;
Fatura tablosunda select First 1 ile sadece son kaydı çağırmama rağmen lookup alanlara bakmak için Cari Kartlar tablosundaki tüm kayıtları neden tarıyor? (Kayıtsayısı*Lookup field adedince)

2-Lookup Fieldları firebirdde veritabanı tarafında yapamayız mı ? (Calculated field lar gibi)

yada başka bir çözümü var mı ?
İlgilenen arkadaşlara şimdiden tşk ederim.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
vt den kayıtları çekerken sp kullan.
fatura tablosu için faturalarigetir diye bir sp oluşturursun.
bu spye tarih,cariid fatura turu vs. parametreler vererek filtreleme işlerinide ototmatik olarak yaptırabilirsin.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
habilkader
Üye
Mesajlar: 61
Kayıt: 14 Eki 2006 11:11

Mesaj gönderen habilkader »

s.a
aslangeri arkadaşım, yazıklarını biraz daha açarmısın.
ben şöyle anladım bilmiyorum doğrumu anladım

SP olarak Fatura tablosu ile cari kartlar tablosunu join ile bağlayarak, carikartlar tablosundan bakmak istediğin alanları seç, böylece lookupfield da gerek kalmaz diyorsan böyle bi durumda join ile bağlantı olduğundan insert, edit, post işlemleri yapılamaz.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

:)
kayıtları çekmek için ibdataset kullan.
ibdataset in insertsql, modifysql delete sql propertylerini ayarlarsan insert te olur update de o delete de. yalnız çektiğin alanların idleriniide sp ile geriye döndürmelisin. sqlledede o alanları kullanmalısın.
ben kendim bizzat öyle yapıyorum.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
habilkader
Üye
Mesajlar: 61
Kayıt: 14 Eki 2006 11:11

Mesaj gönderen habilkader »

bu baş belası lookup filedlarla ilgili bir adım daha ileri gidebildim.
çok aramama rağmen formda bulamamıştım

firebirdte fatura tablosuna ADRES adında Computed by alanı ekledim
ve bu alana aşağıdaki kodu yazarak Adres bilgisini CariKArtlar tablosundan baktırdım.
Adres alanının computed by ına yazılan kod:

Kod: Tümünü seç

((select carikartlar.adres from carikartlar where carikartlar.carikod=fatura.carikod))
delphi tarafında IBDataset ile fatura tablosunu çağırdım. Ancak Adres alanı read-only olduğu için, insert, delete, modify sql kodlarına Adres alanını eklemedim. ve programı çalıştırdığımda Fatura tablosuna girdiğim carikodun adres bilgisini getiriyor. buraya kadar iş tamam.
ancak Adres bilgisi commit yaptıktan sonra yükleniyor. oysa daha insert modundayken yüklemesini istiyorum.

onuda halletmenin bi yolunu buluruz inşallah.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

fields editorden alanın read only özelliğini iptal et.
tabloyu post etmeden önce alana carinin adını yazdır.
insert update sql lerinde bu alanı kullanmadığın için sıkıntı çıkmayacaktır.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla