Datensätze löschen mit acLink

Hallo,

ich hab folgendes Problem:

ich importier eine Excel-tabelle per acLink in Access und will jetzt bestimme Datensätze löschen. doch geht nicht: „ISAM unterstützt das Löschen von Datensätzen aus verknüpften Tabellen nicht.“

hier der Code:

DoCmd.TransferSpreadsheet acLink, TransferSpreadsheetTypeExcel9, "ImportSollT", importdateiS, True

cm.CommandText = "DELETE ImportSollT.\*, F236GK.Kontonummer FROM F236GK RIGHT JOIN ImportSollT ON F236GK.Kontonummer = ImportSollT.KONTONUMMER WHERE (((F236GK.Kontonummer) Is Not Null));"
 cm.Execute

Einfacher gehts per acImport nur die Löschung soll ja rückwirkend auf die Tabelle sein, da diese dann wieder genommen wird, und dann wären die Datensätze ja nicht gelöscht.

eine idee??

gruss

michael

Hallo, Michael!

ich hab folgendes Problem:

Ja. In der Tat.

ich importier eine Excel-tabelle per acLink in Access und will
jetzt bestimme Datensätze löschen. doch geht nicht: „ISAM
unterstützt das Löschen von Datensätzen aus verknüpften
Tabellen nicht.“

Sowas hatten wir schon mal vor gar nicht allzu langer Zeit. Du wirst wohl oder übel die Excel-Datei öffnen müssen und dann über alle Zeilen rüberrennen und dabei überprüfen, ob die Zeile gelöscht werden muss oder nicht.

Kurzer Abriss:

  1. Excel-Objekt anlegen
  2. Quell-Datei öffnen
  3. Über erstes/betreffendes Worksheet rüberrennen:
    3.1 erste zu löschende Zeile setzen (meistens 2, wenn in erster Zeile Überschriften/Feldnamen stehen)
    3.2 Zeile löschen, sofern nötig. Weiter bei 3.2
    3.3 Erst dann nächste Zeile, so lange, bis keine weiteren Zeilen vorhanden; zu 3.2

eine idee??

Nicht wirklich gut, die Idee, oder? Aufwändig und wenig performant. Aber Excel ist ja nun nicht wirklich eine Datenbank, auch wenn lustige Zeitgenossen behaupten, man könne es dazu verwenden…

Gruß, Manfred

Hallo Manfred,

mein Vorschlag sieht jetzt folgendermaßen aus:

Private Function LeseExcel()


 Dim sExcelFile As String
 Dim sCon As String
 Dim rs As ADODB.Recordset
 Dim rsA As ADODB.Recordset

'Pfad zum Excel-Sheet - in diesem Fall im gleichen Verzeichnis
 sExcelFile = getImportdateipfadH()

'Connection-String zusammenstellen.
 sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""" & sExcelFile & """;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""

 Set rs = New ADODB.Recordset
 Set rsA = New ADODB.Recordset

'Recordset über den Connectionstring öffnen.
'Tabellenname ist der Sheetname mit einem Dollarzeichen am Ende und in eckigen Klammern!!

 rsA.Open "F236GK", CurrentProject.Connection, adOpenStatic, adLockReadOnly

 rs.Open "Select \* From [ZiBi\_light$]", sCon, adOpenDynamic, adLockOptimistic

 Do Until rsA.EOF
 rs.Find ("KONTONUMMER = '" & rsA!Kontonummer & "'")
 rs.Delete
 rsA.MoveNext
 Loop

 rs.Close
 Set rs = Nothing

 LeseExcel = Null

End Function

sieht doch ganz ordentlich aus… nur… fehler: Tabelle ist schreibgeschützt!!! ka warum…

noch ne idee? :wink:

gruss

michael

Hi, Michael!

sieht doch ganz ordentlich aus… nur…

Si.

fehler: Tabelle ist
schreibgeschützt!!! ka warum…

Selbst keine Ahnung, nur Vermutung: MS will partout nicht über Datenzugriff ein Excel-Sheet modifizieren. Versuch mal, Daten zu ändern statt zu löschen. Mal sehen, ob das funktioniert.

Wie gesagt, (möglicherweise) einzige Möglichkeit: Excel öffnen und dort im Arbeitsblatt arbeiten. Wobei das mit „Datenbank“ nix mehr zu tun hat.

Gruß, Manfred

Erledigt!
adLockBatchOptimistic statt adLockOptimistic dann gehts…

gruss Michael