Hallo ich bin mir einer OLEDB-Connection auf eine Access-DB. Folgendes Problem gibts beim Löschen von Tabellen. SQL = "DELETE FROM tbReports_Gruppen" Dim CMD As New System.Data.OleDb.OleDbCommand(SQL,MyConnection) Dim Anz% = CMD.ExecuteNonQuery hier kommt Fehler: Datensatz ist gelöscht.
Folgender sql geht aber: SQL = "DELETE FROM tbReports_Gruppen" WHERE id_RG={" & Guid.Empty.ToString & "}"
Klingt für mich bisher so, als sei / werde ein Datensatz (oder mehrere) in tbReports_Gruppen bereits oder gerade gelöscht, so dass das neue SQL Statement auf diese(n) Datensatz/-sätze, zufällig auch eine Löschanweisung, nun fehlschlägt.
Ich kenne das in bestimmten Konfigurationen mit SQL Server als Backend und Access als Frontend. Ich hatte immer Access in Verdacht, Änderungen am SQL Server zu langsam mitzubekommen. Oder, weniger wahrscheinlich, aber auch denkbar, der SQL Server ist so konfiguriert, dass er zeitweise mit unsinnig großen Logfiles o.ä. komplett ausgelastet ist und Transaktionen nur langsam abschließt oder die nach Abschluss geänderten Tabellendaten nur langsam an die Clients ausliefert. Mit einer geschickt gewählten Kombination der Settings AutoGrowth und AutoShrink kannst du es hinkriegen, dass der SQL Server gar nicht mehr mit dir spricht. Bei Access als Datengrab, äh, -quelle, kommt zu solchen möglicherweise selbst reproduzierten "Features" noch Access' grundsätzliche Anfälligkeit dazu.
Wenn du die Chance hast, in deiner Sprache (keine Info darüber, ist das VB.net? Die Dim's sehen nach einem VB-Dialekt aus) einen refresh der connection zu erzwingen, solltest du's damit probieren. Vielleicht auch die Verbindung kappen und neu aufbauen.
Dein ähnlich lautender Bericht für mein bekanntes und als ungelöst im Hinterstübchen schlummerndes Problem bringt mich ins Nachdenken, ob es nicht vielleicht falsch ist, bei der Fehlersuche auf Backend oder Frontend zu fokussieren. Wenn es sich doch offensichtlich um ein Kommunikationsproblem handelt, müsste man auch mal die Kommunikationsschicht betrachten, also den ODBC-/OLE-DB-Provider. Vielleicht lässt sich dein OLE-DB-Treiber direkt ansprechen und zum Refresh zwingen? Wenn du die Chance hast, versuch es doch mal mit einem alternativen Treiber. Benötigst du OLE-DB-Funktionalität? Oder ginge auch ein schlichterer ODBC-Provider?
Sorry, dass ich keine fertige Lösung bieten kann, aber das liegt in der Natur des Problems und an der knappen Wiedergabe der Fehlermeldung. Zusätzlich zur Nachfrage von Christoph_Wi würde mich noch interessieren, wer denn den Fehler meldet, Backend, Frontend, OLE-DB-Provider, System?
Vielen Dank für die Hilfe - ich habe mein Problem jetzt doch noch gefunden. Um eine Tree-Ansicht zu erhalten habe ich in meiner Tabelle 'tbReports_Gruppen' ein id_RP_Parent, welches eine Beziehung mit Löschweitergabe zu id_RP hat. Dadurch sind auf Grund der Beziehung schon Rows gelöscht, bevor diese vom Delete her erreicht werden. Mit der Löschbingung: where (id_RP_Parent is null) funzt es auch.