Master/Detail DBLookupcombobox

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Master/Detail DBLookupcombobox

Mesaj gönderen bobasturk »

Merhaba,

FB ve delphi7 kullanıyorum.
İki adet tablom var,

Tablo1
Ana_Baslık_no
Baslık_adı

Tablo2
Ana_baslık_no
yan_baslık_no
baslık_adı

form üzerinde iki adet dblookupcombo koydum. birinci dblookup tablo1 e bağlı ve ana_baslık_no alanından verileri çekiyor ve üçüncü bir tablonun ilgili alanına bağlı sorun yok.
ikinci dblookupcombo tablo2 nin yan_baslık_no alanına bağlı ve oda üçüncü tablonun ilgili alanına yazıyor.

bu iki tabloyu master/detail olarak bağlıyorum. bu bağlantıyı gridler üzerinde rahatlıkla gösterebiliyorum. yani ana_baslık_no seçildiğinde ona bağlı yan_baslık_no lar geliyor. ama bu işlemi bir türlü lookup lar üzerinde yapamadım.

tablo2 tablo1 e where ana_baslık_no=:ana_baslık_no ile master/detail olarak bağlı datasource si ayarlı.

tablo1 den veri alan lookup' un
listsource si tablo1 e bağlı
listfield :tablo1 ana_baslık_no
keyfield :tablo1 ana_baslık_no

tablo2 den veri alan lookup' un
listsource :tablo2 ye bağlı ve tablo2 tablo1 e bağlı (master/detail)
listfield :yan_baslık_no
keyfield :ana_baslık_no

burada yapmak istediğim lookup1 de seçtiğim ana_baslık_no yu ilgilendiren ve tablo2 de olan yan_baslık_no ların lookup2 içerisinde görünmesi yani il seçilince diğer lookup ta bağlı ilçelerin görünmesi fakat yapamadım hata alıyorum hata mesajı şu,

.....yanbaslikibdset : Field '' not found. sanırım alan bulunamadı diyor.

listfield ve keyfield lerde değiştirmeler yapsamda hep aynı hatayı alıyorum. datasetler aktif halde. işin içinden çıkamadım. normal kullandığımda lookup ları rahatlıkla kullanıyorum ama master/detail olarak kullanamıyorum,

forumda lookupcombo lar hakkında üç sayfa konu buldum ama bana çözüm bulamadım. yardımcı olursanız sevinirim. hoş olmasanızda sizi seviyorum.

kolay gelsin.
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Re: Master/Detail DBLookupcombobox

Mesaj gönderen rsimsek »

bobasturk yazdı:...
burada yapmak istediğim lookup1 de seçtiğim ana_baslık_no yu ilgilendiren ve tablo2 de olan yan_baslık_no ların lookup2 içerisinde görünmesi yani il seçilince diğer lookup ta bağlı ilçelerin görünmesi fakat yapamadım hata alıyorum hata mesajı şu,

.....yanbaslikibdset : Field '' not found. sanırım alan bulunamadı diyor.

listfield ve keyfield lerde değiştirmeler yapsamda hep aynı hatayı alıyorum. datasetler aktif halde. işin içinden çıkamadım. normal kullandığımda lookup ları rahatlıkla kullanıyorum ama master/detail olarak kullanamıyorum,
...
Hocam sanırım mesajın bu kısmı olayı özetliyor :wink:

Madem iki tablo var (iki tablo arasındaki yapı daha fazla tablo için de benzer şekilde kullanılabilir) birinci tabloda (ILLER_TABLOSU) diyelim. İller için PLAKA_NO, IL_ADI alanları olsun. İkinci tabloda (ILCELER_TABLOSU) IL_KODU, ILCE_KODU, ILCE_ADI alanları olsun. ILCELER_TABLOSU nun (IBTable) MasterSource una ILLER_DataSource unu atayıp, MasterFields e PLAKA_NO ları ilişkilendirip IndexName veya IndexFieldNames ı seçtikten sonra, öncelikle ILLER_TABLOSU ve sonra da ILCELER_TABLOSU nu açıp çalıştırabilmen lazım. Burada DataSet olarak IBQuery kullanarak da yapabilirsin. O zaman ILLER_Query sinde select;

Kod: Tümünü seç

select * from ILLER
order by il_adi collate pxw_turk
şeklinde.. ILCELER_Query sinde de

Kod: Tümünü seç

select * from ILCELER
where plaka_no = :PLAKA_NO
order by ilce_adi collate pxw_turk
şeklinde olacak. Hatırlatmakta fayda var buradaki :PLAKA_NO master/detail in yani detail DataSet deki DataSource den gelen (yani bağlı ILCELER_Query sinden) PLAKA_NO dur.

Ayrıca ILCELER_LookupComboBox ı için

Kod: Tümünü seç

procedure TForm1.DBLookupComboBox1Click(Sender: TObject);
begin
  DBLookupComboBox2.KeyValue := IBTable1.FieldByName('PLAKA_NO').AsInteger;
end;
bir ilave ile anında görüntü sağlayabilirsin :wink:

Kolay gelsin.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Merhaba,

@rsimsek ustam öncelikle teşekkür ederim, bu keyvalue olayına yaptığım arama sonuçlarında rastlamıştım ve object ins. te göremeyince nereye yazacağımı bilememiştim aklımda bir soru idi.

derdime gelince düzelmedi. mesajını okuyunca anında uygulamaya geçtim. Ben ibdataset kullanıyorum ve bu ibdatasetleri master/detail olarak bağlamada ve grid üzerinde veya editler üzerinde göstermede sorun yaşamıyorum gayet uygun ve güzel çalışıyorlar.

