film indir
Aralık
11th 2007
Hata Yakalama

Posted under Visual Basic



Kullanıcı ile Dost Hata Mesajları


Program yazarken hata mesajlarını nasıl organize ediyorsunuz? Kullanıcı hata mesajlarından bir şey anlayabiliyor mu? Yada kullanıcı hata mesajı ekranda belirince ne yapacağını biliyor mu?

Burada anlattığım yöntem ile program içinde oluşan hata mesajlarını daha anlaşılır biçime sokabiliriz. Böylece hem kullanıcı hata ile karşılaşınca ne yapacağını bilir, hemde siz hatayı çözerken nereden başlayacığınızı bilirsiniz.

Genel olarak özetleyecek olursak bir VB projesinin, projedeki tüm formların ve formlardaki tüm fonksiyonların bir ismi vardır. Kullanıcı göreceği hata mesajında şöyle bir yapı ile karşılaşır.

vbProjeİsmi.Formunİsmi.Fonksiyonunİsmi

Burada ismi olmayan tek şey kod satırlarıdır. Satırlara isimleri de hatayı ararken biz ekleyeceğiz. Böylece tam bir hata mesajı ekranda belirecek, okunduğunda anlaşılan ve yazılımcıyı yönlendiren bir hata mesajı.

Şimdi yeni proje açıp formun üzerine bir buton koyun. Butonun ismi btnHata olacak. Aşağıdaki kodu formun General Declerations bölümünden itibaren kopyalayın. Kod içindeki yorum satırlarına dikkat edin ve gerekli yerleri isteğinize göre değiştirmeyi unutmayın

Const CLASS_NAME = “frmAdresDefteri”  ’formun ismini veriyoruz.

Private Sub btnHata_Click()

On Error GoTo Exit_proc  ’ Hata durumunda Exit_proc kismina gidecek.

Const METHOD_NAME = CLASS_NAME & “.btnHata_Click” ‘Bu fonksiyonun ismini veriyoruz.

‘Bu durumda elimizde formun ismi ve ilgili fonksiyonun ismi olmuş oluyor.

‘**************************

‘Buradan sonra yapmak istediginiz işin kodlari gelecek

ren = 10 / 0

‘**************************

Exit_proc:

    Call EndProcedure(METHOD_NAME)

End Sub

Şimdi bir module ekleyip aşağıdaki kodu yapıştırın. Bu kod ile hata mesajları daha anlaşılır biçime sokulmaktadır. Eğer istenirse daha da genişletilerek farklı işler yapması sağlanabilir.

Public Sub EndProcedure(sMethod As String, Optional sMessage As String)

Dim sText           As String
Dim lErrNo          As Long
Dim sErrSource      As String
Dim sErrDescription As String
Dim lERL            As Long
    If Err.Number <> 0 Then

      ’Hatanin ayrintilarini kaydediyoruz, Boylece eger MTS kullaniyorsaniz Error nesnesi
        ’kaybolunca bilgisi elimizde kalir
        lErrNo = Err.Number
        sErrSource = Err.Source
        sErrDescription = Err.Description

        lERL = Erl
        sText = App.Title & “.” & sMethod ‘Uygulamanin basliginida ekleyelim

        ’Eger baska bilgi varsa onuda ekliyoruz

        If sMessage <> “” Then sText = sText & sMessage

        ’Okunmasi kolay bir hale getirelim

        sText = “Hata yeri    : ” & sText & vbCrLf & _
                ”Hata satiri  : ” & lERL & vbCrLf & _
                ”Hata icerigi : ” & sErrDescription & vbCrLf & _
                ”Lutfen falan kisi ile kontak kurunuz.”

        ’Ve hatayi kullaniciya gosterelim

        Err.Raise lErrNo, sErrSource, vbCrLf & sText
   End If

End Sub

Bu işlemlerden sonra projeyi çalıştırıp butona basın. Ekranda şöyle bir mesaj belirecek.

            Runtime-Error ‘11′:
            Hata Yeri         :  <Proje ismi>.<form ismi>.btnHata_Click
            Hata satiri         :  0
            Hata Icerigi       : Division by zero
            Lutfen falan kisi ile kontak kurunuz.

Bu hata kullanıcı tarafından size bildirildikten sonra hatanın hangi formda ve hangi fonksiyonda olduğunu bileceksiniz. Eğer butonun fonksiyonunu aşağıdaki gibi değiştirirsek hatanın olduğu satırıda bilmiş olacağız.

Private Sub btnHata_Click()

On Error GoTo Exit_proc  ’ Hata durumunda Exit_proc kismina gidecek.

Const METHOD_NAME = CLASS_NAME & “.btnHata_Click” ‘Bu fonksiyonun ismini veriyoruz.

‘Bu durumda elimizde formun ismi ve ilgili fonksiyonun ismi olmus oluyor.

‘**************************

‘Buradan sonra yapmak istediginiz isin kodlari gelecek

10:

20:   ren = 10 / 0 ‘hata olabilecek satirlari markaliyoruz

‘Onceden markalamaya gerek yok fakat hata durumunda markalayarak hatayi arayabiliriz.

30:

‘**************************

Exit_proc:

    Call EndProcedure(METHOD_NAME)

End Sub

Hata mesajı şu şekilde ekranda belirecektir.

            Runtime-Error ‘11′:
            Hata Yeri         :  <Proje ismi>.<form ismi>.btnHata_Click
            Hata satiri         :  10
            Hata Icerigi       : Division by zero
            Lutfen falan kisi ile kontak kurunuz.

Bu mesajdan sonra yazılım uzmanlarınızdan hangisi sıfıra bölme işlemi için o kodu oraya yazdıysa tek ayak üstünde bir saat bekleme cezası almalıdır.

EndProcedure fonksiyonu içinde istersek hatayı veritabanında bir tabloya bile kaydedebiliriz. Bu tamamı ile size kalmış. Eğer tam bir hata kontrolü istiyorsanız MS SQL Server üzerinde hazırlayacağınız bir “stored procedure” ve değişimlerde e-posta atma özelliğini kullanarak hatanın size direk ulaşmasını da sağlayabilirsiniz.

Trackback URI | Comments RSS

Yorum Yaz - Leave a Reply