dblookupcombobox kullanımı
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 19
- Kayıt: 08 May 2020 05:20
dblookupcombobox kullanımı
Herkese iyi günler ilişkisel veri tabanı kullanarak veri tabanına veri eklmeye calışıyorum fakat dblookupcombobox kullanırken
veri tabanından çekilmesi gereken verileri çekmiyor 2 gündür izlemedigim video kalmadı projeme bakarak hatamın nerede oldugunu söylerseniz sevinirim
teşekkürler
projem https://drive.google.com/open?id=1EF4TC ... BcgMuMsNRU_
veri tabanından çekilmesi gereken verileri çekmiyor 2 gündür izlemedigim video kalmadı projeme bakarak hatamın nerede oldugunu söylerseniz sevinirim
teşekkürler
projem https://drive.google.com/open?id=1EF4TC ... BcgMuMsNRU_
Re: dblookupcombobox kullanımı
Merhaba,
Paylaştığınız bağlantı çalışmıyor.
DBLookupComboBox kullanımı çoğu zaman kullanıcı için anlam ifade etmeyen kod alanlarını değil, kullanıcının anlayabileceği açıklama alanlarını göstermek için kullanılır. Aynı zamanda bu bileşen ekranda anlaşılır bilgi gösterip arka planda kod bilgisini kayıt edebilir.
DBLookupComboBox doğru çalışması için birden fazla özelliğini düzenlemeniz gerekir.
- Asıl verilerin olduğu DataSource (DataSource)
- Kod içeren alan adı (DataField)
- Aranacak verilerin olduğu DataSource (ListSource)
- Eşleşme olduğunda ekranda gösterilecek alan adı (ListField)
- Aranacak verilerin olduğu DataSource içinde Kod alanı bilgisini içeren alan (KeyField)
Örneğin bir fatura tablosunda fatura türü alnınız var. Bu alan numerik bir alan. Çeşitli fatura tür bilgilerini kayıt ediyor.
Başka bir tabloda da fatura türü ve açıklaması olduğunu düşünelim.
FATURA TABLOSU
Fatura No,Fatura Türü
1,10
2,10
3,20
FATURA TÜRÜ TABLOSU
Fatura Türü,Fatura Türü Açıklaması
10,Ticari Fatura
20,Proforma Fatura
30,Temel Fatura
DBLookupComboBox kullanıldığı zaman kullanıcı ekranda her zaman fatura türü açıklamasını görür. Ancak, fatura tablosunda her zaman fatura türü bilgisi (numerik bilgi) kayıtlı olur.
Paylaştığınız bağlantı çalışmıyor.
DBLookupComboBox kullanımı çoğu zaman kullanıcı için anlam ifade etmeyen kod alanlarını değil, kullanıcının anlayabileceği açıklama alanlarını göstermek için kullanılır. Aynı zamanda bu bileşen ekranda anlaşılır bilgi gösterip arka planda kod bilgisini kayıt edebilir.
DBLookupComboBox doğru çalışması için birden fazla özelliğini düzenlemeniz gerekir.
- Asıl verilerin olduğu DataSource (DataSource)
- Kod içeren alan adı (DataField)
- Aranacak verilerin olduğu DataSource (ListSource)
- Eşleşme olduğunda ekranda gösterilecek alan adı (ListField)
- Aranacak verilerin olduğu DataSource içinde Kod alanı bilgisini içeren alan (KeyField)
Örneğin bir fatura tablosunda fatura türü alnınız var. Bu alan numerik bir alan. Çeşitli fatura tür bilgilerini kayıt ediyor.
Başka bir tabloda da fatura türü ve açıklaması olduğunu düşünelim.
FATURA TABLOSU
Fatura No,Fatura Türü
1,10
2,10
3,20
FATURA TÜRÜ TABLOSU
Fatura Türü,Fatura Türü Açıklaması
10,Ticari Fatura
20,Proforma Fatura
30,Temel Fatura
DBLookupComboBox kullanıldığı zaman kullanıcı ekranda her zaman fatura türü açıklamasını görür. Ancak, fatura tablosunda her zaman fatura türü bilgisi (numerik bilgi) kayıtlı olur.
-
- Üye
- Mesajlar: 19
- Kayıt: 08 May 2020 05:20
Re: dblookupcombobox kullanımı
Hocam dediginiz detayları tek tek kontrol etttim keyfield datasourchlar herşeyi denedim fakat veriler listelenmedi
linki yanlış koymusum sadece bakıp hatamı soylerseniz sevinirim gözden kaçırdıgım bişey var ama bulamadım
proje linki https://drive.google.com/open?id=1EF4TC ... BcgMuMsNRU_
linki yanlış koymusum sadece bakıp hatamı soylerseniz sevinirim gözden kaçırdıgım bişey var ama bulamadım
proje linki https://drive.google.com/open?id=1EF4TC ... BcgMuMsNRU_
Re: dblookupcombobox kullanımı
Proje bağlantısını ben halen açamıyorum. Görebildiğim kadarı ile aynı bağlandı adresi.
Neden forumun "Tam Editör" ekranındaki dosya ekleme özelliğini kullanmayı denemiyorsunuz? ZIP veya RAR şeklinde tek dosya olarak sadece kaynak kodlar olacak şekilde yüklemeniz mümkün olabilir.
Belli bir boyuttan büyük dosya eki forumda izin verilmiyor. Bu yüzden derlenmiş EXE dosya, DCU dosyaları gibi gereksiz dosyaları sıkıştırılmış dosya içine dahil etmemenizde fayda var.
Neden forumun "Tam Editör" ekranındaki dosya ekleme özelliğini kullanmayı denemiyorsunuz? ZIP veya RAR şeklinde tek dosya olarak sadece kaynak kodlar olacak şekilde yüklemeniz mümkün olabilir.
Belli bir boyuttan büyük dosya eki forumda izin verilmiyor. Bu yüzden derlenmiş EXE dosya, DCU dosyaları gibi gereksiz dosyaları sıkıştırılmış dosya içine dahil etmemenizde fayda var.
-
- Üye
- Mesajlar: 19
- Kayıt: 08 May 2020 05:20
Re: dblookupcombobox kullanımı
Hocam dosya eklerinden denedim fakat sadece resim yuklendigi için yukliyemedim drive de surekli linki siliyor anlamadım
yeniden denedim açılmazsa artık kod ssleri yuklerim hocam
https://drive.google.com/file/d/1HXKqRZ ... sp=sharing
yeniden denedim açılmazsa artık kod ssleri yuklerim hocam
https://drive.google.com/file/d/1HXKqRZ ... sp=sharing
Re: dblookupcombobox kullanımı
1) Form6 üzerindeki DBLookupComboBox özelliklerinden aşağıdakiler boş.
DataSource
DataField
İlk mesajımda bu alanların ne şekilde doldurulması gerektiğini yazmıştım.
2) Form6.OnCreate olayında aşağıdaki gibi bir kod kullanmalısınız ki listelenmesi gereken kayıtlar erişilebilir olsun.
Kaynak veri (ListSource.DataSet) kapalı iken DBLookupComboBox'ın veri çekmesi ve göstermesi mümkün değil.
3) DBLookupComboBox adı üzerinde "data aware" bir bilrşendir. Dolayısıyla bağlı olduğu DataSource ve DataField içine gerekli değerlerin atanmasını otomatik yapar. Ancak; siz mevcut tasarımınızda veri bağımsız bileşenler kullanarak işlem yapıyorsunuz.
3a) Siz veri girişini "data aware" bileşenler üzerinden yapacak iseniz tasarım değişikliği yapmalısınız.
3b) Mevcut tasarımı korumak istiyor iseniz bu durumda ekle butonu altındaki kodda aşağıdaki gibi bir düzenleme yapmalısınız
Ayrıca mevcut tasarımda uygun olan LookupComboBox (Başında "DB" yok) kullanmanız daha doğru olacaktır. Bu bileşende DataSource ve DataField kısımları yoktur. Ancak yukarıdaki örnek kod bu bileşen içinde çalışacaktır.
4) telefon isimli tablo içindeki tarih alanının veri türünü Metin değil tarih/saat yapmanızda fayda var. Aksi halde kullanıcı geçerli olmayan tarih girişi yapabilir. Kullanıcıdan doğru tarih bilgisi almak için TDateTimePickup bileşenini kullanabilirsiniz. Tarih/saat türünde veri kaydetmek için ilgili satırı aşağıdaki şekilde değiştirebilirsiniz
5) DBLookupComboBox kullandığınız zaman ana bilgi listelediğiniz ekranda arıza_id olarak rakam görmek kullanıcıya birşey ifade etmeyecektir. Bunun yerine orada açıklamasını göstermenizde fayda var. Açıklama gösterebilmek için iki farklı tablodaki verileri eşleştiren bir SQL kullanmalısınız. Form4 üzerindeki listele isimli TADOQuery bileşeni SQL özelliğini aşağıdaki şekilde değiştirerek bunu sağlayabilirsiniz.
Bunu yaptığınızda ek olarak ariza isimli kolon sorgu sonucunda gelecektir. Kolonun ekrandaki listede gözükmesini sağlamak için DBGrid1.Columns özelliğinin yanındaki "..." butonunu tıklayıp gelen pencereden Yeni bir kolon eklemelisiniz. 9 numara olarak eklenecek bu yeni kolonu fare ile tıklayarak seçip Object Inspector üzerinden FieldName özelliğine ariza yazmalısınız. Eğer kolonun en sonda gösterilmesini istemiyor iseniz fare ile 9 numaralı seçeneği drag&drop (sürükle&bırak) şeklinde daha üst sıralara taşıyabilirsiniz. İşlemler bitince kolon genişliğini ayarlamayı hmal etmeyin. Aksi halde çalışma zamanında oldukça geniş bir kolon olacaktır.
6) Aşağıdaki şekildeki bir kullanım çok doğru değildir.
İlk satır açık olan veri bağlantısını kapatır. İkinci satır yeniden veri bağlantısı açar.
Farklı bir ifade ile eğer verilerde değişiklik olmuş ise bunu yeni veri bağlantısı açıldığı zaman elde etmiş olursunuz.
Üçüncü satır ise veri bağlantısını özel bir yöntem ile (Veri bileşeninin kapabilitesine göre kolon bilgileri sunucudan okunmaz, bu bilgiler korunarak sadece veri okuması yapılır) kapatıp açar.
Farklı bir ifade ile eğer verilerde değişiklik olmuş ise bunu sadece bu satırı kullanarak elde etmiş olursunuz.
Özetle, üç numaralı satırdaki kod daha hızlı çalışır. Ancak; veri her zaman özel yöntem kullanılarak okunamayabilir. Karmaşık sorguları kapatıp açmak gerekebilir. Veya veri bileşeni yeterli kabiliyete sahip olmayabilir. Veya veritabanı bu tür bir talebi yerine getiremiyor olabilir.
Sizin durumunuzda yukarıdaki üç satırlık kodun sadece ilk iki satırını kullanmanız daha doğru olacaktır. Zira, birden fazla tablodan veriyi birleştirerek getirme yöntemini kullanırsanız TADOQuery bileşeni üç numaralı satırda size hata verecektir.
Kısaca aşağıdaki satırı silmenizi tavsiye ederim
DataSource
DataField
İlk mesajımda bu alanların ne şekilde doldurulması gerektiğini yazmıştım.
2) Form6.OnCreate olayında aşağıdaki gibi bir kod kullanmalısınız ki listelenmesi gereken kayıtlar erişilebilir olsun.
Kod: Tümünü seç
ADOQuery1.Open();
3) DBLookupComboBox adı üzerinde "data aware" bir bilrşendir. Dolayısıyla bağlı olduğu DataSource ve DataField içine gerekli değerlerin atanmasını otomatik yapar. Ancak; siz mevcut tasarımınızda veri bağımsız bileşenler kullanarak işlem yapıyorsunuz.
3a) Siz veri girişini "data aware" bileşenler üzerinden yapacak iseniz tasarım değişikliği yapmalısınız.
3b) Mevcut tasarımı korumak istiyor iseniz bu durumda ekle butonu altındaki kodda aşağıdaki gibi bir düzenleme yapmalısınız
Kod: Tümünü seç
// Değiştirilecek satır
Parameters.ParamByName('arizaa').Value := arizaa.KeyValue;
4) telefon isimli tablo içindeki tarih alanının veri türünü Metin değil tarih/saat yapmanızda fayda var. Aksi halde kullanıcı geçerli olmayan tarih girişi yapabilir. Kullanıcıdan doğru tarih bilgisi almak için TDateTimePickup bileşenini kullanabilirsiniz. Tarih/saat türünde veri kaydetmek için ilgili satırı aşağıdaki şekilde değiştirebilirsiniz
Kod: Tümünü seç
Parameters.ParamByName('tarih').AsDateTime := DateTimePicker1.Date;
Kod: Tümünü seç
select telefon.*, arizalar.ariza
from telefon
left join arizalar on arizalar.id = telefon.ariza_id
6) Aşağıdaki şekildeki bir kullanım çok doğru değildir.
Kod: Tümünü seç
form4.listele.Close;
form4.listele.Open;
form4.listele.Refresh();
Farklı bir ifade ile eğer verilerde değişiklik olmuş ise bunu yeni veri bağlantısı açıldığı zaman elde etmiş olursunuz.
Üçüncü satır ise veri bağlantısını özel bir yöntem ile (Veri bileşeninin kapabilitesine göre kolon bilgileri sunucudan okunmaz, bu bilgiler korunarak sadece veri okuması yapılır) kapatıp açar.
Farklı bir ifade ile eğer verilerde değişiklik olmuş ise bunu sadece bu satırı kullanarak elde etmiş olursunuz.
Özetle, üç numaralı satırdaki kod daha hızlı çalışır. Ancak; veri her zaman özel yöntem kullanılarak okunamayabilir. Karmaşık sorguları kapatıp açmak gerekebilir. Veya veri bileşeni yeterli kabiliyete sahip olmayabilir. Veya veritabanı bu tür bir talebi yerine getiremiyor olabilir.
Sizin durumunuzda yukarıdaki üç satırlık kodun sadece ilk iki satırını kullanmanız daha doğru olacaktır. Zira, birden fazla tablodan veriyi birleştirerek getirme yöntemini kullanırsanız TADOQuery bileşeni üç numaralı satırda size hata verecektir.
Kısaca aşağıdaki satırı silmenizi tavsiye ederim
Kod: Tümünü seç
form4.listele.Refresh();
-
- Üye
- Mesajlar: 19
- Kayıt: 08 May 2020 05:20
Re: dblookupcombobox kullanımı
Bilgileriniz ve yardımlarınız için teşekkür ederim hocam dediklerinizi uyguladım