Anbindung von Textboxen an Datenbank
Hallo
Ich stehe vor einem, wahrscheinlich sehr schnell zu lösendem, Problem mit ein paar TextBoxen, einer Combobox und dem CommandBuilder.
Mein Code schaut zur Zeit so aus;
Ich bin mir nicht sicher, ob es so richtig ist, aber das Binding an die Textfelder und die Combobox funktioniert. Wenn ich den Datensatz in der Combobox wechsle dann werden die Änderungen auch wie gewünscht übernommen, allerdings wird nichts gespeichert wenn ich in dem Datensatz bleibe und das Speichern über einen Button mit dem Dataadapter.update ausführe.
Ich probiere seit fast 30 Stunden jetzt immer wieder hin und her, komme aber nicht weiter leider. Ich hoffe, ihr könnt mir helfen.
Freundliche Grüße!
Ich stehe vor einem, wahrscheinlich sehr schnell zu lösendem, Problem mit ein paar TextBoxen, einer Combobox und dem CommandBuilder.
Mein Code schaut zur Zeit so aus;
Option Explicit On
'Systemobjekte
Imports System.Data
'MS Access
Imports System.Data.OleDb
Public Class frm_Einstellungen
Private Private_tbl_EMailKonten_BindingSource As New BindingSource()
Private Private_tbl_EMailKonten_Adapter As New OleDbDataAdapter()
Private Private_tbl_EMailKonten_CommandBuilder As New OleDbCommandBuilder()
Private Private_tbl_DMC_data_CurrentID As Long
Private Private_ArrayDBFelder() As Control = Nothing
Private Sub frm_Einstellungen_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
frm_Start.Hide()
'Ersten Datensatz in Tabelle schreiben
If DBExcecute("SELECT COUNT(*) AS RecordCounts FROM " & Const_tbl_EMailKonten, "RecordCounts") = 0 Then
Call DBExcecute("INSERT INTO " & Const_tbl_EMailKonten & " (EMailKonto) VALUES (" & ConstSQLEscape & Nothing & ConstSQLEscape & ")")
End If
'Datenbank anbinden
Dim TV_SQLString As String = "SELECT * FROM " & Const_tbl_EMailKonten
Private_tbl_EMailKonten_Adapter = New OleDbDataAdapter(TV_SQLString, Public_MSAccConnectString)
Dim commandBuilder As New OleDbCommandBuilder(Private_tbl_EMailKonten_Adapter)
'Databinding
Private_tbl_EMailKonten_BindingSource.DataSource = CreateDataTable("SELECT * FROM " & Const_tbl_EMailKonten, "DS_EMailKonten")
With Private_tbl_EMailKonten_BindingSource
cb_EMailKonto.DataSource = .DataSource
cb_EMailKonto.DisplayMember = "EMailKonto"
cb_EMailKonto.ValueMember = "MyID"
Private_tbl_DMC_data_CurrentID = .DataSource.Rows(0)("MyID")
tb_Benutzername.DataBindings.Add("Text", .DataSource, "Benutzername")
tb_MailDomain.DataBindings.Add("Text", .DataSource, "MailDomain")
tb_Passwort.DataBindings.Add("Text", .DataSource, "Passwort")
tb_POPServer.DataBindings.Add("Text", .DataSource, "POPServer")
tb_POPPort.DataBindings.Add("Text", .DataSource, "POPPort")
tb_SMTPServer.DataBindings.Add("Text", .DataSource, "SMTPServer")
tb_SMTPPort.DataBindings.Add("Text", .DataSource, "SMTPPort")
End With
'Passwort Felder maskieren
tb_Passwort.UseSystemPasswordChar = True
'Felder einfärben
Private_ArrayDBFelder = {tb_Benutzername, tb_MailDomain, _
tb_Passwort, tb_Benutzername, _
tb_POPServer, tb_POPPort, _
tb_SMTPServer, tb_SMTPPort}
For Each CurrentFeld In Private_ArrayDBFelder
If TypeOf CurrentFeld Is TextBox Then
If Not CurrentFeld.Text = Nothing Then 'Mit Inhalt
CurrentFeld.BackColor = Color.LightGreen
Else 'Ohne Inhalt
CurrentFeld.BackColor = Color.LightSalmon
End If
End If
Next CurrentFeld
Exit Sub
Catch ex As Exception
MsgBox(ex.Message, vbOKOnly + vbCritical)
End Try
End Sub
End Class
Ich bin mir nicht sicher, ob es so richtig ist, aber das Binding an die Textfelder und die Combobox funktioniert. Wenn ich den Datensatz in der Combobox wechsle dann werden die Änderungen auch wie gewünscht übernommen, allerdings wird nichts gespeichert wenn ich in dem Datensatz bleibe und das Speichern über einen Button mit dem Dataadapter.update ausführe.
Private Sub btn_Speichern_Click(sender As Object, e As EventArgs) Handles btn_Speichern.Click
Dim commandBuilder = New OleDbCommandBuilder(Private_tbl_EMailKonten_Adapter)
Private_tbl_EMailKonten_Adapter.Update(Private_tbl_EMailKonten_DataSet, "DS_EMailKonten") 'Datenherkunft aus DataSet
Private_tbl_EMailKonten_Adapter.Update(CType(Private_tbl_EMailKonten_BindingSource.DataSource, DataTable)) 'Datenherkunft aus BindingSource
MsgBox(commandBuilder.GetUpdateCommand.CommandText)
End Sub
Der Commandbuilder gibt mir als Updatetext nur ? als Wert für die Felder zurück.
Ich probiere seit fast 30 Stunden jetzt immer wieder hin und her, komme aber nicht weiter leider. Ich hoffe, ihr könnt mir helfen.
Freundliche Grüße!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 242047
Url: https://administrator.de/contentid/242047
Ausgedruckt am: 26.11.2024 um 07:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo ForgottenRealm,
du benötigst noch die eigentliche Update-Routine für den OleDbDataAdapter, sonst weiß dieser ja nicht wie er die Werte in der DB updaten soll. Diese kannst du mit einem OleDbCommandBuilder automatisch generieren lassen:
Beispiel:
Danach kannst du mit der Update() Methode des DataAdapter den Datensatz in der DB aktualisieren.
Noch ein Hinweis: Du benötigst für jeden Vorgang den du in der Datenbank machen möchtest (Update,Insert,Delete) jeweils solch eine Routine für den DataAdapter. Diese kannst du ebenfalls vom OleDbCommandBuilder automatisch erstellen lassen, siehe dazu die oben verlinkte Referenzseite.
Grüße Uwe
du benötigst noch die eigentliche Update-Routine für den OleDbDataAdapter, sonst weiß dieser ja nicht wie er die Werte in der DB updaten soll. Diese kannst du mit einem OleDbCommandBuilder automatisch generieren lassen:
Beispiel:
Dim da As New OleDb.OleDbDataAdapter("SQL String")
Dim builder As OleDb.OleDbCommandBuilder = New OleDb.OleDbCommandBuilder(da)
da.UpdateCommand = builder.GetUpdateCommand()
Noch ein Hinweis: Du benötigst für jeden Vorgang den du in der Datenbank machen möchtest (Update,Insert,Delete) jeweils solch eine Routine für den DataAdapter. Diese kannst du ebenfalls vom OleDbCommandBuilder automatisch erstellen lassen, siehe dazu die oben verlinkte Referenzseite.
Grüße Uwe
also ein bisschen mitdenken erwarte ich hier eigentlich schon, hatte dir ja schon die Vorlage geliefert.
ab Zeile 39
und Zeile 73 wech ...
Grüße Uwe
ab Zeile 39
Private_tbl_EMailKonten_Adapter = New OleDbDataAdapter(TV_SQLString, Public_MSAccConnectString)
Private_tbl_EMailKonten_Adapter.Fill(Private_tbl_EMailKonten_DataSet, "DS_EMailKonten")
Dim builder As OleDb.OleDbCommandBuilder = New OleDb.OleDbCommandBuilder(Private_tbl_EMailKonten_Adapter)
Private_tbl_EMailKonten_Adapter.UpdateCommand = builder.GetUpdateCommand()
Grüße Uwe
Ach stimmt da fehlt in diesem Fall vor dem Update noch ein EndEdit() der BindingSource und danach noch ein AcceptChanges() des DataSets.
http://stackoverflow.com/questions/260000/updating-a-database-from-data ...
http://stackoverflow.com/questions/260000/updating-a-database-from-data ...