Announcement

Collapse
No announcement yet.

Update der MySQL-Datenbank über DGV funktioniert nur halbwegs

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Update der MySQL-Datenbank über DGV funktioniert nur halbwegs

    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

    Besten Dank im Voraus!

  • #2
    Wow hier ist ja was los. Inzwischen weiss ich wie es geht.

    Comment

    Working...
    X