Trigger içinde abort veya benzeri ?

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
AraGorN
Üye
Mesajlar: 28
Kayıt: 30 Eyl 2003 02:02
Konum: Bornova - İzmir
İletişim:

Trigger içinde abort veya benzeri ?

Mesaj gönderen AraGorN »

Merhabalar;
durum şu : tablolardan veri sildirmek istemiyoruz. master detail yapılarda veri silmenin zorluklarını yaşamaktansa veya kullanıcının söleme tarzıyla ben bu hesabı artık kullanmıyorum o zaman sileyim ama eski kayıtlarıma döndüğümde görebileyim sorunlarına cevap verebilmek için böyle bir yöntem düşündük. silinen verileri belirtmek için deleted alanı tutuyoruz her tabloda. bu alanda 0 yada 1 (boolean) durumuna göre kayıt silinmişse listelemiyoruz ancak geçmiş kayıtlara dönüldüğünde ismine cismine ulaşıp gösterebiliyoruz.

sorun şu: delphi içinde beforedelete eventinde önce update işlemini yaptırıp sonra delete işlemini abort ederek bu iş gayet güzel oluyor.
ancak özellikle bağlantı hızı düşük clientlarda bu işin çirkinleştiğini farkediyoruz.

dolayısıyla before delete trigger'ında delete işleminin iptal edilmesi onu yerine update işleminin yapılması lazım. ancak kurcaladım ama exception kullanmadan bu işin nasıl yapılabileceğini bulamadım.

Bilen, gören, duyanların insanlık namına bilgi vermeleri rica olunur. :D :D :D

Firebird kullanıyorum. v1.5.1.xxx
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

bu isi beforedelete triggerında exception sız yapmak sanırım imkansız.
bunun yerine datasetin delete ini degilde bir pocedure u calıstırarak yapabilirsiniz..
bu isin kotu tarafıda tum Delete methodlarını degistirmek zorunda olmanız
yada soyle bir kestirme yol da olaiblir
Tibdatasetin Delete metodunu ezerek yeniden tanımlayabilirsiniz...
icinede istediginiz kodu yani procedure ile silme islemini yapabilirsiniz...
ÜŞENME,ERTELEME,VAZGEÇME
AraGorN
Üye
Mesajlar: 28
Kayıt: 30 Eyl 2003 02:02
Konum: Bornova - İzmir
İletişim:

Mesaj gönderen AraGorN »

peki exceptionla yaptık diyelim exceptionu ezme gibi bir şansımız var mı (yine trigger yada sp içinden) ? çünkü amaç bizim işimizi kolaylaştırmak değil özellikle clientlarda exe içinden sıfır yada sıfıra yakın veritabanı işlemi yaptırmak tabi post delete edit commit vs hariç.
exception ezmekten kastım gösterilmemesini sağlamak yani hata vermesin.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

db tarafında yapabilecekleriniz sınırlı ama delphi tarafında her turlu atı kosturabilirsiniz...
TApplicationEvents nesnesi ile form içinde meydana gelen hataları yakalayabilirsiniz. yani bu su anlama geliyor delete denildiginde
db tarafından gelen exeption stringi yakalanınca hic mesaj verdirmezsiniz.
dedigimi anladıysanız ufak bir ekleme ile sorununuzu cozmus olursunuz.

OnException olay yordamına;

Kod: Tümünü seç

if E.Message='Dbden gelen mesaj' then
  exit
else
  ShowMessage(E.Message) ;
ÜŞENME,ERTELEME,VAZGEÇME
AraGorN
Üye
Mesajlar: 28
Kayıt: 30 Eyl 2003 02:02
Konum: Bornova - İzmir
İletişim:

Mesaj gönderen AraGorN »

anlaşıldı delphiden yapıcaz seve seve. error'ı delphide yakalamayı ve göstermemeyi biliyordum zaten de sp veya trigger içinde bunu yapmanın (veritabanında tanımladığım exceptionlar için tabe) bir yolunu arıyodum. anlaşılan yanlış yoldayım. neyse delphi içniden yapalım artık başka çare yok. Teşekkür ederim Kolay Gelsin
Cevapla