21.06.2020, 10:18
Hallo Stefan, :19:
OK - hier mal eine Möglichkeit: :21:
[attachment=32542]
Habe das gestern in meinen Blog mit aufgenommen. In dem Beispiel siehst du, wie man...
Den Inhalt einer Tabelle löscht:
Eine komplette Tabelle aus Excel in diese Tabelle in Access rüber schiebt:
Eine Anfügeabfrage (wenn Wert aus Spalte ID nicht vorhanden):
Eine Aktualisierungsabfrage (Maßgeblich auch hier wieder die Spalte ID):
Das ist jetzt nur ein Beispiel, ohne Maßgabe eines Datenbank spezifischen Aufbaus. Es gibt keinen Primärschlüssel, es wird nichts indiziert. Wenn das die Grundlage wäre, und man würde ständig mehrere tausend Datensätze rüber schaufeln, dann müsste man anpassen, denn dann würde "INSERT INTO..." zu Geschwindigkeitsproblemen führen.
Außerdem müsste man die Datenbank immer wieder komprimieren.
Bei einer überschaubaren Menge an Daten ist das aber kein Problem.
Achte auf die Kommentare im Code. Namen von Tabellen und Feldern müssen exakt geschrieben sein.
Ist deine Tabelle größer, und du möchtest nur einen Teil nehmen, dann kopiere den vorher in Excel in ein temporäres Tabellenblatt. Wenn du das intensiver machen möchtest, kommst du um einen kleinen Grundkurs in SQL nicht herum. Da gibt es aber zahlreiche im Netz.
Soll ja auch nur zum weiteren Probieren da sein, also mach was draus. :21:
OK - hier mal eine Möglichkeit: :21:
[attachment=32542]
Habe das gestern in meinen Blog mit aufgenommen. In dem Beispiel siehst du, wie man...
Den Inhalt einer Tabelle löscht:
Code:
.Execute "DELETE * FROM TransferToAccess"
Eine komplette Tabelle aus Excel in diese Tabelle in Access rüber schiebt:
Code:
.Execute "INSERT INTO TransferToAccess SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" & ThisWorkbook.FullName & "].[TransferToAccess$]"
Eine Anfügeabfrage (wenn Wert aus Spalte ID nicht vorhanden):
Code:
.Execute "INSERT INTO Archiv SELECT * FROM TransferToAccess WHERE ID NOT IN (SELECT ID FROM Archiv)"
Eine Aktualisierungsabfrage (Maßgeblich auch hier wieder die Spalte ID):
Code:
.Execute "UPDATE Archiv INNER JOIN TransferToAccess ON Archiv.ID = TransferToAccess.ID " & _
"SET Archiv.SpalteA = TransferToAccess.SpalteA, " & _
"Archiv.SpalteB = TransferToAccess.SpalteB, " & _
"Archiv.SpalteC = TransferToAccess.SpalteC, " & _
"Archiv.SpalteD = TransferToAccess.SpalteD, " & _
"Archiv.SpalteE = TransferToAccess.SpalteE, " & _
"Archiv.SpalteG = TransferToAccess.SpalteG, " & _
"Archiv.SpalteH = TransferToAccess.SpalteH, " & _
"Archiv.SpalteI = TransferToAccess.SpalteI, " & _
"Archiv.SpalteJ = TransferToAccess.SpalteJ"
Das ist jetzt nur ein Beispiel, ohne Maßgabe eines Datenbank spezifischen Aufbaus. Es gibt keinen Primärschlüssel, es wird nichts indiziert. Wenn das die Grundlage wäre, und man würde ständig mehrere tausend Datensätze rüber schaufeln, dann müsste man anpassen, denn dann würde "INSERT INTO..." zu Geschwindigkeitsproblemen führen.
Außerdem müsste man die Datenbank immer wieder komprimieren.
Bei einer überschaubaren Menge an Daten ist das aber kein Problem.
Achte auf die Kommentare im Code. Namen von Tabellen und Feldern müssen exakt geschrieben sein.
Ist deine Tabelle größer, und du möchtest nur einen Teil nehmen, dann kopiere den vorher in Excel in ein temporäres Tabellenblatt. Wenn du das intensiver machen möchtest, kommst du um einen kleinen Grundkurs in SQL nicht herum. Da gibt es aber zahlreiche im Netz.
Soll ja auch nur zum weiteren Probieren da sein, also mach was draus. :21: