Arkadaşları herkese kolay gelsin..
Master tablo
----------------
M_ID İNTEGER NOT NULL (primarykey)
M_AD AD
Detail Tablo
-----------------
D_ID1 INTEGER NOT NULL (primarykey)
D_ID2 INTEGER NOT NULL (foringkey)
D_BILGI STRİNG
bu şekilde iki tablomuz var olsa..
bu iki tabloyu M_ID-->D_ID2 ile ilişkilerdiriyorum..
birleştirme için Bileşen Olarak IBTable kullandım..detail tablonun IndexFıeldname=D_ID2, Master Fields=M_ID oarak ayarladığım zaman herşey normal çalışıyor. İkitabloyu bu şekilde birleştirmemdeki amaç detail tabloya 1 den fazla kayıt gireceğimi düşünerek yaptım.bu şekilde master tabloya bir kayıt giriyorum daha sonra master talboda datasoruce hangi kayda konumlu ise o kayıtın M_ID numarası otomatik olarak D_ID2 ye atıyor.ve kaydı giriyorum sorunsuz yine aynı kayıta konumlu iken birdaha girmek istediğimi yine M_ID yi atıyor, uniqe olmadığı için aynı numara atanabiliyor.
Ama master talodan kayıt silersem detail silinmiyor,bir tabloda primerykey tanımlamadan foringkey tanıtamazmıyız böyle bir şart mı var ben tanıtamadım.IBTable ın index def ten foringkeyi indexfieldname de gösteremiyorum.
hata sizce neresi,, bu şekilde bir yapı yanlışmı doğrumu,veya bu şekilde bir olayı nasıl yaparız.endindiğim bilgiler doğrultusunda birşeyler yapmaya çalıştım ama olmadı nedense.evet arkadaşlar sizlerden ricam bana fikirlerini sunmanız çözüm önerilerinizi bekliyorum.
firebird
-
- Kıdemli Üye
- Mesajlar: 574
- Kayıt: 01 Şub 2004 12:29
- Konum: Erdemli - MERSİN
Master kayıt silindiğinde detay daki kayıtların silinmesini bekleyemezsiniz.
Bunun için en iyisi master ın After Delete Trigger ına gerekli kodu yazmaktır.
Bunun için en iyisi master ın After Delete Trigger ına gerekli kodu yazmaktır.
Kod: Tümünü seç
CREATE TRIGGER TD_ Master_tablo FOR Master_tablo
ACTIVE AFTER DELETE POSITION 0
as
declare variable KAYIT_SAYISI integer;
begin
select count(*)
from Detail_Tablo
where D_ID2 = old.D_ID2
into :KAYIT_SAYISI;
if (KAYIT_SAYISI > 0) then
begin
delete from Detail_Tablo
where D_ID2 = old.D_ID2;
end
end
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
@coderlord'un dediği gibi foreing keyi tanımlarken bu özelliğin firebird tarafından otomatik olarak yerine getirilmesini sağlayabilirsin.
benim eklemek istediğim husus bu konuda çok dikkatli olmandır. Veritabanının yapısına göre zincirleme oluşacak bir silme işlemi istenmeyen kayıtlarında silinmesine neden olabilir.
dikkatli olmakta fayda var.
benim eklemek istediğim husus bu konuda çok dikkatli olmandır. Veritabanının yapısına göre zincirleme oluşacak bir silme işlemi istenmeyen kayıtlarında silinmesine neden olabilir.
dikkatli olmakta fayda var.
Tabiki öle dikkatli olmak lazım...Detaildeki foringkey tanımlarken ayarlamaları yapıyorum ama yine silmedi o yüzden foruma sormuştum..Oğuz hocam trigger vermiş onla deniycem inşallah olur..İlgilendiğiniz için teşekkür ederim ...firebird öğreniyoruz kolay olmuyor tabiki ama baya iyiymiş bu firebird.
Ben yine sık sık rahatsız edicem..Kolay gelsin..
Ben yine sık sık rahatsız edicem..Kolay gelsin..
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.
***********************************