Hallo,
nachdem mir schon gut geholfen wurde, suche ich jetzt eine Lösung, wie ich die gelöschten Zeilen im DataGridview an die AccessDB zurück geben kann. Wie mache ich das?
Dies ist momentan mein Code:
Wenn die Prozedur "Delete" aufgerufen wird, funktioniert das Löschen der markierten Zeilen im DataGridview. Das Übergeben an die AccessDB mit Update funktioniert aber nicht:Für ein Update ist ein gültiger DeleteCommand erforderlich, wenn eine DataRow-Auflistung mit gelöschten Zeilen weitergegeben wird.
Was muss ich an meinem Code ändern?
nachdem mir schon gut geholfen wurde, suche ich jetzt eine Lösung, wie ich die gelöschten Zeilen im DataGridview an die AccessDB zurück geben kann. Wie mache ich das?
Dies ist momentan mein Code:
VB.NET-Quellcode
- Imports System.Data, System.Data.Common
- Public Class frmMain
- Dim Ada As OleDb.OleDbDataAdapter
- Dim Kda As OleDb.OleDbDataAdapter
- Dim Pda As OleDb.OleDbDataAdapter
- Dim dt As DataTable
- Dim ds As DataSet
- Dim view As DataView = New DataView
- Dim Tabelle As String
- Public Sub Main()
- Dim ConnectionString As String = GetConnectionString()
- ConnectToData(ConnectionString)
- End Sub
- Private Shared Function GetConnectionString() As String
- Dim lokPfad As String
- 'Lokaler Dateipfad des Programms ermitteln
- lokPfad = IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath)
- 'Lokale Access 2003 Datei "Daten.mdb" ansprechen
- Return "Provider=Microsoft.Jet.OLEDB.4.0;" &
- "Data Source=" & lokPfad & "\Daten.mdb;"
- End Function
- Private Sub ConnectToData(ByVal ConnectionString As String)
- 'MSSQL Verbindung mit der Datenbank herstellen
- Using Con As OleDb.OleDbConnection = New OleDb.OleDbConnection(ConnectionString)
- 'Verbindung öffnen und ggf. abfangen
- Try
- 'Verbindung öffnen
- Con.Open()
- Dim AstrSQL As String = "SELECT * FROM tblArtikel"
- Dim KstrSQL As String = "SELECT * FROM tblKunden"
- Dim PstrSQL As String = "SELECT * FROM tblPreise"
- Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand
- '3 DataAdapter nehmen 3 Tabellen auf
- Ada = New OleDb.OleDbDataAdapter(AstrSQL, Con)
- Kda = New OleDb.OleDbDataAdapter(KstrSQL, Con)
- Pda = New OleDb.OleDbDataAdapter(PstrSQL, Con)
- 'DataSet initialisieren
- ds = New DataSet
- 'da.SelectCommand = cmd
- 'DataAdapter füllt das DataSet
- Ada.Fill(ds, "Artikel")
- Kda.Fill(ds, "Kunden")
- Pda.Fill(ds, "Preise")
- 'DataView initialisieren
- view = ds.Tables(Tabelle).DefaultView
- 'Bindingsource initialisieren
- Dim bs As BindingSource = New BindingSource()
- bs.DataSource = view
- DataGridView1.DataSource = bs
- 'Filter und Sortierung setzen
- view.Sort = "ID DESC"
- 'Verbindung schließen
- Con.Close()
- Catch ex As Exception
- MessageBox.Show("Kann keine Verbindung zur DB herstellen. Ist die Datei vorhanden?")
- End Try
- End Using
- End Sub
- Private Sub btnSuche_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
- Handles btnSuche.Click
- Filter()
- End Sub
- 'Wenn im Formular entfernen gedrückt wird
- Private Sub frmMain_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
- If e.KeyCode = Keys.Delete Then
- Delete()
- End If
- End Sub
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
- Handles MyBase.Load
- 'Beim Laden DataGridview und Buttonleiste ausblenden
- FillByToolStrip.Visible = False
- DataGridView1.Visible = False
- End Sub
- Private Sub ArtikelToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ArtikelToolStripMenuItem.Click
- Tabelle = "Artikel"
- 'DatagridView füllen
- Main()
- FillByToolStrip.Visible = True
- DataGridView1.Visible = True
- End Sub
- Private Sub KundenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KundenToolStripMenuItem.Click
- Tabelle = "Kunden"
- 'DatagridView füllen
- Main()
- FillByToolStrip.Visible = True
- DataGridView1.Visible = True
- End Sub
- Private Sub PreiseToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PreiseToolStripMenuItem.Click
- Tabelle = "Preise"
- 'DatagridView füllen
- Main()
- FillByToolStrip.Visible = True
- DataGridView1.Visible = True
- End Sub
- Private Sub fldSuche_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles fldSuche.KeyUp
- 'Wenn im Textfeld Suche "Enter" gedrückt wird
- If e.KeyCode = Keys.Return Then
- Filter()
- End If
- End Sub
- Private Sub Filter()
- 'Wenn kein Text in fldSuche steht, dann keine Variable an Prozedur übergeben
- If fldSuche.Text = "" Then
- view.RowFilter = ""
- Else
- 'Filter übergeben
- Dim Var() As String = Split(fldSuche.Text)
- Dim strFilter As String = ""
- For i = 0 To UBound(Var)
- If i > 0 Then strFilter = strFilter & " OR "
- Select Case Tabelle
- Case "Artikel"
- If IsNumeric(Var(i)) Then
- strFilter = strFilter & "ArtNr = " & Var(i)
- Else
- strFilter = strFilter & "ArtName LIKE '*" & Var(i) & "*'"
- End If
- Case "Kunden"
- If IsNumeric(Var(i)) Then
- strFilter = strFilter & "KndNr = " & Var(i)
- Else
- strFilter = strFilter & "KndName LIKE '*" & Var(i) & "*'"
- End If
- Case "Preise"
- If IsNumeric(Var(i)) Then
- strFilter = strFilter & "KndNr = " & Var(i) & " OR ArtNr = " & Var(i)
- Else
- strFilter = strFilter & "KndName LIKE '*" & Var(i) & "*' OR ArtName LIKE '*" & Var(i) & "*'"
- End If
- End Select
- Next
- view.RowFilter = strFilter
- End If
- End Sub
- 'Prozedur um alle markierten Zeilen zu löschen
- Private Sub Delete()
- If MessageBox.Show("Wollen Sie die Datensätze wirklich löschen?", "Löschen", MessageBoxButtons.YesNo) = DialogResult.Yes Then
- For Each dgvr As DataGridViewRow In Me.DataGridView1.SelectedRows
- Me.DataGridView1.Rows.Remove(dgvr)
- Next
- Select Case Tabelle
- Case "Artikel"
- Me.Ada.Update(Me.ds.Tables(Tabelle))
- Case "Kunden"
- Me.Kda.Update(Me.ds.Tables(Tabelle))
- Case "Preise"
- Me.Pda.Update(Me.ds.Tables(Tabelle))
- End Select
- End If
- End Sub
- 'Button "btnDelete"
- Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
- Delete()
- End Sub
- End Class
Wenn die Prozedur "Delete" aufgerufen wird, funktioniert das Löschen der markierten Zeilen im DataGridview. Das Übergeben an die AccessDB mit Update funktioniert aber nicht:Für ein Update ist ein gültiger DeleteCommand erforderlich, wenn eine DataRow-Auflistung mit gelöschten Zeilen weitergegeben wird.
Was muss ich an meinem Code ändern?