Alle Datensätze in einer Access Tabelle mit Tableadapter löschen funktioniert nicht.

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Alle Datensätze in einer Access Tabelle mit Tableadapter löschen funktioniert nicht.

    Hallo,

    bin neu hier im Forum und hoffe auf Eure Unterstützung.

    Ich arbeite mich gerade in VB 2012 Express ein und probiere verschiedene Sachen durch um mir einen ersten überblick zu verschaffen.


    Zum Test habe ich mir eine Access-2010-Datenbank "Database3.accdb angelegt und über den Assistenten ein "Database3DataSet" angelegt. In der Datenbank befindet sich eine Tabelle "TempDat".

    Nun versuche ich unter Verwendung des TableAdapters alle Zeilen in der Datenbank zu löschen. Leider will mir das nicht gelingen. Der Code wird fehlerfrei durchlaufen, aber die Datensätze werden nicht aus der Datenbank gelöscht.

    Vielleicht kann mir jemand sagen was ich da falsch mache. Aber bitte postet nur Lösungen, wie es mit dem TableAdapter gemacht. Denn ich möchte verstehen wie dieses Ding funktioniert.

    Hier der Code:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. Dim Zeile As Database3DataSet.TempDatRow
    3. Dim Tabelle As DataRowCollection = Database3DataSet.TempDat.Rows
    4. Dim TempDatTableAdapter As New Database3DataSetTableAdapters.TempDatTableAdapter()
    5. TempDatTableAdapter.Fill(Database3DataSet.TempDat)
    6. For Each Zeile In Tabelle
    7. Zeile.Delete()
    8. Next
    9. Try
    10. Validate()
    11. TempDatTableAdapter.Update(Database3DataSet.TempDat)
    12. MsgBox("OK")
    13. Catch ex As Exception
    14. MsgBox("Fehler")
    15. End Try
    16. End Sub


    Viele Grüße

    Jörg

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jgrieb“ ()

    "Immer kopieren" war tatsächlich eingestellt. Hab's auf "Nicht kopieren" umgestellt. Hat aber auch nichts gebracht. Grundsätzlich kann ich ja alle Zeilen aus der Tabelle TempDat löschen. Auch wenn "Immer kopieren" eingestellt ist. Nur mit dem TableAdapter auf Basis des mit dem Assistenten generierten DataSet (Datsbase3DataSet) funktioniert es nicht.

    Mit dem folgenden Code kann ich z. B. alle Zeilen löschen.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim DS As System.Data.DataSet
    3. Dim SQL As String
    4. Dim DT As System.Data.DataTable
    5. Dim DR As System.Data.DataRow
    6. Dim DA As System.Data.OleDb.OleDbDataAdapter
    7. Dim CB As System.Data.OleDb.OleDbCommandBuilder
    8. Dim CONNSTRING As String
    9. CONNSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='D:\Develop\Zahlungsvorschlag_PasstPRO-Visual Studio\Zahlungsvorschlag_manuell\WindowsApplication1\Database3.accdb'"
    10. ' --- Zusammensetzung des SQL-Befehls
    11. SQL = "SELECT * FROM TempDat"
    12. ' --- DataSet erzeugen
    13. DS = New System.Data.DataSet()
    14. ' --- Adapter definieren
    15. DA = New OleDbDataAdapter(SQL, CONNSTRING)
    16. ' --- SQL-DML-Befehle erzeugen
    17. CB = New OleDbCommandBuilder(DA)
    18. ' --- Tabelle einlesen
    19. DA.Fill(DS, "TempDat")
    20. ' --- Zugriff auf Tabelle
    21. DT = DS.Tables("TempDat")
    22. ' --- Löschen aller Datensätze
    23. For Each DR In DT.Rows
    24. DR.Delete()
    25. Next
    26. ' --- Änderungen zurückliefern
    27. DA.Update(DS, "TempDat")
    28. MsgBox("Fertig!")
    29. End Sub



    Aber wie kriegt man das mit dem TableAdapter auf Basis des mit dem Assistenten generierten DataSet hin?
    Gruß Jörg
    jo, geht auch:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim Zeile As DBSampleDataset.ArticleRow
    3. Dim Tabelle As DataRowCollection = DBSampleDataSet.Article.Rows
    4. Dim TempDatTableAdapter As New DBSampleDatasetTableAdapters.ArticleTableAdapter
    5. TempDatTableAdapter.Fill(DBSampleDataSet.Article)
    6. For Each Zeile In Tabelle
    7. Zeile.Delete()
    8. Next
    9. Try
    10. Validate()
    11. TempDatTableAdapter.Update(DBSampleDataSet.Article)
    12. MsgBox("OK")
    13. Catch ex As Exception
    14. MsgBox("Fehler")
    15. End Try
    16. End Sub
    Leider funktioniert table.clear auch nicht.

    Hier der Code:

    VB.NET-Quellcode

    1. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    2. TryDim Table As DataTable = Database3DataSet.TempDat
    3. Table.Clear()
    4. Catch ex As DataException
    5. ' Process exception and return.Console.WriteLine("Exception of type {0} occurred.", _
    6. ex.GetType().ToString())
    7. End TryEnd Sub


    Läuft auch wieder durch ohne Fehler.
    Den Anhang hatte ich tatsächlich übersehen. Wie's passieren kann? Wenn man stundenlang über so einem Problem sitzt, lässt dann die Konzentration wohl irgendwann nach.

    Ich habe mir Dein Programm angesehen. Die DBSampleDataset.clear Anweisung in Deiner Reload Routine macht bei mir auch was. Aber nicht das was Sie soll.

    Kurze Erklärung zu meiner Database3.accdb

    Diese Datenbank hat eine Tabelle TempDat und eine ODBC-Verbindung zu einem SQL-Server über die 3 weitere Tabellen des SQL-Servers verknüpft sind.

    Über das Dabase3Dataset in VB kann ich auf diese 4 Tabellen zugreifen.

    Nach meinem Verständnis müsste "Database3Dataset.Clear" alle Zeilen in allen 4 Tabellen des Datasets löschen. Macht es aber nicht. Sondern es löscht 2 vom SQL-Server verknüpfte Tabellen. Die 3. SQL-Server-Tabelle und meine Access-Tempdat Tabelle werden nicht gelöscht.

    Ich kann mir das einfach nicht erklären.