Fehler im Code

Angelika_25

Mitglied
Hallo Leute, mein Programm läuft soweit fehlerfrei, bloß wenn ich es schließe kommt ein Fehler. Mein Code:
Code:
 Private Sub cb_Name_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cb_Name.TextChanged

        Dim cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data " & _
            "Source=C:\Users\xx\Desktop\Urlaubsantrag22\Urlaubsantrag\Urlaubsantrag.mdb")
        cn.Open()
        Dim ergebnis As String
        With cn.CreateCommand()



            .CommandText = "Select UrlaubstageJahr2007 FROM Urlaubstage WHERE " & _
                              "Mitarbeiter='" & cb_Name.Text & "'"
            ergebnis = .ExecuteScalar.ToString
            lbl_Urlaubstage.Text = ergebnis

            .CommandText = "Select UrlaubstageJahr2008 FROM Urlaubstage WHERE " & _
                             "Mitarbeiter='" & cb_Name.Text & "'"
            ergebnis = .ExecuteScalar.ToString
            lbl_Urlaubstage2.Text = ergebnis




            .Dispose()
        End With
        cn.Close()
    End Sub
Bei dieser Zeile kommt ein Fehler wenn ich das Programm komplett schließen will:
Code:
ergebnis = .ExecuteScalar.ToString

Fehlermeldung:
Code:
System.NullReferenceException
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt



Was ist das für ein Fehler und wie bekomme ich den weg?

Liebe Grüße
 
Hallo

Beim Schließen der Form wird das Text_Change Ereignis ausgelöst.
Dann kann wahrscheinlich nicht mehr auf cb_Name.Text zugegriffen werden, deshalb musst Du eine Variable setzen die beim Schließen der Form auf True gesetzt wird.
Im Text_Change Ereignis fragst Du Diese ab.

Beispiel:
Code:
Public Class Form1
    Private fClose As Boolean

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        fClose = True
    End Sub

    Private Sub cb_Name_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cb_Name.TextChanged

        If fClose Then Exit Sub

        Dim cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data " & _
            "Source=C:\Users\xx\Desktop\Urlaubsantrag22\Urlaubsantrag\Urlaubsantrag.mdb")
        cn.Open()

        Dim ergebnis As String

        With cn.CreateCommand()
            .CommandText = "Select UrlaubstageJahr2007 FROM Urlaubstage WHERE " & _
                              "Mitarbeiter='" & cb_Name.Text & "'"
            ergebnis = .ExecuteScalar.ToString
            lbl_Urlaubstage.Text = ergebnis

            .CommandText = "Select UrlaubstageJahr2008 FROM Urlaubstage WHERE " & _
                             "Mitarbeiter='" & cb_Name.Text & "'"
            ergebnis = .ExecuteScalar.ToString
            lbl_Urlaubstage2.Text = ergebnis
            .Dispose()
        End With
        cn.Close()
    End Sub
End Class
 
Wertest du das Closing oder Closed Event der Form aus und machst irgendwas mit der Textbox da?
Denn ohne Grund sollte er das Event ja nicht auslösen, deshalb prüfe lieber diese stellen nochmals ab.

Und prüfen ob ein Control noch verfügbar ist könntest du auch über die Eigenschaft IsDisposed des Controls
 
Ich hab lediglich einen Button mit Application.Exit(), mehr nicht, aber ich hab das Programm jetzt sehr oft getestet und es läuft einwandfrei....

Liebe Grüße
 

Neue Beiträge

Zurück