master detailde kayıt silme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

master detailde kayıt silme

Mesaj gönderen ademcicek »

ben bu gidişle sora sora programı sizlere yaptıracam herhalde.
master ve detail tablosu birbirine bağlandı. kayıt girldi.

master toblosundan kayıt sildiğm zaman detailde eklenmiş olan kayıtlar olduğu gibi duruyor.
yeni bir kayıt eklediğimim zaman detailine hiç kayıt girmediğim halde akyıt görünüyor. master toblosundan kayıt sildiğim zaman mastere bağlı detail tablosundaki kayıtları nasıl silebilirim.

çok teşekür ederim.
Kullanıcı avatarı
Yusuf AYDIN
Üye
Mesajlar: 69
Kayıt: 02 Oca 2004 05:45
Konum: Antalya

Mesaj gönderen Yusuf AYDIN »

İp ucu kısmında Fahrettin beyin başlattığı ve Naile hanımın ilavesi ile dahada detaylanan Triger ve Stored procedure ile ilgili makaleye bakmanızı tavsiye ederim.
Burada Naile hanımın verdiği örnek sizin sorunuzun tam cevabı.
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

Mesaj gönderen ademcicek »

ipucunun tam yolunu yazabilirmisiniz
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Forumda Makale ve İpucu kısmına bakın, direk göreceksiniz zaten :wink:

kolay gelsin.
hakkus
Üye
Mesajlar: 160
Kayıt: 18 Haz 2003 12:02
Konum: Konya

Mesaj gönderen hakkus »

Merhabalar,
Adem bey sanırım sizin bir diğer probleminiz de master-detail bağlantı anahtarınız.
bir kayıt eklediğimim zaman detailine hiç kayıt girmediğim halde akyıt görünüyor
Bu anahtar tekil/tekrarlanamaz/unique olmalı. Siz master'a kayıt girince demekki başka detail ler bu yeni kaydın detail'i gibi ona bağlanıyor.
Önce master için unique bir alan oluşturun detail buna bağlansın.
Master table dan bir kayıt silmeden önce (BeforeDelete) bu uniqe alana göre detail'i filtre edin ve bu kayıtları silin.
saygılar
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@hakkus bence senin dikkatini çeken sorun bahsettiğin gibi Unique olmamakla değil, master bir kayıt silme operasyonundan hemen önce, bu master kayda ait detail kayıtların tümünün silinmesinin yapılmaması/düşünülmemesi'nden kaynaklandığını değerlendiriyorum. :idea:
Resim
Resim ....Resim
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

ForeingKey kullanırsan triger vs e gerek kalmaz.ForeingKey nin delete için "OnCascade" i seçersen sadece master ı silmen yeterli detail table içindeki bağlı tüm kayıtlar otomatik silinir
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

Mesaj gönderen ademcicek »

silindi -büyük harf'le yazmayın-

Admin
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

Mesaj gönderen ademcicek »

freeman35 hocam ForeingKey kullanımını biraz açarmısınız.yada bir örnek.
teşekür ederim kolay gelsin.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Kod: Tümünü seç

ALTER TABLE TAH_TED ADD CONSTRAINT FK_TAH_TED_MST FOREIGN KEY (MST_ID) REFERENCES CARI_HAREKET (SELF) ON DELETE CASCADE;
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

Mesaj gönderen ademcicek »

arkadaşlar sorunu çözdüm.sorgu çekerek çözdüm.

if MessageDlg('Kayıt Silinsin mi?', mtWarning, mbYesNoCancel, 0) = idyes then

//ihale =master tablom
//Yaz diye bir sorgu oluşturdum.
DataModule1.ADOQuery_Yaz.SQL.Clear;

//malzeme detail tablom
DataModule1.ADOQuery_Yaz.SQL.Add('DELETE from malzeme where id=:id');

DataModule1.ADOQuery_Yaz.Parameters.ParamByName('id').Value := DataModule1.ADOQuery_Ihaleid.Value;
DataModule1.ADOQuery_Yaz.ExecSQL;
DataModule1.ADOQuery_Ihale.Delete;

bu şekilde sorun halloldu.
sako
Üye
Mesajlar: 476
Kayıt: 11 Haz 2003 02:40
Konum: ERZURUM

Mesaj gönderen sako »

freeman ;

Kod: Tümünü seç

ALTER TABLE TAH_TED ADD CONSTRAINT FK_TAH_TED_MST FOREIGN KEY (MST_ID) REFERENCES CARI_HAREKET (SELF) ON DELETE CASCADE;

peki dağişiklik yaparkende delete kısmını mı değiştirecez bu kodun. yani ON DELETE YERİNE ON EDİT gibi bişimi yazacaz
DOĞUNUN SINIR TAŞI ERZURUM'UN DADAŞ'I
EFE'Sİ VAR İZMİR'İN EĞİLMEZ TÜRK' ÜN BAŞI
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

bu tip işlemleri maunal yapma taraftarı değilim, nedeni eğer silme sırasında bir hata olursa yarısı silindi yarısı kaldı kalan neresi vs gibi karışıklıklar çıkabilir. Bunu yap transaction ile önüne geçebilir, yada Database üzerine yıkabilirsiniz.
Database üzerinde Ben foreingkey kullanmayı tercih ediyorum, bu master ın afterdelete trigerindada yapabilirsiniz, ama bunu bir stored procedure içinden yani master kaydı silme işini storedprocedure içinden yaparsanız bir hata olduğunda bunu yakalayıp transaction ı rollback edebilirsiniz. Buda bilgi bütünlüğünü korur
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Cevapla