Visual Basic Hata yakalama

Visual Basic programlama Dilinde Hata Yakalama

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 : .

.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 : .

.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.

 



İlk yorumu siz yazın !..

  • Yorumunuz en az 30 karakter olmalıdır. (0)
İlginizi çekebilir...
Sitede Ara
  • Çiklet (Prenses) Balıklarındaki Ürkeklik ve Korkaklık
    Ben çok uzun süre sp, bp ile frenatus besledim hiç bir sorun yaşamadım. Çok uyumlulardı. Renk katıyor a...
  • Genel İşletme 1. Dönem Vize Soruları
    soru 3 yanlıs bence"...
  • CS 1.5 ve CS 1.6 İçin Sağlam Bir CFG (cengaver.cfg)
    bozuk bu cfg kullanmayın derim ...
  • Türkiye'de Hangi Burçtan Kaç Kişi Var?
    Akrep burcu olan var mı ben akrep burcu olarak hiç akrep burcu bulamıyorum....
  • Papağan Bakımı Banyo Yaptırma Yıkama
    pakistan pağına sirkeli su ile yıkanırmı...
  • Müzik Notaları İçin A4 Kağıda Porte Çıktısı Alma
    SEN NE KRAL ADAMSIN!! VALLA ÇOK SAĞOL...
  • GTA 5 Steam’da indirime girdi - En Ucuz GTA 5 Fiyatı
    ne yazim ilk yorum milk flen dediler geldim...