manuelle Datenbindung meldet Fehler beim Speichern

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von HerrFrie.

    manuelle Datenbindung meldet Fehler beim Speichern

    Hallo Leute,

    ich versuche gerade eine Mitgliederverwaltung zu erstellen. Zur Seite steht mir das Buch Datenbankprogrammierung mit Visual Basic 2008. Um dabei was zu lernen, verzichte ich auf die Generatoren, die einem ja eine Menge Arbeit abnehmen können.

    Ich habe also eine Datenbank "Mitgliederliste.mdb", die ich in eine DataTable einlese und verschiedene Textboxen und ein Datagridview anbinde. Die Anzeige und das Auswählen klappen auch wunderbar. Auch das Löschen, Ändern und Hinzufügen klappt. Um diese Änderungen aber zu sichern, muß der "speichern" Button gedrückt werden.

    Das ist die Fehlermeldung nach dem Hinzufügen eines Datensatzes und anschließendem Speichern :





    Das ist die Fehlermeldung nach dem Ändern oder Löschen eines Datensatzes mit anschließendem Speichern :



    Das ganze Skript ist allerdings eine Beispieldatei aus dem Buch, welches auf dieNordwind.mdb zugreift. Hier kann ich auch nach dem Hinzufügen speichern, ändern und löschen ohne das eine Fehlermeldung kommt.

    Hier wäre mal das ganze Skript, ich hoffe es kann mir jemand helfen :

    VB.NET-Quellcode

    1. Imports System.Data.OleDbPublic Class Form1
    2. Private da As OleDbDataAdapter = Nothing
    3. Private dt As DataTable = Nothing
    4. ' Die BindingSource verbindet die Anzeige-Controls mit der DataTable. Private bs As New BindingSource()
    5. Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
    6. Dim connStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Mitgliederliste.mdb"Dim conn As New OleDbConnection(connStr)
    7. Dim selStr As String = "SELECT * FROM Mitglieder"da = New OleDbDataAdapter(selStr, conn)
    8. da.MissingSchemaAction = MissingSchemaAction.AddWithKeyDim cb As New OleDbCommandBuilder(da)
    9. ' Ausführen der SQL-Abfrage (Anlegen und Füllen der Tabelle »Personal«): dt = New DataTable("Mitglieder")
    10. conn.Open()
    11. da.Fill(dt)
    12. conn.Close()
    13. ' Zuweisen der BindingSource:
    14. bs.DataSource = dtMe.DataGridView1.DataSource = bs
    15. ' Anbinden der Eingabemaske an die DataTable:Label1.DataBindings.Add("Text", bs, "ID")
    16. TextBox1.DataBindings.Add("Text", bs, "Name")TextBox2.DataBindings.Add("Text", bs, "Vorname")
    17. TextBox4.DataBindings.Add("Text", bs, "Bank")
    18. ' Datumsformatierung:Dim b1 As New Binding("Text", bs, "Geburts datum")
    19. AddHandler b1.Format, New ConvertEventHandler(AddressOf Me.DateToDateString)AddHandler b1.Parse, New ConvertEventHandler(AddressOf Me.DateStringToDate)
    20. TextBox3.DataBindings.Add(b1)
    21. ' Währungsformatierung:Dim b2 As New Binding("Text", bs, "Beitrag")
    22. AddHandler b2.Format, New ConvertEventHandler(AddressOf Me.DecToCurrString)AddHandler b2.Parse, New ConvertEventHandler(AddressOf Me.CurrStringToDec)
    23. TextBox5.DataBindings.Add(b2)MyBase.OnLoad(e)
    24. End Sub
    25. ' Geburtsdatum:
    26. Private Sub DateToDateString(ByVal sender As Object, ByVal e As ConvertEventArgs) 'DataTable => Anzeige
    27. Trye.Value = Convert.ToDateTime(e.Value).ToString("dd.MM.yyyy")
    28. Catch
    29. End Try
    30. End Sub
    31. Private Sub DateStringToDate(ByVal sender As Object, ByVal e As ConvertEventArgs) ' Anzeige => DataTable
    32. e.Value = Convert.ToDateTime(e.Value)
    33. End Sub
    34. ' Formatierung des Gehalts als Währung:
    35. Private Sub DecToCurrString(ByVal sender As Object, ByVal e As ConvertEventArgs) ' DataTable => Anzeige
    36. Trye.Value = Convert.ToDecimal(e.Value).ToString("c")
    37. Catch
    38. End Try
    39. End Sub
    40. Private Sub CurrStringToDec(ByVal sender As Object, ByVal e As ConvertEventArgs) ' Anzeige => Datenquelle
    41. e.Value = Convert.ToDecimal(e.Value)
    42. End Sub
    43. ' Bewegungsmethoden:Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    44. bs.MoveFirst()
    45. End SubPrivate Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    46. bs.MovePrevious()
    47. End SubPrivate Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    48. bs.MoveNext()
    49. End SubPrivate Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    50. bs.MoveLast()
    51. End Sub
    52. ' NeuPrivate Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    53. bs.AddNew()
    54. End Sub
    55. ' LöschenPrivate Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
    56. bs.RemoveCurrent()
    57. End Sub
    58. ' SpeichernPrivate Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
    59. bs.EndEdit()
    60. da.Update(dt)
    61. End Sub
    62. ' AbbrechenPrivate Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
    63. bs.CancelEdit()End Sub
    64. End Class

    Leider kann ich nicht verstehen, warum nach Abänderung der "Nordwind.mdb" nach "Mitgliederliste.mdb" und deren Tabellennamen und Überschriften die Probleme auftreten.

    Please Help ! ?(

    ..ein kleines Stück weiter

    Das die Fehlermeldungen kommen liegt scheinbar daran, dass in der Liste Felder existieren, in denen nichts drin steht.

    Zum Testen habe ich mal alle Spalten gelöscht, in denen leere Felder waren. Dann funktioniert es.

    Somit wäre meine nächste Frage, ob ich das einstellen kann, dass er trotz leerer Felder die Update Funktion ausführt.
    Alle "Text" Felder stehen bei "leere Zeichenfolge" auf "Ja" und bei "Eingabe erforderlich" auf "Nein".

    Bei den "Datum/Zeit" und "Währung" Feldern gibt es nur "Eingabe erforderlich" und das steht auch überall auf "Nein".
    (Nachgeschaut in Access)



    Weiß denn niemand Hilfe ?
    Ich kenn mich jetzt mit Access nicht so aus. Bei MySQL zb ist das "NOT NULL" bzw "NULL". Ich denke mal das ist das gleich wie "Eingabe erforderlich". Aber dann sollte es ja gehen wenn du es auf Nein stehen hast. Wenn es aber dennoch nicht geht, mach eine Abfrage ob die Felder leer sind oder nicht. Wenn nicht trägst du das ein was drinsteht, ansonst z.B. DBNull.Value

    Bin ich froh wenn die VB-Tags wieder gehen :D
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia