Trigger MS-SQL 2000

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Burhan_ast
Üye
Mesajlar: 143
Kayıt: 15 Haz 2003 08:33
Konum: Almaty, Kazakhstan

Trigger MS-SQL 2000

Mesaj gönderen Burhan_ast »

Merhaba Arkadaslar,

Kasa fislerinde bir fis eklenince asagidaki trigger calisiyor ve kasa toplamlarimi duzenliyor, Fakat programimda su sekilde bir ozellik var, IPTAL isimli butona bastiginda kullanici kayit databasede silinmiyor sadece IPTAL isimli alanim True yapiyorum ve kayiti kullanici gormuyor, daha sonra bu iptal islemini Geri Al butonu ilede geriye alabiliyor, Geri al bastiginda ise bu seferde Iptal alanini false yapiyorum, yapmak istedigim olay kullanici kayiti iptal eder ise kasa toplamlarindan bu fisteki odeme veya tahsilat rakamini dusmek, veya geri al bastigi zamanda ise bu fisteki rakamlari kasa toplamlarina yeniden eklemek,

Bunun icin nasil bir trigger yazmam lazim, aslinda yazdim ama malesef dogru calismiyor, asagidaki trigger ekle islemi ile calisiyor ve sorun yok,

Kod: Tümünü seç


CREATE TRIGGER FinKasaIslemleri_EkleTrig ON [dbo].[AY_001_FinKasaIslemleri]  FOR INSERT AS 
DECLARE @_KayitNo  int 
DECLARE @_MusteriKayitNo  int 
DECLARE @_KasaKayitNo int 
DECLARE @_Tarih  int 
DECLARE @_RaporlamaDoviziKayitNo  int 
DECLARE @_IslemDoviziKayitNo  int 
DECLARE @_Odeme  Float 
DECLARE @_Tahsilat Float 
DECLARE @_RaporlamaDoviziTutar Float 
DECLARE @_IslemDoviziTutar Float 
DECLARE @_Iptal Bit 
BEGIN 
        -- Eklenen kayittan gerekli bilgiler, degiskenlere aliniyor... 
      select 
   @_RaporlamaDoviziKayitNo = RaporlamaDoviziKayitNo, 
   @_IslemDoviziKayitNo = IslemDoviziKayitNo, 
   @_RaporlamaDoviziTutar = RaporlamaDoviziTutari, 
   @_IslemDoviziTutar = IslemDoviziTutari, 
   @_Tahsilat = Tahsilat, 
   @_Odeme = Odeme, 
   @_Tarih = Month(Tarih), 
   @_MusteriKayitNo = MusteriKayitNo, 
   @_KasaKayitNo = KasaKayitNo, 
   @_Iptal = Iptal, 
   @_KayitNo = KayitNo 
   from inserted    

    If @_Odeme>0 
    Begin 
      -- Kasa toplamlari duzenleniyor... 
         UPDATE AY_001_FinKasaToplamlar 
         SET Odeme = Odeme + @_IslemDoviziTutar, RaporlamaDoviziOdeme = RaporlamaDoviziOdeme + @_RaporlamaDoviziTutar 
         WHERE (IslemDovizi = @_IslemDoviziKayitNo) and (KasaKayitNo = @_KasaKayitNo) and (DonemKayitNo = 1) and (Ay = @_Tarih) 
    end else 
    If @_Tahsilat>0 
    Begin 
      -- Kasa 
      UPDATE AY_001_FinKasaToplamlar 
      SET Tahsilat = Tahsilat + @_IslemDoviziTutar, RaporlamaDoviziTahsilat = RaporlamaDoviziTahsilat + @_RaporlamaDoviziTutar 
      WHERE (IslemDovizi = @_IslemDoviziKayitNo) and (KasaKayitNo = @_KasaKayitNo) and (DonemKayitNo = 1) and (Ay = @_Tarih) 
    end 
END 
Saygilar
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Kasa toplamlarını UPDATE trigger i ile güncelleyebileceğin gibi, canlı olarak IPTAL alanı true olanları hesapla diye bir sorgu veya SP ile de yapabilirsin.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla