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
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

master detail

Mesaj gönderen serbek_tr »

Hayırlı Çalışmalar ;

arkadaşlar uzun uzun yazmama gerek yok herhalde aşagıdakilerden olayın ne olduğu anlaşılıyordur;
trigger;

Kod: Tümünü seç

CREATE TRIGGER TRGI_TBL_IRSALIYEGD FOR TBL_IRSALIYEGD ACTIVE
AFTER INSERT POSITION 0
AS

begin
execute procedure SPI_IRSALIYEGD NEW.STOKKOD, NEW.STOKMIKTAR; 
end
buda procedure;

Kod: Tümünü seç

CREATE PROCEDURE SPI_IRSALIYEGD (
    KOD VARCHAR (20),
    MIKTAR NUMERIC (12, 3))
AS

begin
  Update TBL_STOK_KARTI Set
    MEVCUT = MEVCUT + :MIKTAR
  Where    KOD = :KOD;
end
bu olay master detail çalışan tablolarımdan detail olanına ait
ve master tablodaki bir bilgiya bağlı olarak bu olayın

Kod: Tümünü seç

CREATE PROCEDURE SPI_IRSALIYEGD (
    KOD VARCHAR (20),
    MIKTAR NUMERIC (12, 3),TUR SMALLINT)
AS

begin
  If (tur=0) then
  Update TBL_STOK_KARTI Set
    MEVCUT = MEVCUT + :MIKTAR
  Where    KOD = :KOD;

  If (tur=1) then
  Update TBL_STOK_KARTI Set
    MEVCUT = MEVCUT - :MIKTAR
  Where    KOD = :KOD;

end
Şeklinde olamsını istiyorum yukarıda kodda geçen TUR master tablodan gelecek olan durum ve bunu detailin trigger dan bu procedure nasıl gönderebilirim yada mümkünmüdür.
herhalde istediğimi anlatabilmişimdir eger böyle bir şey mümkün değilse bile izlenebilecek başka bir yol varmıdır.
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Delphi tarafında Ana Tabloya ait TUR diye bir alan ve yine Detay Tabloda da TUR diye bir alan tut.
Ana Tablonun After Insert inde TUR(integer) alanının değerini 1 ata mesela

Kod: Tümünü seç

-AnaTablo.AfterInsert
begin
  AnaTablo.FieldByName('TUR').AsInteger := 1;
end
ve
Detay Tablonun After Insert inde de bu TUR alanın değerini Ana Tablodan alırsın.

Kod: Tümünü seç

-DetayTablo.AfterInsert
begin
  DetayTablo.FieldByName('TUR').AsInteger := AnaTablo.FieldByName('TUR').AsInteger ;
end
Böylece Delphi tarafında (Detay tablo için söylüyorum) yeni bir kayıt eklendiğinde kayıt Post olduktan sonra veritabanı tarafında o Detay Tablo nun After Insert olayı çalışacaktır .

Sanırım istediğin böyle birşeydir. Ayrıca Delete Trigger ında ve Update Trigger ında da çalışacak SP leri yazmanı öneririm .

Kolay gelsin..
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Diğer Sp lerde hazır yazdım önerdiğiniz yol için teşekkür ederim, Bu mantığın bilincindeydim ancak ancak boşu boşuna küçük birşeyde olsa detail tabloda bir alan daha olsun istemediğim için uygulamadım. yani ana tabloda zaten tür mevcut detailde tür alanı olmadan ana tablodaki tür ile bilgiyi nasıl işleyebilirim diye düşünüyordum.

Teşekkürler;
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Cevapla