Firebird Master Detail

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Firebird Master Detail

Mesaj gönderen Kuri_YJ »

Selamlar,

Tablo yapınızda
Master'daki id Alanı, Fakültelerin ID'sini içeriyor,
Detail'daki id Alanı, Bölümlerin ID'sini içeriyor.

İse tablo yapınızda eksik var demektir. Detail tablonuza FakulteID diye bir şey ekleyin. Bu şekilde olduğunu var sayarsak.


Datasource1'in Dataset'i AdoQuery1 olsun, (MASTER Kabul edeceğim)
Datasource2'nin DataSet'i AdoQuery2 olsun. (DETAIL Kabul edeceğim).

Kod: Tümünü seç

  AdoQuery1.SQL.Text := 'SELECT id, Fakulte FROM MasterTablo' ;
  AdoQuery2.SQL.Text := 'SELECT id, Bolum FROM DetailTablo where FakulteID = :id' ;
Query nesnelerinizin de yukarıdaki gibi SQL'leri olmalı.

Son olarak da, AdoQuery2'nin propertylerinden DataSource yazan bölüme DataSource1'i yazın.

Master Detail bağlantılarınız sağlanmış olur.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Firebird Master Detail

Mesaj gönderen esistem »

elam,
Kısaca olay şudur;
FAKULTE tablonuzun alanları;
KOD integer
ADI Varchar(100)

BOLUM tablonuzun alanları;
KOD integer
FAKULTE_KODU integer
ADI Varchar(100)

Yani BOLUM tablonuzda Bölüm ün hangi FAKULTE ye ait olduğunu belirtiyosunuz o kadar. Önce Fakülte leri tanımlayın her Fakülte nin altına bölümleri tanımlayın şeklinde oluyor.
Bunu QUERY ile sorgularken de @Kuri_YJ nin yaptığı şekilde sorguluyorsunuz.
Örneklemek gerekirse;
Mesela Mühendislik Fakültesi tanımlanmış olsun KOD uda 1 olsun, buna ait Bölüm leri almak isterseniz,

Kod: Tümünü seç

Query1.SQL.Text := 'SELECT KOD, ADI FROM BOLUM WHERE FAKULTE_KODU=1';
şeklinde olacak.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Firebird Master Detail

Mesaj gönderen esistem »

Birde Foreign Key in amacını şu şekilde düşünün,
FAKULTE ve BOLUM tablolarınız arasında Foreign Key oluşturursanız FAKULTE_KODU Fakülte tablosunda olmayan bir kaydı BOLUm tablosuna kayıt edemezsiniz.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Firebird Master Detail

Mesaj gönderen Kuri_YJ »

Sanırım arkadaş Foreign Key olayında dağılmıştır :)
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Firebird Master Detail

Mesaj gönderen esistem »

2 adet database koymanıza gerek yok, eğer varsa da 2 adet transaction koymanız gereklidir.

Bağlantılar şu şekilde,
bir adet ıbdatabase bir adet transaction 2 adet dataset 2 ade datasource 2 adet te grid.

ibdatabase ve ibtransaction ları birbirne bağlayın, dataset lerinizide database ve transaction a bağlayın, datasource larınızı dataset ile ilişkilendirin, gridlerinizi de datasource larla bağlayın.
Cevapla