Hallo zusammen,
ich zerbreche mir schon eine Weile den Kopf über folgendes Problem. Ich habe eine kleine Windows-Forms Anwendung, über welche ich Einträge in einer MS-Access Datenbank erstellen, verändern und löschen möchte. Die INSERT INTO und DELETE-Anweisungen funktionieren problemlos - nur die UPDATE-Anweisung bereitet Kopfschmerzen. Ich kann den von mir geschriebenen Code ausführen, ohne das Fehler auftreten. Allerdings erfolgt keine Änderung des Datensatzes. Ich hoffe einer von euch kann mir an dieser Stelle helfen oder kann mich auf Ungereimtheiten in meinem Code hinweisen.
Viele Grüße
edit: hier noch ein Bild vom Aufbau meiner Access DB
ich zerbreche mir schon eine Weile den Kopf über folgendes Problem. Ich habe eine kleine Windows-Forms Anwendung, über welche ich Einträge in einer MS-Access Datenbank erstellen, verändern und löschen möchte. Die INSERT INTO und DELETE-Anweisungen funktionieren problemlos - nur die UPDATE-Anweisung bereitet Kopfschmerzen. Ich kann den von mir geschriebenen Code ausführen, ohne das Fehler auftreten. Allerdings erfolgt keine Änderung des Datensatzes. Ich hoffe einer von euch kann mir an dieser Stelle helfen oder kann mich auf Ungereimtheiten in meinem Code hinweisen.
Viele Grüße
edit: hier noch ein Bild vom Aufbau meiner Access DB
VB.NET-Quellcode
- Public Class frmAnzeige
- Dim cnnDatenbank As New OleDb.OleDbConnection
- 'hier steht eigentlich der volle Pfad
- Dim pfadDatenbank As String = "*****_datenbank\bestelllisteDB.accdb"
- Dim tabDatenbank As String = "listeBestellung"
- Private Sub frmAnzeige_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Me.datagridAnzeige.ReadOnly = True
- cnnDatenbank = New OleDb.OleDbConnection
- cnnDatenbank.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & pfadDatenbank
- refreshDatagrid()
- End Sub
- Public Sub refreshDatagrid()
- Dim sqlQry_cmd As String
- Call clsDatabase.datenbankOeffnen(cnnDatenbank)
- sqlQry_cmd = "SELECT ID, teileBeschreibung, teileHersteller, teileBestellnummer, teileAnzahl, teileStatus, datumEintrag, datumBestellung FROM " & tabDatenbank & " ORDER BY ID DESC"
- Dim cmdDatenbank As New OleDb.OleDbDataAdapter(sqlQry_cmd, cnnDatenbank)
- Dim dtTemporaer As New DataTable
- cmdDatenbank.Fill(dtTemporaer)
- Me.datagridAnzeige.DataSource = dtTemporaer
- cmdDatenbank.Dispose()
- Call clsDatabase.datenbankSchliessen(cnnDatenbank)
- End Sub
- Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
- frmBearbeiten.Show()
- clsDatabase.statusBearbeitung = False
- End Sub
- Private Sub datagridAnzeige_RowHeaderMouseDoubleClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles datagridAnzeige.RowHeaderMouseDoubleClick
- clsDatabase.statusBearbeitung = True
- clsDatabase.idBearbeitung = Me.datagridAnzeige.CurrentRow.Cells(0).Value
- frmBearbeiten.Show()
- End Sub
- End Class
- Public Class frmBearbeiten
- Dim cnnDatenbank As New OleDb.OleDbConnection
- 'hier steht eigentlich der volle Pfad
- Dim pfadDatenbank As String = "*****_datenbank\bestelllisteDB.accdb"
- Dim tabDatenbank As String = "listeBestellung"
- Private Sub btnSpeichern_Click(sender As Object, e As EventArgs) Handles btnSpeichern.Click
- Dim sqlQry_cmd As String
- Call clsDatabase.datenbankOeffnen(cnnDatenbank)
- If clsDatabase.statusBearbeitung = False Then
- sqlQry_cmd = _
- "INSERT INTO " & tabDatenbank & _
- " (teileBeschreibung, teileHersteller, teileBestellnummer, teileAnzahl, datumEintrag) " & _
- "VALUES (@teileBeschreibung, @teileHersteller, @teileBestellnummer, @teileAnzahl, @datumEintrag)"
- Dim cmdDatenbank As New OleDb.OleDbCommand(sqlQry_cmd, cnnDatenbank)
- cmdDatenbank.Parameters.AddWithValue("@teileBeschreibung", Me.txtBeschreibung.Text)
- cmdDatenbank.Parameters.AddWithValue("@teileHersteller", Me.txtHersteller.Text)
- cmdDatenbank.Parameters.AddWithValue("@teileBestellnummer", Me.txtBestellnummer.Text)
- cmdDatenbank.Parameters.AddWithValue("@teileAnzahl", Me.txtAnzahl.Text)
- cmdDatenbank.Parameters.AddWithValue("@datumEintrag", CStr(Date.Today))
- cmdDatenbank.ExecuteNonQuery()
- cmdDatenbank.Dispose()
- ElseIf clsDatabase.statusBearbeitung = True Then
- sqlQry_cmd = _
- "UPDATE " & tabDatenbank & _
- " SET teileBeschreibung = @teileBeschreibung, " & _
- "teileHersteller = @teileHersteller, " & _
- "teileBestellnummer = @teileBestellnummer, " & _
- "teileAnzahl = @teileAnzahl, " & _
- "teileStatus = @teileStatus, " & _
- "datumEintrag = @datumEintrag, " & _
- "datumBestellung = @datumBestellung " & _
- "WHERE ID = @id"
- Dim cmdDatenbank As New OleDb.OleDbCommand(sqlQry_cmd, cnnDatenbank)
- cmdDatenbank.Parameters.AddWithValue("@id", clsDatabase.idBearbeitung)
- cmdDatenbank.Parameters.AddWithValue("@teileBeschreibung", Me.txtBeschreibung.Text)
- cmdDatenbank.Parameters.AddWithValue("@teileHersteller", Me.txtHersteller.Text)
- cmdDatenbank.Parameters.AddWithValue("@teileBestellnummer", Me.txtBestellnummer.Text)
- cmdDatenbank.Parameters.AddWithValue("@teileAnzahl", Me.txtAnzahl.Text)
- If Me.chckBestellt.Checked = True Then
- cmdDatenbank.Parameters.AddWithValue("@teileStatus", "Ja")
- ElseIf Me.chckBestellt.Checked = False Then
- cmdDatenbank.Parameters.AddWithValue("@teileStatus", "Nein")
- End If
- cmdDatenbank.Parameters.AddWithValue("@datumEintrag", Me.txtDatumEintrag.Text)
- cmdDatenbank.Parameters.AddWithValue("@datumBestellung", Me.txtDatumBestellung.Text)
- cmdDatenbank.ExecuteNonQuery()
- cmdDatenbank.Dispose()
- End If
- Call clsDatabase.datenbankSchliessen(cnnDatenbank)
- frmAnzeige.refreshDatagrid()
- Me.Close()
- End Sub
- Private Sub frmBearbeiten_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- cnnDatenbank = New OleDb.OleDbConnection
- cnnDatenbank.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & pfadDatenbank
- If clsDatabase.statusBearbeitung = False Then
- With Me
- .chckBestellt.Checked = False
- .chckBestellt.Enabled = False
- .btnLoeschen.Enabled = False
- End With
- ElseIf clsDatabase.statusBearbeitung = True Then
- Dim sqlQry_cmd As String
- With Me
- .chckBestellt.Checked = False
- .chckBestellt.Enabled = True
- .btnLoeschen.Enabled = True
- End With
- Call clsDatabase.datenbankOeffnen(cnnDatenbank)
- sqlQry_cmd = "SELECT teileBeschreibung, teileHersteller, teileBestellnummer, teileAnzahl, teileStatus, datumEintrag, datumBestellung FROM " & tabDatenbank & _
- " WHERE ID = @id"
- Dim cmdDatenbank As New OleDb.OleDbCommand(sqlQry_cmd, cnnDatenbank)
- cmdDatenbank.Parameters.AddWithValue("@id", clsDatabase.idBearbeitung)
- Dim dtTemporaer As New DataTable
- dtTemporaer.Load(cmdDatenbank.ExecuteReader)
- With Me
- .txtBeschreibung.Text = dtTemporaer.Rows(0)("teileBeschreibung")
- .txtHersteller.Text = dtTemporaer.Rows(0)("teileHersteller")
- .txtBestellnummer.Text = dtTemporaer.Rows(0)("teileBestellnummer")
- .txtAnzahl.Text = dtTemporaer.Rows(0)("teileAnzahl")
- .txtDatumEintrag.Text = CStr(dtTemporaer.Rows(0)("datumEintrag"))
- .txtDatumBestellung.Text = CStr(dtTemporaer.Rows(0)("datumBestellung"))
- If dtTemporaer.Rows(0)("teileStatus") = "Ja" Then
- .chckBestellt.Checked = True
- End If
- End With
- cmdDatenbank.Dispose()
- clsDatabase.datenbankSchliessen(cnnDatenbank)
- End If
- End Sub
- Private Sub btnLoeschen_Click(sender As Object, e As EventArgs) Handles btnLoeschen.Click
- Dim sqlQry_cmd As String
- Call clsDatabase.datenbankOeffnen(cnnDatenbank)
- sqlQry_cmd = _
- "DELETE FROM " & tabDatenbank & _
- " WHERE ID = @id"
- Dim cmdDatenbank As New OleDb.OleDbCommand(sqlQry_cmd, cnnDatenbank)
- cmdDatenbank.Parameters.AddWithValue("@id", clsDatabase.idBearbeitung)
- cmdDatenbank.ExecuteNonQuery()
- cmdDatenbank.Dispose()
- Call clsDatabase.datenbankSchliessen(cnnDatenbank)
- frmAnzeige.refreshDatagrid()
- Me.Close()
- End Sub
- End Class
- Public Class clsDatabase
- Public Shared statusBearbeitung As Boolean
- Public Shared idBearbeitung As Long
- Public Shared Sub datenbankOeffnen(ByRef verbindungDb As OleDb.OleDbConnection)
- Try
- If Not verbindungDb.State = ConnectionState.Open Then
- verbindungDb.Open()
- End If
- Catch
- MsgBox("Erkannter Fehler: Verbindung zur Datenbank fehlgeschlagen.", MsgBoxStyle.Critical, "Fehlermeldung")
- End Try
- End Sub
- Public Shared Sub datenbankSchliessen(ByRef verbindungDb As OleDb.OleDbConnection)
- Try
- If verbindungDb.State = ConnectionState.Open Then
- verbindungDb.Close()
- End If
- Catch
- MsgBox("Erkannter Fehler: Verbindung zur Datenbank konnte nicht getrennt werden.", MsgBoxStyle.Critical, "Fehlermeldung")
- End Try
- End Sub
- End Class
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „aeleks“ ()