Textboxinhalt wird nicht gespeichert

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Faulenzer89.

    Textboxinhalt wird nicht gespeichert

    Hallo zusammen

    Ich habe eine Access-Datenbank. Mit diesem Code lasse ich ein Textfeld in meinem Formular füllen.

    VB.NET-Quellcode

    1. Imports System.Data.OleDbPublic Class Form1
    2. Dim PROVIDER As String = "Provider=Microsoft.Jet.OleDb.4.0;Data Source="
    3. Dim DBPFAD As String = "C:\xxx\"
    4. Dim DBNAME As String = "Datenbank.mdb"
    5. Dim Conn As OleDbConnection ' Verbindungszeichenfolge
    6. Dim da As OleDbDataAdapter ' DatenAdapter
    7. Dim ds_Namen As DataSet ' DataSet
    8. Dim dt_Namen As DataTable ' DataTable (Datentabelle)
    9. Dim dv As DataView
    10. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    11. Conn.ConnectionString = String.Concat(PROVIDER, DBPFAD, DBNAME)
    12. ds_Namen = New DataSet() ' DataSet-Instanz bilden
    13. dt_Namen = New DataTable("Kunden") ' DataTable-Instanz bilden
    14. ds_Namen.Tables.Add(dt_Namen) ' DataTable dem DataSet hinzufgen
    15. da.SelectCommand.CommandText = "SELECT * FROM Kunden"
    16. da.SelectCommand.CommandType = CommandType.Textda.Fill(dt_Namen) ' DataTable fllen
    17. 'Textbox füllen
    18. With Me.TextBox1.DataBindings.Add("Text", dt_Namen, "Vorname")
    19. End With
    20. End Sub


    Nun möchte ich aber auch die Änderungen speichern. Habs mit diesem Code probiert:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickConn = New OleDbConnection
    2. Conn.ConnectionString = String.Concat(PROVIDER, DBPFAD, DBNAME)
    3. Dim cmdb As OleDbCommandBuildercmdb = New OleDbCommandBuilder(da)
    4. da.Update(dt_Namen)
    5. MsgBox("gespeichert")
    6. End Sub

    Aber da passiert gar nichts. Warum?
    Was ist denn das? Kein Update-Command?

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickConn = New OleDbConnection Conn.ConnectionString = String.Concat(PROVIDER, DBPFAD, DBNAME)
    2. Dim cmdb As OleDbCommandBuildercmdb = New OleDbCommandBuilder(da)
    3. da.Update(dt_Namen)
    4. MsgBox("gespeichert")
    5. End Sub
    Also wenn du ein bissel ahnung von SQL hast, dann würd ich dir raten einfach direkte Befehle an die Datenbank zu generieren..geht relativ einfach:

    VB.NET-Quellcode

    1. Connection.open()
    2. Dim SQL-Befehl As New OleDb.OleDbCommand("UPDATE Tabellenname SET Feldname1 = 'Wert1', Feldname2 = 'Wert2' WHERE Feldname = 'Wert'", Connection)
    3. n = SQL-Befehl.ExecuteNonQuery
    4. Connection.Close()

    so in etwa...muss natürlich alles ien bissel angepasst werden...

    Faulenzer89 schrieb:

    Habe noch eine Frage. Wie kann ich dann die ganze Tabelle aktualisieren? Update * from Tabelle geht nicht.

    Wenn Du den Dataadapter nutzt, kümmert sich der Dataadapter darum, dass alle veränderten Zeilen gespeichert werden.

    Nein, Du hast keinen UpdateCommand in deinem Code. Den musst Du über dataadapte.updatecommand.text definieren.

    Ja, Du musst für jedes Feld, das geändert werden soll einen Set-Eintrag erstellen.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).