Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: ADODB Daten aus verknüpfter Exceltabelle löschen

ADODB Daten aus verknüpfter Exceltabelle löschen
25.09.2019 09:42:18
Mike
Hallo zusammen,
ich möchte gern Daten via Recordset aus einer verknüpften Exceltabelle löschen.
Zunächst baue ich eine Verbindung auf. Danach den entsprechenden Recordset. Wenn ich dann im Weiteren Recordset.Delete verwende oder auch eine Löschabfrage (SqlAbfrg = "DELETE* FROM [ZoomWerte$A3:K]" erhalte ich stets die gleiche Fehlermeldung: "ISAM unterstützt das Löschen von Daten in einer verknüpften Tabelle nicht."
Nun habe ich schon viel recherchiert und hatte die Aussagen gefunden, dass das Löschen von Daten eines Recordsets über ADODB nicht unterstützt wird. Man könne anstatt dessen den Inhalt der einzelnen Felder löschen. Auch das hatte ich versucht erhielt aber immer nach dem Löschen von mehreren Feldern die Fehlermeldung: "Fehler bei einem aus mehreren Schritten bestehenden Vorgang. Prüfen Sie die einzelnen Statuswerte."
Access kann ich nicht verwenden, da es im Unternehmen nicht eingesetzt wird. Die Excel-Datendatei verdeckt zu starten, dann die Daten löschen und die Datei wieder zu schließen wäre für mich nicht so wirklich eine Option.
Hätte jemand da noch eine Lösungsmöglichkeit?
Vielen Dank!

Option Explicit
Public AdoCon As Object
Public ZoomRSet As Object
Dim SqlAbfrg As String
Function ADO_Verbindung()
101 Dim DateiSuObj As Object
102 Const TabName = ""
103 Const ModName = "A_SQL_DatenBezug"
104 Const ProzName = "ADO_Verbindung"
105 Const FehlerKat = 2
106 On Error GoTo Fehler
'Sql-Verbindung aufbauen
108 Set AdoCon = CreateObject("ADODB.CONNECTION")
With AdoCon
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Data Source") = ActiveWorkbook.path & "\AnalyticsDaten.xlsm"
.Properties("Extended Properties") = "Excel 12.0;HDR=NO"
.CursorLocation = 3 'adUseClient
.Mode = 3 '16 = adModeShareDenyNone // 3 = adModeReadWrite
.Open
End With
111 If AdoCon.State = 0 Then  'Die Verbindung "SQL_Connection" ist nicht geöffnet worden
112   MsgBox "Die SQL-Verbindung konnte nicht geöffnet" & Chr(13) & _
"werden. Das Programm kann daher nicht" & Chr(13) & _
"gestartet werden. Bitte wenden Sie sich an" & Chr(13) & _
"den Administrator des Programms."
113 End If
114 Exit Function
115 Fehler:
116 If AdoCon.State = 1 Then  'Die Verbindung "SQL_Connection" ist geöffnet
117   AdoCon.Close
118   Set AdoCon = Nothing
119 End If
120 Call Fehler_Aufz(TabName, ModName, ProzName, FehlerKat)
End Function

Function ZoomWerte_RSet()
100 Const TabName = ""
101 Const ModName = "A_SQL_DatenBezug"
102 Const ProzName = "ZoomWerteRSet"
103 Const FehlerKat = 2
104 On Error GoTo Fehler
105 Set ZoomRSet = CreateObject("ADODB.RECORDSET")
'Daten aus der ZoomWerte-Tabelle abfragen
106 SqlAbfrg = "SELECT * FROM [ZoomWerte$A3:K]"
107 With ZoomRSet
108   .Source = SqlAbfrg
109   .ActiveConnection = AdoCon
110   .CursorLocation = 3 'adUseClient
111   .CursorType = 1 '1 = adOpenKeyset  //  2 = adOpenDynamic  // 3 = adOpenStatic
112   .LockType = 3 '3 = adLockOptimistic  // 4 = adLockBatchOptimistic
113   .Open
114   .MoveFirst
115 End With
116 Exit Function
117 Fehler:
'Einstellungen-Recordset schließen
118 If Not ZoomRSet Is Nothing Then
119   If ZoomRSet.State And 1 = 1 Then
120      ZoomRSet.Close
121      Set ZoomRSet = Nothing
122   End If
123 End If
124 Call Fehler_Aufz(TabName, ModName, ProzName, FehlerKat)
End Function

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ADODB Daten aus verknüpfter Exceltabelle löschen
25.09.2019 14:27:05
EtoPHG
Hallo Mike,
Zitat: Die Excel-Datendatei verdeckt zu starten, dann die Daten löschen und die Datei wieder zu schließen wäre für mich nicht so wirklich eine Option.
Es ist aber die Einzige, die funktioniert, den der Treiber für XL lässt keine anderen Manipulationen am Dateninhalt zu, ausser den erwähnten.
Gruess Hansueli
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

ADODB Daten aus verknüpfter Exceltabelle löschen


Schritt-für-Schritt-Anleitung

  1. Verbindung aufbauen: Verwende den folgenden VBA-Code, um eine Verbindung zur verknüpften Exceltabelle herzustellen. Achte darauf, den Pfad zur Datei korrekt anzugeben.

    Option Explicit
    Public AdoCon As Object
    
    Function ADO_Verbindung()
        Set AdoCon = CreateObject("ADODB.CONNECTION")
        With AdoCon
            .Provider = "Microsoft.ACE.OLEDB.12.0"
            .Properties("Data Source") = ActiveWorkbook.Path & "\AnalyticsDaten.xlsm"
            .Properties("Extended Properties") = "Excel 12.0;HDR=NO"
            .CursorLocation = 3 'adUseClient
            .Mode = 3 '16 = adModeShareDenyNone // 3 = adModeReadWrite
            .Open
        End With
    End Function
  2. Recordset erstellen: Erstelle ein Recordset, um Daten aus der Tabelle abzufragen. Nutze den folgenden Code:

    Public ZoomRSet As Object
    
    Function ZoomWerte_RSet()
        Set ZoomRSet = CreateObject("ADODB.RECORDSET")
        Dim SqlAbfrg As String
        SqlAbfrg = "SELECT * FROM [ZoomWerte$A3:K]"
    
        With ZoomRSet
            .Source = SqlAbfrg
            .ActiveConnection = AdoCon
            .CursorLocation = 3 'adUseClient
            .CursorType = 1 '1 = adOpenKeyset
            .LockType = 3 '3 = adLockOptimistic
            .Open
        End With
    End Function
  3. Daten löschen: Verwende Recordset.Delete oder eine Löschabfrage. Beachte jedoch, dass in vielen Fällen das Löschen von Daten in einer verknüpften Tabelle nicht unterstützt wird.


Häufige Fehler und Lösungen

  • Fehler: "ISAM unterstützt das Löschen von Daten in einer verknüpften Tabelle nicht."
    Dies ist ein typisches Problem, wenn man versucht, Daten direkt in einer verknüpften Excel-Tabelle zu löschen. Du kannst stattdessen die Zellen in den einzelnen Feldern leeren oder die Excel-Daten in eine andere Tabelle kopieren und dann die ursprüngliche Tabelle überschreiben.

  • Fehler: "Fehler bei einem aus mehreren Schritten bestehenden Vorgang."
    Dieser Fehler tritt auf, wenn mehrere Löschoperationen nicht erfolgreich waren. Achte darauf, dass du die Verbindung korrekt geschlossen hast, bevor du eine weitere Operation durchführst.


Alternative Methoden

Wenn die ADODB-Methode nicht funktioniert, gibt es alternative Ansätze:

  1. Direktes Löschen in Excel: Manuell die Daten in der Excel-Datei löschen, wenn dies eine praktikable Option ist.
  2. VBA-Skripte verwenden: Erstelle VBA-Skripte, die die Daten auf andere Weise manipulieren, z.B. durch das Kopieren der Daten in eine neue Tabelle und anschließendes Löschen der alten.

Praktische Beispiele

Hier ist ein Beispiel für das Leeren von Zellen in einem Recordset:

If Not ZoomRSet.EOF Then
    ZoomRSet.MoveFirst
    Do While Not ZoomRSet.EOF
        ZoomRSet.Fields("DeinFeldName").Value = Null
        ZoomRSet.MoveNext
    Loop
End If

In diesem Beispiel wird der Inhalt eines bestimmten Feldes gelöscht. Dies kann eine nützliche Technik sein, wenn das direkte Löschen nicht möglich ist.


Tipps für Profis

  • Verwende Transaktionen: Wenn du mehrere Löschvorgänge durchführst, könntest du diese in einer Transaktion zusammenfassen, um die Datenintegrität zu gewährleisten.
  • Fehlerbehandlung: Implementiere eine umfassende Fehlerbehandlung in deinem VBA-Code, um unerwartete Probleme frühzeitig zu erkennen und zu beheben.

FAQ: Häufige Fragen

1. Warum kann ich Daten in verknüpften Excel-Tabellen nicht löschen?
Der Excel OLE DB Treiber erlaubt in der Regel keine Löschoperationen auf verknüpften Tabellen. Stattdessen musst du alternative Methoden verwenden.

2. Gibt es eine Möglichkeit, das Löschen von Daten zu umgehen?
Ja, du kannst die Daten in den Zellen leeren oder die Daten in eine neue Tabelle kopieren und die ursprüngliche Tabelle löschen.

3. Welche Excel-Versionen unterstützen ADODB?
ADODB wird in Excel 2007 und späteren Versionen unterstützt, solange der passende OLE DB-Treiber installiert ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige