işlemi olan stoğun silinmesini engellemek
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 216
- Kayıt: 14 Şub 2004 03:13
- Konum: Gebze
- İletişim:
işlemi olan stoğun silinmesini engellemek
s.a. arkadaşlar
yapmak istediğim satis tablosunda kaydı olan bir stoğun stok tablosundan silinmesini engellemek.forumda aradım ancak bulamadım.acaba nasıl bir mantık izlemeliyim.
yapmak istediğim satis tablosunda kaydı olan bir stoğun stok tablosundan silinmesini engellemek.forumda aradım ancak bulamadım.acaba nasıl bir mantık izlemeliyim.
-
- Üye
- Mesajlar: 216
- Kayıt: 14 Şub 2004 03:13
- Konum: Gebze
- İletişim:
Hayir, kesinlikle foreign key kullanmalisiniz.
Cascade özelligi, zaten silindiginde ilgili kayitlarin silinmesi icin var, cascade isaretini kaldirin. Ayrica hangi veritabanini kullaniyorsunuz? MS-SQL ise checkbox seklinde de o yuzden
Trigger'a gelince, bildigim kadariyla, triggerda ilgili kaydin olup olmadigini kontrol ederken yazacaginiz SQL kodu tum tabloyu arayacaktir, eger trigger kullanacaksaniz,
gibi bir ifade kullanip COUNT degerini kontrol ederseniz, bu bir yavaslamaya sebep olacak cünkü COUNT yaparken tum tabloyu sonuna kadar arayacak, o yuzden IFEXISTS (MSSQL de boyle digerlerinde bilmiyorum) seklinde ifade kullanmalisiniz ki en ufak bir kayit oldugunda hemen result TRUE olur yani tum tabloyu kontrol etmez bu da performansi artirir.. Ama tabiki bence hepsi gereksiz cunku foreign key kullanmaniz en mantiklisi.
Kolay gelsin.
Cascade özelligi, zaten silindiginde ilgili kayitlarin silinmesi icin var, cascade isaretini kaldirin. Ayrica hangi veritabanini kullaniyorsunuz? MS-SQL ise checkbox seklinde de o yuzden

Trigger'a gelince, bildigim kadariyla, triggerda ilgili kaydin olup olmadigini kontrol ederken yazacaginiz SQL kodu tum tabloyu arayacaktir, eger trigger kullanacaksaniz,
Kod: Tümünü seç
SELECT COUNT(STOKREFNO) FROM SATIS WHERE STOKREFNO = 15
Kolay gelsin.
-
- Üye
- Mesajlar: 216
- Kayıt: 14 Şub 2004 03:13
- Konum: Gebze
- İletişim:
-
- Üye
- Mesajlar: 216
- Kayıt: 14 Şub 2004 03:13
- Konum: Gebze
- İletişim:
hata mesajini verdirmeyi try except blogunla yapabilirsiniz.. Zaten eger veritabani kisminda foreign key düzenlemesini yaptiysaniz veritabananiniz exception olusturacaktir.
Try
.
.
AdoQuery.ExecSQL;
except
On E: Exception do
begin
ShowMessage(E.Message);
.
.
end;
end;
Try
.
.
AdoQuery.ExecSQL;
except
On E: Exception do
begin
ShowMessage(E.Message);
.
.
end;
end;
Kod: Tümünü seç
-
- Kıdemli Üye
- Mesajlar: 1026
- Kayıt: 11 Şub 2005 02:12
- Konum: İstanbul
-
- Üye
- Mesajlar: 216
- Kayıt: 14 Şub 2004 03:13
- Konum: Gebze
- İletişim:
@Glen haklı. Foreign Key (FK) tutarlı bilgi girişini sağlamak haricinde ilişkili bir kaydın silinip tutarsızlığa sebep vermemek için icat edilmiş bir özelliktirGlen yazdı:Kesinlikle katilmiyorum trigger ile yapmamaya calisin. Foreign key kullanimini ogrenin beceremiyorsaniz en son care onu deneyin.

Kod: Tümünü seç
ALTER TABLE STOK_KART ADD CONSTRAINT FK_STOK_KART_BIRIM_ID FOREIGN KEY (BIRIM_ID) REFERENCES BIRIMLER (ID);
Kod: Tümünü seç
ALTER TABLE STOK_KART ADD CONSTRAINT FK_STOK_KART_BIRIM_ID FOREIGN KEY (BIRIM_ID) REFERENCES BIRIMLER (ID) ON DELETE CASCADE;


Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
-
- Üye
- Mesajlar: 216
- Kayıt: 14 Şub 2004 03:13
- Konum: Gebze
- İletişim: