Löschen von Verknüpften Tabellen

Ich habe im Access ein Formular erstellt, das auf eine Tabelle zugreift die mit Excel verknüpft ist. Ich möchte nun im Formular einen Button erstellen, der die gesamte Tabelle, also alle Datensätze löscht oder auf Null setzt. Das habe ich mit dem befehl

DoCmd.RunSQL („delete * FROM X1_Eingabe_Liste;“)

versucht. Leider bekomme ich die Meldung:

Laufzeitfehler ‚3617‘
ISAM unterstützt das löschen von Daten in einer Verknüpften Tabelle nicht.

Ich habe auch schon versucht mit dem Befehl

me.Feld1 = Null

die Datensätze auf null zu setzen, leider gelingt das nur in einem Datensatz und nicht in allen

Wer Weiss Was?

Hallo, ecito!

Wird etwas komplexer:

  1. Du benötigst in den Verweisen den Verweis auf Microsoft Excel in der vorhandenen Version.

Dann:

Sub LoescheTabelle()
 Dim xlApp As Excel.Application
 Dim wbDatei As Workbook
 Dim wsSheet As Worksheet

 Set xlApp = CreateObject("Excel.Application")
 xlApp.Visible = True ' damit Du ggf. siehst, was passiert
 Set wbDatei = xlApp.Workbooks.Open("Dateiname.xls") ' Hier die Datei; ggf. kannst Du die aus dem Connect-String der Tabelle heraus parsen (unter ;DATABASE=...")
 Set wsSheet = wbDatei.Worksheets("Verknüpfte Tabelle") ' dito: im Connect-String unter ;TABLE=...
 wsSheet.Cells.Clear ' Zellen komplett löschen
 wbDatei.Save ' Datei wieder speichern, oder auch nicht, wie Du's brauchst
 ' mach noch irgendwelche Sachen und kille die Objekte zum Schluß

End Sub

Gruß, Manfred

Hallo Manfred!

Danke das funktioniert einmal super!

Gibts da auch die möglichkeit nur bestimmte Zeilen zu löschen?

Mfg

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo, ecito!

Gibts da auch die möglichkeit nur bestimmte Zeilen zu löschen?

Selbstverfreilich. Statt dem .Cells.Clear rennst Du über alle Zeilen (ggf. bis zu einer Leerzeile oder einer bestimmten, maximalen Anzahl von Leerezeilen) und löschst nach bestimmten Bedingungen. Also z. B. so:

Dim lngZeile as long
Dim lngLeerzeile as Long

...
' statt wsSheet.Cells.Clear:
 lngZeile=1
 do
 ' ich gehe mal davon aus, dass in Spalte A was steht, 
 ' um zu überprüfen, ob es eine Leerzeile ist:
 if Trim(wsSheet.Cells(lngZeile,1))="" Then
 lngLeerzeile=lngLeerzeile+1
 else
 lngLeerzeile=0
 ' Jetzt gehe ich davon aus, dass in Spalte B und C das Kriterium
 ' zu finden ist (ruhig etwas komplexer), dass über das Löschen 
 ' entscheidet: Beispiel hier: Spalte B und Spalte C enthalten
 ' Zahlen; beide müssen ungleich 0 sein, sonst wird gelöscht!
 if wsSheet.Cells(lngZeile,2)\*wsSheet.Cells(lngZeile,3)=0 then
 wsSheet.Rows(lngZeile).Delete
 ' weil die nächste Zeile auch überprüft werden soll, die
 ' nach dem Löschen aber eine Zeile hochgerutscht ist, und weil
 ' die Zeilenvariable am Ende gleich hochgezählt wird:
 lngZeile=lngZeile-1
 endif
 endif
 lngZeile=lngZeile+1
 loop until lngLeerzeile\>20 ' z. B., wenn definitiv nicht 
 ' mehr als 20 Leerzeilen aufeinander folgen...
' und dann weiter wie gehabt...

Gruß, Manfred