hatayı yakalıyamıyorum....

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
FXERKAN
Üye
Mesajlar: 178
Kayıt: 26 Tem 2003 11:06
Konum: Sivas - Konya
İletişim:

hatayı yakalıyamıyorum....

Mesaj gönderen FXERKAN »

merhaba tablolarımdaki tutar alanındaki toplamı bulmak için aşağıdaki kodu kullanıyorum

Kod: Tümünü seç

function  toplam_bul(tablo : TAdoQuery; field_name : string) : double;
var
bookmark : pointer;
sonuc : double;
begin
   Bookmark := tablo.GetBookmark;
   tablo.DisableControls;
   sonuc := 0;
    try
      tablo.First;
      while (not tablo.Eof) do
          begin
            try
               sonuc := sonuc + tablo.FieldByName(field_name).Value;
            except
                   on E:EVariantTypeCastError do
                   begin
                   sonuc := sonuc + 0;
                   end;
            end;
          tablo.Next;
          end;
    finally
      tablo.GotoBookmark(Bookmark);
      tablo.FreeBookmark(Bookmark);
      tablo.EnableControls;
    end;

    result := sonuc;
end;
kodda EVariantTypeCastError ile bu hatayı yakalayıp bu hata mesajını kullanıcya göstermek istemiyorum ama hatayı yakalayacağı yere girmeden hata mesajını veriyor. bu hatayıda tutar alanı null ken yapıyor ve null veriyi double çeviremediği söylüyor.

bu kod doğrumu yada başka nasıl yapabilirim bu işi.
[ F X E R K A N © - E r k a n Ç İ F T Ç İ ]
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Fahrettin Abi nin daha önce önerdiği bir yöntem :

Kod: Tümünü seç

procedure TDTM_PARAMETRE.TBL_PARAMETREDeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  EDIT_ERROR(E.message);
  // Abort;
end;


procedure EDIT_ERROR(MESAJ : string);
begin
  if POS('Gelen Hata Mesajı', MESAJ)>0 then
  begin
    MessageDlg(MESAJ,mtError, [mbOK],0);
end;
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Exception'lar eğer Delphi'nin ayarında açıksa zaten gösterilecektir. Uygulama Delphi dışında çalıştığında bu exception yine gözükecek demek değildir.

Delphi içinde Exception izlemeyi kapatmak için, Menuden Tools->Debugger Options'a girin, Language Exceptions sekmesindeki Stop on Delphi Exceptions checkbox'unun tık'ını kaldırın. Delphi, artık bir exception yakalarsa ve siz bu exception'u aslında try except bloğu içinde gizlemişseniz, hata vermeyecektir.

try except bloğu arasına koymaktansa, değerin null olup olmadığının kontrolünü yapmak daha kolaydır:

if not tablo.FieldByName(field_name).IsNull then
sonuc := sonuc + tablo.FieldByName(field_name).Value;

şeklinde kullanmak daha mantıklıdır. ancak try except bloğu içinde kullanmak istiyorsanız exception'u kesin belirtmekten kaçının. Sadece o exception olduğundan eminseniz kullanın.

try

except on EVariant.....

yerine

try

except

end

şeklinde daha generic exception tuzakları hazırlamaya çalışın.
Cevapla