Hallo,
bin neu hier und muss euch gleich mit einem Problem belästigen.
Ich habe ein DataGridView welches per MySQL-Abfrage über eine DataTable gefüllt wird. In diesem DataGridView sollen die Werte von 2 Spalten aktualisiert und über einen MySqlCommandBuilder in die Datenbank zurückgespeichert werden. Das Problem ist, dass wenn ich mehrere Spalten habe bei allen bis auf eine die Werte nicht übernommen werden. Anbei mal das Coding soweit:
[highlight=vbnet]Dim conn As MySqlConnection
Dim da_Adapter As MySqlDataAdapter
Dim da_Reader As MySqlDataReader
Dim ds_Zeitungskunden As DataSet ' DataSet
Dim dt_Zeitungskunden As DataTable ' DataTable (Datentabelle)
Dim dv_Zeitungskunden As DataView
'################################################# ##############################################
'# B r i e f t e r m i n e Z e i t u n g s k u n d e n a u s g e b e n #
'################################################# ##############################################
Sub BrieftermineFürHeuteAusgebenZK()
' @@@@@ Zugangsdaten werden aus der Datei DBaccess.ini gelesen @@@@@
Dim INI As New INIDatei
INI.Pfad = My.Application.Info.DirectoryPath & "\DBaccess.ini"
Dim server As String = (INI.WertLesen("Datenbankeinstellungen", "server").ToString)
Dim user As String = (INI.WertLesen("Datenbankeinstellungen", "user").ToString)
Dim password As String = (INI.WertLesen("Datenbankeinstellungen", "password").ToString)
Dim database As String = (INI.WertLesen("Datenbankeinstellungen", "database").ToString)
conn = New MySqlConnection(("server=" & server & ";user=" & user & ";password=" & password & ";database=" & database).ToString)
Try
Try
da_Adapter = New MySqlDataAdapter("", conn)
SQL_Schreiben.SchreibeTempZKDaten_Datum()
' @@@@@ Ausführen der Select-Anweisung @@@@@
da_Adapter.SelectCommand.CommandText = ("SELECT DISTINCT kid AS 'Kundennummer', zeitung AS 'Zeitung', datum AS 'Datum der Eintragung', telefon_chiffre AS 'Telefon/Chiffre'," & _
" anrede AS 'Anrede', vorname AS 'Vorname', nachname AS 'Nachname', adresse AS 'Adresse', plz AS 'PLZ', ort AS 'Ort'," & _
" email AS 'E-Mail', rubrik AS 'Rubrik', letztesanschreibendatum AS 'letztes Anschreiben am:', naechstesanschreibennach AS" & _
" 'Naechstes Anschreiben nach:', ignoriert AS 'Ignoriert (0 = nein, 1 = ja)', bemerkungen AS 'Bemerkung', " & _
"anzahlanschreibungen AS 'Anzahl d. Anschreibungen', chiffre_flag, zeitung_temp from zeitungskunde_temp")
da_Adapter.SelectCommand.CommandType = CommandType.Text
'Kontrolle des SQL-Strings
'MessageBox.Show(Cmd.CommandText)
' *** DataSet und DataTable-Instanz bilden
ds_Zeitungskunden = New DataSet() ' DataSet-Instanz bilden
dt_Zeitungskunden = New DataTable() ' DataTable-Instanz bilden
ds_Zeitungskunden.Tables.Add(dt_Zeitungskunden)
' *** Primärschlüssel-Informationen beim Fill mit übernehmen
da_Adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
da_Adapter.Fill(dt_Zeitungskunden) ' DataTable füllen
' *** DataView-Instanz für DataTable bilden
dv_Zeitungskunden = New DataView(dt_Zeitungskunden)
'dv.RowFilter = "anzahlanschreibungen = 1"
dv_Zeitungskunden.Sort = "Kundennummer ASC"
Dim rowcount = dt_Zeitungskunden.Rows.Count
If rowcount = 0 Then
MessageBox.Show("Keine Datensätze gefunden")
ElseIf rowcount = 1 Then
Kundendaten_Ausgeben.Show()
' @@@@@ Fensterüberschrift wird geändert @@@@@
Kundendaten_Ausgeben.Text = ("Kundenauswahl: " & rowcount & " Datensatz gefunden")
' @@@@@ Gefundene Datensätze werden in das DataGrid im Fenster "Brieftermine für Heute ausgeben" geschrieben @@@@@
Kundendaten_Ausgeben.CreateZKControls()
Kundendaten_Ausgeben.dgv_ZK.DataSource = dv_Zeitungskunden
Kundendaten_Ausgeben.dgv_ZK.Refresh()
Kundendaten_Ausgeben.dgv_ZK.Show()
Else
Kundendaten_Ausgeben.Show()
' @@@@@ Fensterüberschrift wird geändert @@@@@
Kundendaten_Ausgeben.Text = ("Kundenauswahl: " & rowcount & " Datensätze gefunden")
' @@@@@ Gefundene Datensätze werden in das DataGrid im Fenster "Brieftermine für Heute ausgeben" geschrieben @@@@@
Kundendaten_Ausgeben.CreateZKControls()
Kundendaten_Ausgeben.dgv_ZK.DataSource = dv_Zeitungskunden
Kundendaten_Ausgeben.dgv_ZK.Refresh()
Kundendaten_Ausgeben.dgv_ZK.Show()
End If
' @@@@@ Ausgabe falls Fehler beim Lesen aus der Datenbank auftreten @@@@@
Catch dbreaderror As MySqlException
MessageBox.Show("Fehler beim Lesen aus der Datenbank: " & dbreaderror.Message)
End Try
' @@@@@ Ausgabe falls Fehler beim Verbinden mit der Datenbank auftreten @@@@@
Catch dbconnerror As MySqlException
MessageBox.Show("Fehler beim Verbinden mit der Datenbank: " & dbconnerror.Message)
Finally
' @@@@@ Verbindung zur Datenbank trennen @@@@@
If conn.State <> ConnectionState.Closed Then conn.Close()
End Try
End Sub
Sub ÄndereAnzahlAnschreibungenZK()
Try
Hauptprogramm.tsslStatus.ForeColor = Color.Red
Hauptprogramm.tsslStatus.Text = "Datensatz wird geändert...!"
Kundendaten_Ausgeben.dgv_ZK.BeginEdit(True)
For i = 0 To Kundendaten_Ausgeben.dgv_ZK.Rows.Count - 1 ' oder -2, falls AllowUserToAddRows = True
Kundendaten_Ausgeben.dgv_ZK.Rows(i).Cells("Anzahl d. Anschreibungen").Value += 1
Kundendaten_Ausgeben.dgv_ZK.Rows(i).Cells("letztes Anschreiben am:").Value = Today
Next
Kundendaten_Ausgeben.dgv_ZK.EndEdit()
'dt_Zeitungskunden.AcceptChanges()
For Each Zeile As DataRow In dt_Zeitungskunden.Rows
MessageBox.Show(Zeile.RowState.ToString)
'If DataRowState.Modified = True Then
' Kundendaten_Ausgeben.dgv_ZK.EndEdit()
' 'DataRow.SetModified()
' 'ElseIf DataRowState.Modified = True Then
'End If
Next
Try
Dim cmdb As MySqlCommandBuilder = New MySqlCommandBuilder(da_Adapter)
da_Adapter.Update(dt_Zeitungskunden)
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
Catch dberror As MySqlException
MessageBox.Show("Es ist folgender Fehler aufgetreten: " & dberror.Message)
End Try
Hauptprogramm.Timer1.Stop()
End Sub[/highlight]
Ich habe schon in einigen Foren geschrieben aber leider keine wirklich zufriedenstellende Antwort erhalten. Vielleicht habe ich ja hier mehr Glück![Großes Lächeln](https://entwickler-forum.de/core/images/smilies/biggrin.png)
Besten Dank im Voraus!
bin neu hier und muss euch gleich mit einem Problem belästigen.
Ich habe ein DataGridView welches per MySQL-Abfrage über eine DataTable gefüllt wird. In diesem DataGridView sollen die Werte von 2 Spalten aktualisiert und über einen MySqlCommandBuilder in die Datenbank zurückgespeichert werden. Das Problem ist, dass wenn ich mehrere Spalten habe bei allen bis auf eine die Werte nicht übernommen werden. Anbei mal das Coding soweit:
[highlight=vbnet]Dim conn As MySqlConnection
Dim da_Adapter As MySqlDataAdapter
Dim da_Reader As MySqlDataReader
Dim ds_Zeitungskunden As DataSet ' DataSet
Dim dt_Zeitungskunden As DataTable ' DataTable (Datentabelle)
Dim dv_Zeitungskunden As DataView
'################################################# ##############################################
'# B r i e f t e r m i n e Z e i t u n g s k u n d e n a u s g e b e n #
'################################################# ##############################################
Sub BrieftermineFürHeuteAusgebenZK()
' @@@@@ Zugangsdaten werden aus der Datei DBaccess.ini gelesen @@@@@
Dim INI As New INIDatei
INI.Pfad = My.Application.Info.DirectoryPath & "\DBaccess.ini"
Dim server As String = (INI.WertLesen("Datenbankeinstellungen", "server").ToString)
Dim user As String = (INI.WertLesen("Datenbankeinstellungen", "user").ToString)
Dim password As String = (INI.WertLesen("Datenbankeinstellungen", "password").ToString)
Dim database As String = (INI.WertLesen("Datenbankeinstellungen", "database").ToString)
conn = New MySqlConnection(("server=" & server & ";user=" & user & ";password=" & password & ";database=" & database).ToString)
Try
Try
da_Adapter = New MySqlDataAdapter("", conn)
SQL_Schreiben.SchreibeTempZKDaten_Datum()
' @@@@@ Ausführen der Select-Anweisung @@@@@
da_Adapter.SelectCommand.CommandText = ("SELECT DISTINCT kid AS 'Kundennummer', zeitung AS 'Zeitung', datum AS 'Datum der Eintragung', telefon_chiffre AS 'Telefon/Chiffre'," & _
" anrede AS 'Anrede', vorname AS 'Vorname', nachname AS 'Nachname', adresse AS 'Adresse', plz AS 'PLZ', ort AS 'Ort'," & _
" email AS 'E-Mail', rubrik AS 'Rubrik', letztesanschreibendatum AS 'letztes Anschreiben am:', naechstesanschreibennach AS" & _
" 'Naechstes Anschreiben nach:', ignoriert AS 'Ignoriert (0 = nein, 1 = ja)', bemerkungen AS 'Bemerkung', " & _
"anzahlanschreibungen AS 'Anzahl d. Anschreibungen', chiffre_flag, zeitung_temp from zeitungskunde_temp")
da_Adapter.SelectCommand.CommandType = CommandType.Text
'Kontrolle des SQL-Strings
'MessageBox.Show(Cmd.CommandText)
' *** DataSet und DataTable-Instanz bilden
ds_Zeitungskunden = New DataSet() ' DataSet-Instanz bilden
dt_Zeitungskunden = New DataTable() ' DataTable-Instanz bilden
ds_Zeitungskunden.Tables.Add(dt_Zeitungskunden)
' *** Primärschlüssel-Informationen beim Fill mit übernehmen
da_Adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
da_Adapter.Fill(dt_Zeitungskunden) ' DataTable füllen
' *** DataView-Instanz für DataTable bilden
dv_Zeitungskunden = New DataView(dt_Zeitungskunden)
'dv.RowFilter = "anzahlanschreibungen = 1"
dv_Zeitungskunden.Sort = "Kundennummer ASC"
Dim rowcount = dt_Zeitungskunden.Rows.Count
If rowcount = 0 Then
MessageBox.Show("Keine Datensätze gefunden")
ElseIf rowcount = 1 Then
Kundendaten_Ausgeben.Show()
' @@@@@ Fensterüberschrift wird geändert @@@@@
Kundendaten_Ausgeben.Text = ("Kundenauswahl: " & rowcount & " Datensatz gefunden")
' @@@@@ Gefundene Datensätze werden in das DataGrid im Fenster "Brieftermine für Heute ausgeben" geschrieben @@@@@
Kundendaten_Ausgeben.CreateZKControls()
Kundendaten_Ausgeben.dgv_ZK.DataSource = dv_Zeitungskunden
Kundendaten_Ausgeben.dgv_ZK.Refresh()
Kundendaten_Ausgeben.dgv_ZK.Show()
Else
Kundendaten_Ausgeben.Show()
' @@@@@ Fensterüberschrift wird geändert @@@@@
Kundendaten_Ausgeben.Text = ("Kundenauswahl: " & rowcount & " Datensätze gefunden")
' @@@@@ Gefundene Datensätze werden in das DataGrid im Fenster "Brieftermine für Heute ausgeben" geschrieben @@@@@
Kundendaten_Ausgeben.CreateZKControls()
Kundendaten_Ausgeben.dgv_ZK.DataSource = dv_Zeitungskunden
Kundendaten_Ausgeben.dgv_ZK.Refresh()
Kundendaten_Ausgeben.dgv_ZK.Show()
End If
' @@@@@ Ausgabe falls Fehler beim Lesen aus der Datenbank auftreten @@@@@
Catch dbreaderror As MySqlException
MessageBox.Show("Fehler beim Lesen aus der Datenbank: " & dbreaderror.Message)
End Try
' @@@@@ Ausgabe falls Fehler beim Verbinden mit der Datenbank auftreten @@@@@
Catch dbconnerror As MySqlException
MessageBox.Show("Fehler beim Verbinden mit der Datenbank: " & dbconnerror.Message)
Finally
' @@@@@ Verbindung zur Datenbank trennen @@@@@
If conn.State <> ConnectionState.Closed Then conn.Close()
End Try
End Sub
Sub ÄndereAnzahlAnschreibungenZK()
Try
Hauptprogramm.tsslStatus.ForeColor = Color.Red
Hauptprogramm.tsslStatus.Text = "Datensatz wird geändert...!"
Kundendaten_Ausgeben.dgv_ZK.BeginEdit(True)
For i = 0 To Kundendaten_Ausgeben.dgv_ZK.Rows.Count - 1 ' oder -2, falls AllowUserToAddRows = True
Kundendaten_Ausgeben.dgv_ZK.Rows(i).Cells("Anzahl d. Anschreibungen").Value += 1
Kundendaten_Ausgeben.dgv_ZK.Rows(i).Cells("letztes Anschreiben am:").Value = Today
Next
Kundendaten_Ausgeben.dgv_ZK.EndEdit()
'dt_Zeitungskunden.AcceptChanges()
For Each Zeile As DataRow In dt_Zeitungskunden.Rows
MessageBox.Show(Zeile.RowState.ToString)
'If DataRowState.Modified = True Then
' Kundendaten_Ausgeben.dgv_ZK.EndEdit()
' 'DataRow.SetModified()
' 'ElseIf DataRowState.Modified = True Then
'End If
Next
Try
Dim cmdb As MySqlCommandBuilder = New MySqlCommandBuilder(da_Adapter)
da_Adapter.Update(dt_Zeitungskunden)
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
Catch dberror As MySqlException
MessageBox.Show("Es ist folgender Fehler aufgetreten: " & dberror.Message)
End Try
Hauptprogramm.Timer1.Stop()
End Sub[/highlight]
Ich habe schon in einigen Foren geschrieben aber leider keine wirklich zufriedenstellende Antwort erhalten. Vielleicht habe ich ja hier mehr Glück
![Großes Lächeln](https://entwickler-forum.de/core/images/smilies/biggrin.png)
Besten Dank im Voraus!
Comment