Master-Detail

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
dost
Üye
Mesajlar: 104
Kayıt: 08 Oca 2004 11:33

Master-Detail

Mesaj gönderen dost »

Merhaba,

Firebird/ IBDataSet

MASTER
M_SICIL integer, Pk (primary) not null
M_

DETAIL
D_ID integer, Pk (primary) not null
D_SICIL integer, Fk (foreign Key) not Null
D_

Detail tablo
ALTER TABLE detail ADD CONSTRAINT FK_Detail FOREIGN KEY(D_SICIL) REFERENCES Master(M_SICIL);

Detail IBDataSet'ine
select * from Detail where D_SICIL=:M_SICIL

tanımladım. Ancak aşağıdaki hatayı veriyor.

'violation of FOREIGN KEY constraint"FK_DETAIL" on table "DETAIL"'


Yardımlarınız için Teşekkür ederim.
Kullanıcı avatarı
Yusuf AYDIN
Üye
Mesajlar: 69
Kayıt: 02 Oca 2004 05:45
Konum: Antalya

Mesaj gönderen Yusuf AYDIN »

Bana göre hatan foreign key tanıtımından kaynaklanıyor.

Tanımalamanı aşağıdaki şekilde düzenlersen düzelir gibi geliyor.

Kod: Tümünü seç

ALTER TABLE detail ADD CONSTRAINT FK_Detail FOREIGN KEY(D_SICIL) REFERENCES Master(M_SICIL) ON UPDATE CASCADE; 
dost
Üye
Mesajlar: 104
Kayıt: 08 Oca 2004 11:33

Mesaj gönderen dost »

Merhaba,

Belirttiğiniz şekilde foreign key tanınladım, ancak detail'de kayıt girerken
yine aynı hatayı veriyor.

Teşekkürler.
Kullanıcı avatarı
Yusuf AYDIN
Üye
Mesajlar: 69
Kayıt: 02 Oca 2004 05:45
Konum: Antalya

Mesaj gönderen Yusuf AYDIN »

Master kayıttı olmayan bir kayıt için Detay kayıtta yapamazsınız.

Mastır kayıta Post yapmanız yetmez. CommitRetainign de yapmalısınız.

Burada hatanız olabilir mi?
dost
Üye
Mesajlar: 104
Kayıt: 08 Oca 2004 11:33

Mesaj gönderen dost »

Merhaba,

Master table'i, IBDataSet1.Transaction.CommitRetaining yapılca çalıştı.

Teşekkürler.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

sorun cözülmüş zaten. Sadece yeri gelmişken belirteyim dedim. İşte bu duruma refferential integrity deniliyor. Verilerinizin butunlugu korunmus oluyor. Gerek foreing keyler ile gerekse triggerlar araciligi ile bu saglanabilmektedir.
hakkus
Üye
Mesajlar: 160
Kayıt: 18 Haz 2003 12:02
Konum: Konya

Mesaj gönderen hakkus »

merhabalar,
Detail Table'in afterInsert'ine aşağıdaki kodu yazarsanız da sorununuz çözülür;

Kod: Tümünü seç

DetailTableD_Sicil.asInteger:=MasterTableM_Sicil.asInteger;
saygılar
Cevapla