stored Procedure ve post_event

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
hakkus
Üye
Mesajlar: 160
Kayıt: 18 Haz 2003 12:02
Konum: Konya

stored Procedure ve post_event

Mesaj gönderen hakkus »

Merhabalar,
Firebird 1.5 kullanıyorum.
Trigger kullanmadan post_evet göndermenin bir yolu varmı?
Yapmak istediğim bir storedProcedure çalıştıktan sonra post_event oluşturulması..

Kod: Tümünü seç

create hesaplaProcedure ...
...
...
 post_event.....
END
saygılar
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

procedure den çıktığı yerlere yazdığında çalışması lazım yani trigger olmasına gerek yok, ama en sağlamı trigger neden trigger istemiyorsun ?
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 !!!
hakkus
Üye
Mesajlar: 160
Kayıt: 18 Haz 2003 12:02
Konum: Konya

Mesaj gönderen hakkus »

Merhabalar,
ilginize teşekkür ederim.
StoredProcedur içinden son işlem olarak post_event çalışmıyor.
Aynı post_event triger de çalışıyor.
Triger de kullanmak istemememin sebebi ise;
StoredProcedure bazı kayıtları seçiyor ve bunları update ediyor.
Bunun sonucunda da güncellemeler yapıldı msg ı almak için post_event kullanmak istedim.
Bu post_event i table in afterUpdate ine yazarsam yüzlerce kayıt update edildiği için yüzlerce de post_event oluşacak. Bu istediğim birşey değil.
saygılar
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

gecici tek kayıtlık basit bir tablo kullanarak bunun afterupdate triggerina yazabilirsin
sp den bu tablodaki kayıtı update edersin, trigger tetiklenir.
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

ben event'ı delphi tarafından yaptığım için hiç denemedim, event'ın tetiklenmesi için "commit" edilmesi gerekiyor, "POST_EVENT" den sonra "commit;" yazıp denermisin ?

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 !!!
hakkus
Üye
Mesajlar: 160
Kayıt: 18 Haz 2003 12:02
Konum: Konya

Mesaj gönderen hakkus »

Merhabalar,
Commit sorunu yok çünkü buna dikkat ediyorum, başka yerlerde de aramama karşılık herhangi bir bilgi bulamadım.
Sonuç olarak storedProcedure ın post_event tetiklemediği kanaatine vardım.
Sanırım çözüm yolu Sayın gkimirti nin belirttiği gibi sProcedure son işlem olarak geçici bir table i update edecek onun afterUpdate trigger i de post_event oluşturacak.:)
Kolay gelsin.
saygılar
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

biraz once denedim sp calıstıktan sonra commit edince post_event event tetikliyor.
siz de bir sp icinde update , insert vs. yapıp en son post_event yapatıgınızda eger sp yi commit ederseniz (ki etmezseniz yapılan degisiklikler yansımayacak) calısması lazım
ÜŞENME,ERTELEME,VAZGEÇME
hakkus
Üye
Mesajlar: 160
Kayıt: 18 Haz 2003 12:02
Konum: Konya

Mesaj gönderen hakkus »

Merhabalar,
İlginç ben hala storedProcedure içinden çalıştıramadım.
SProcedure aşağıdaki gibi;

Kod: Tümünü seç

Create procedure OSSTOPLA
as
BEGIN

   update KIMLIK
  SET OSSTOPLAM=(0,52*AOBP)+(0,36*OSS_PUAN)
WHERE OKULTUR='SPOR';

update KIMLIK
  SET OSSTOPLAM=(0,16*AOBP)+(0,47*OSS_PUAN)
WHERE OKULTUR='DİĞER';

post_event 'OSSAOBPTOPLANDI'

END
tabii bu kodu yazdıktan sonra CTRL+F9 la compile ediyorum.
Successful olduğunu belirtiyor ve COMMIT i soruyor commit ediyorum.
Delphi tarafinda IBEvebts ta gerekli ayarlamaları yaptım ve storedProcedure i execute ettim. Puanlar hesaplanıyor ancak post_event mesajını alamıyorum.

Delphi tarafında hata yok çünkü KIMLIK table in AfterUpdate ine
aynı post_event i yazınca mesajı alabiliyorum.
saygılar
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

Kod: Tümünü seç

CREATE PROCEDURE POSTEVENT (
    EVENT_STR VARCHAR(20))
AS
begin
  post_event EVENT_STR;
end
bendeki de bu calısıyor.

delphide

Kod: Tümünü seç

procedure TFrmMain.IBEvents2EventAlert(Sender: TObject; EventName: String;
  EventCount: Integer; var CancelAlerts: Boolean);
begin
  ShowMessage(EventName);
end;
dfm deki tanımı

Kod: Tümünü seç

  object IBEvents2: TIBEvents
    AutoRegister = True
    Database = Dm.DB
    Events.Strings = (
      'deneme')
    Registered = False
    OnEventAlert = IBEvents2EventAlert
    Left = 179
    Top = 96
  end
ÜŞENME,ERTELEME,VAZGEÇME
Cevapla