Application.OnException bölümündeki bilgiyi yakalama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
muratmutlu
Üye
Mesajlar: 57
Kayıt: 02 Tem 2005 02:44
Konum: Antalya

Application.OnException bölümündeki bilgiyi yakalama

Mesaj gönderen muratmutlu »

Merhaba, benim şöyle bir sorunum var. Bir çok projeden ve formdan oluşan bir programım var. Bu programda oluşacak hataları kaydeden bir sistemim var. Sistemde (Application) bir hata oluştuğu zaman otomatik olarak bir hata formu üretiliyor. Bu formda hatanın içeriği de dahil olmak üzere bir çok şey alınıyor. Bu noktada; ben bir hata aldığım zaman, hatayı alan nesenenin TQuery ise içindeki SQL cümlesini de almasını istiyorum. Bunun için Application.OnException bölümünde Sender ile kontrol yapmak istedim. Sender ile gelen objenin sınıfı TQuery olması gerekirken TPanel olarak dönüyor. Panel dönmesinin sebebi ise hataya sebep olan edit (Edit içinde özel bir karakter kullanılıyor) in panelde olması. Application.OnException bölümünde alabildiğim sadece 2 parametere var birisi Sender: TObject; diğeri ise E: Exception, fakat ikisinden de tatmin edici bir sonuç alamadım. Kısacası hatanın oluştuğu nesne TQuery ise içindeki SQL cümlesini de almak istiyorum bunu nasıl yaparım ?
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Application.OnException bölümündeki bilgiyi yakalama

Mesaj gönderen sabanakman »

Çıkan hatanın nesne ile alakası olmayabilir. Bahsettiğiniz sender parametresi ilginçtir o anki aktif kontrolün içinde bulunduğu bileşeni vermekte. Zaten hata çıkaran nesneler değil kodlardır. Mesela negatif sayının karekökünü hesaplamak bir istisnadır. Hatalı SQL sorgusu işletilmeye çalışması gibi. Bunun yerine E parametresinin istisna sınıfı (E.ClassName) veya içerdiği mesaja (E.Message) göre yönlendirme yapılabilir.

Kod: Tümünü seç

procedure TForm1.ApplicationEvents1Exception(Sender: TObject;
  E: Exception);
begin
  Label1.Caption:=TComponent(Sender).Name;
  Label2.Caption:=E.ClassName;
  Label3.Caption:=E.Message;
end;
kodu ile çıkan hataların kaynağı hakkında yorum yapabilirsin.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla