Firebird trigger silme problemi

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ı
veliadiguzel
Üye
Mesajlar: 197
Kayıt: 09 Tem 2003 02:11
Konum: Gebze/Kocaeli
İletişim:

Firebird trigger silme problemi

Mesaj gönderen veliadiguzel »

Kod: Tümünü seç

begin
  /* Trigger text */
  new.toplam=new.tekrar*new.birim_zaman*new.adam*new.tekrar_sayisi;
  old.toplam=old.tekrar*old.birim_zaman*old.adam*old.tekrar_sayisi;
  if (inserting) then
  begin
    if (new.toplam is null ) then new.toplam=0;
    update gruplar set gruplar.toplam = gruplar.toplam+new.toplam where gruplar.id=new.grup_id;
  end
  if (updating) then
  begin
    if (new.toplam is null ) then new.toplam=0;
    if (old.toplam is null ) then old.toplam=0;
    update gruplar set gruplar.toplam = gruplar.toplam+new.toplam-old.toplam where gruplar.id=new.grup_id;
  end
  if (deleting) then
  begin
    if (new.toplam is null ) then new.toplam=0;
    if (old.toplam is null ) then old.toplam=0;
    update gruplar set gruplar.toplam = gruplar.toplam-old.toplam where gruplar.id=old.grup_id;
    delete from gorevler_data where gorevler_data.gorev_id=old.id;
  end
end
Böyle bir trgigerim var ama silme yaparken aşağıdaki gibi hata alıyorum triggeri iptal edersem çalışması sıkınıt yok..
Error Message:
----------------------------------------
The cursor identified in the update or delete statement is not positioned on a row.
no current record for fetch operation.
attempted update of read-only column.
Veli ADIGÜZEL
Kullanıcı avatarı
veliadiguzel
Üye
Mesajlar: 197
Kayıt: 09 Tem 2003 02:11
Konum: Gebze/Kocaeli
İletişim:

Re: Firebird trigger silme problemi

Mesaj gönderen veliadiguzel »

Kod: Tümünü seç

  if (inserting or updating ) then
  begin
    new.toplam=new.tekrar*new.birim_zaman*new.adam*new.tekrar_sayisi;
    if (new.toplam is null ) then new.toplam=0;
    toplam=toplam+new.toplam;
  end
  if (updating or deleting ) then
  begin
   old.toplam=old.tekrar*old.birim_zaman*old.adam*old.tekrar_sayisi;
   toplam = toplam - old.toplam;
   delete from gorevler_data where gorevler_data.gorev_id=old.id;
  end
   update gruplar set gruplar.toplam = gruplar.toplam +:toplam where gruplar.id=old.grup_id;
kodu biraz sadeleştirirken hatamı buldum old.* insert triggerinde olmadığı için if (inserting) üstünde atama yaptığımdan hata veriyormuş galiba şimdi hata vermiyor.
Veli ADIGÜZEL
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Firebird trigger silme problemi

Mesaj gönderen Kuri_YJ »

Selamlar,

Her yiğidin yoğurt yiyişi farklıdır. Bence INSERT UPDATE veya DELETE için ayrı ayrı Trigger yazmak, hem kod sadeliği açısından hem de hız açısından önem arz eder. Siz Trigger'ınızda IF INSERTING OR UPDATING gibi ifadeleri defalarca kullanıp Procedure'u dallandırıyorsunuz. Bu her bir kayıt silme, düzeltme ve ekleme işlemi sırasında çalışacak. Boşuna CPU Cycle'larından yersiniz. Size böyle bir imkan verilmiş, INSERT aşamasında ne yapmak istiyorsanız INSERT triggerına , UPDATE sırasında yapılması istenenler UPDATE triggerina yazılarak, boşuna CPU'dan yemeyin. Hem de kod karmaşasından kurtulun. Insert işi yaparken sadece INSERT triggerını tetikletmiş olursunuz. UPDATE ve DELETE bölümleri hiç devreye girmez. Böylelikle de Hız kazanırsınız. ;)

Kolay Gelsin

Performans işlemleri için bu tür küçük ama önemli ayrıntıları gözden kaçırmayın.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
veliadiguzel
Üye
Mesajlar: 197
Kayıt: 09 Tem 2003 02:11
Konum: Gebze/Kocaeli
İletişim:

Re: Firebird trigger silme problemi

Mesaj gönderen veliadiguzel »

a.r.o. aklıomın bir köşesine yazdım..
Veli ADIGÜZEL
Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 185
Kayıt: 05 Eki 2007 08:02

Re: Firebird trigger silme problemi

Mesaj gönderen KoPilot »

veliadiguzel yazdı:a.r.o. aklıomın bir köşesine yazdım..
nereye yazdınn...
aklınla omurgan arasında bir yer ama :mrgreen:
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk
Eyvallah..
Kullanıcı avatarı
veliadiguzel
Üye
Mesajlar: 197
Kayıt: 09 Tem 2003 02:11
Konum: Gebze/Kocaeli
İletişim:

Re: Firebird trigger silme problemi

Mesaj gönderen veliadiguzel »

Akıl kişiye göre yaşına göre bulunduğu yer değişe bilir ;)
Veli ADIGÜZEL
Cevapla