lookupcomboboxta ise çuvalladım. hala aynı hatayı veriyor. yanbaslikibdset :field '' not found

master/detail olayım verdiğiniz örnek gibi,

Kod: Tümünü seç

anabaslikibdset=select*from ANA_BASLIK order by ANA_BASLIK_NO

Kod: Tümünü seç

yanbaslikibdset=select*from YAN_BASLIK where ANA_BASLIK_NO=:ANA_BASLIK_NO
bu şekil bağlantıda edit veya grid üzerinde göstermede ve yazdırmada şimdiye kadar sorunum olmadı.

lookupcombobox bağlantılarım şöyle

Kod: Tümünü seç

ana_baslık_lookupcombo=
listsource:anabaslikdatasource(anabaslikibdsete bağlı)
listfield: ANA_BASLIK_NO
keyfield: ANA_BASLIK_NO

Kod: Tümünü seç

yan_baslık_lookupcombo=
listsource:yanbaslikdatasource(yanbaslikibdsete bağlı)
listfield: YAN_BASLIK_NO
keyfield: YAN_BASLIK_NO(ana_baslık_no ile değiştiriyorum hatayı alınca ama yine aynı hatayı veriyor)

Kod: Tümünü seç

  dblookupcombobox2.keyvalue:=yanbaslikibdset.fieldbyname('ANA_BASLIK_NO').asstring;
şeklinde uyguluyorum ama sorun yine aynı field not found

anlamadığım normal şartlarda yani grid veya editlerle göstereceğim bir bağlantıyı sorunsuz yaparken lookup larda yapamamak :cry:

kolay gelsin.

son olarak tablo yapılarım şöyle,

Kod: Tümünü seç

CREATE TABLE ANA_BASLIK (
    ANA_BASLIK_NO  VARCHAR(10) NOT NULL,
    BASLIK_ADI     VARCHAR(100) NOT NULL
);




/******************************************************************************/
/***                              Primary Keys                              ***/
/******************************************************************************/

ALTER TABLE ANA_BASLIK ADD CONSTRAINT PK_ANA_BASLIK PRIMARY KEY (ANA_BASLIK_NO);

Kod: Tümünü seç

CREATE TABLE YAN_BASLIK (
    ANA_BASLIK_NO  VARCHAR(10) NOT NULL,
    YAN_BASLIK_NO  VARCHAR(25) NOT NULL,
    BASLIK_ADI     VARCHAR(100) NOT NULL
);




/******************************************************************************/
/***                              Primary Keys                              ***/
/******************************************************************************/

ALTER TABLE YAN_BASLIK ADD CONSTRAINT PK_YAN_BASLIK PRIMARY KEY (ANA_BASLIK_NO, YAN_BASLIK_NO);
belki sorun çözümünde yardımcı olur.
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Hocam bir yerlerde eksik bir şey olabilir :?: Yada dataset leri kopyalayıp yaptıysan field lar kopyalanıp gelmiş olmasın. Sıfırdan boş bir forma koyup dener misin?
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Merhaba,

@rsimsek ustam freeman35 ustamın bir ara verdiği il ve ilçeler script i vardı onda denedim yine sonuç aynı, lookup1 in onclik event ine kod yazarsam access violation hatası veriyor, kod yazmaz isem field not found hatası alıyorum, son mesajından sonra dediğin gibi sıfırdan denedim sonuç aynı, uygulamam üzerinde denedim sonuç aynı,

uygulamamda çözüm olarak şunu yaptım şimdilik, aynı datasetleri kullandım yani datasetleri hiç değiştirmedim sadece lookup yerine dbedit koydum ve editlerin yanına birer buton koydum, buttonlar form açıyor ve içinde gridler var bu gridler bahse konu datasetlere bağlı master/detail olarak. kullanıcı istediği başlığı seçiyor ve dbedit içine gelmesini sağlıyor.

hoş buradada sorun var ama onu aşabilirim. dbeditlerin içine bilgiyi alsada kaydetme esnasında dolu olan editi boş görüyor ve hata mesajı veriyor boş kaydedememe sorunu şeklinde.

anlıyacağın master/detail bağlantı grid ile çalışıyor, lookupcombo veya lookuplistbox ile çalıştıramadım.

kolay gelsin.
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
shadowmann
Üye
Mesajlar: 508
Kayıt: 30 Oca 2004 10:49

Re: Master/Detail DBLookupcombobox

Mesaj gönderen shadowmann »

Üzerinden epey zaman geçmiş ama bende aynı sorunla karşılaştım.Daha önce comboboxla çözmüştüm sorunu. Şimdi dblookupta ısrar ettim ama nafile olmuyor. Çözümü bulan varsa yazarsa sevinirim.
Her zaman bir vâmuk-i azra olur alem bu ya,
Nev-be-nev efsaneler peydâ olur alem bu ya,
Kabz u bast kıl tefekkür aleminde ey gönül,
Vakt-i sermânın sonu, vakt-i germân olur alem bu ya...
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Re: Master/Detail DBLookupcombobox

Mesaj gönderen bobasturk »

Merhaba,

ustam şimdilik kücük bir kusurla işlemi yapıyorum cxdblookup kullanarak. yapman gereken örnek olarak il lookup pencere açıldığınad lookupun onclick olayına il tablosunda konumlama (locate) yapman gerekiyor. ilçe detail tablo bu konumlanma detail bağlantı özelliği ile ilgili ilin ilçeleri diğer lookupta görünüyor.

biraz kendimi ifade zorluğundan anlatamamış olabilirim. ana tabloya bağlı lookupun onclick olayında anatabloya locate yap.

kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Cevapla