online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon neworker vom 28.08.2020, 21:20 Options

CSV Import in Access

Hallo,

ich importiere Datensätze aus einer .csv-Datei in eine Access Tabelle (Manuel).
Dies stellt kein Problem da.

Jetzt bin ich gezwungen, die Daten aus der CSV-Datei in zwei Tabellen zuschreiben.
Ich gebe mal ein Beispiel:

CSV:
++++++++++++++++++++++++
+ Name | Adresse | Bestellnummer +
+----------------------------------------+
+Tom | Seestr.1 | 123 +
++++++++++++++++++++++++


Tab1
+++++++++++++++++
+ KID | Name | Adresse +
+----------------------------+
+ 1 | Tom | Seestr.1 +
++++++++++++++++++

Tab2

++++++++++++++++
+ KID | Bestellnummer +
+--------------------------+
+ 1 | 123 +
++++++++++++++++

Dem Feld Tab1.KID wird ein Autowert zu gewiesen.
Dieser Wert (1) muss in dem Feld Tab2.KID eingetragen werden.
Diese zwei Tabellen stehen in Verbindung mit einander.

Die Frage ist jetzt nur, ist das manuell überhaupt möglich?
Man benötigt bestimmt ein Script dafür :/

Gruß networker///


Antwort schreiben

Antwort 1 von lorf55 vom 07.09.2020, 11:09 Options

Hallo Networker,
ich würde KID keinen Autowert geben, denn wenn du mal deine Tabelle umkopierst, könnte es sein, das sich KID ändert und nicht mehr zur TAB2 passt.. Deshalb könnte man einen eindeutigen Wert aus Vor und Zuname oder sonstwie bilden und diesen Wert gleich in die CSV-Datei zu übernehmen.
Denn kann man mit dem folgendem einfachen Makro die Daten in die Tabellen einfügen:
Sub ImportTabelleDirekt()
    CurrentDb.Execute _
      "INSERT INTO Tab1 ( KID, Name, Adresse ) " + _
      "SELECT KID, Name, Adresse " + _
      "FROM [Text;FMT=Delimited(;);HDR=Yes;DATABASE=D:\Daten;].[CSV.CSV];", dbFailOnError
    CurrentDb.Execute _
      "INSERT INTO Tab2 ( KID, Bestellnummer ) " + _
      "SELECT KID, Bestellnummer " + _
      "FROM [Text;FMT=Delimited(;);HDR=Yes;DATABASE=D:\Daten;].[CSV.CSV];", dbFailOnError
End Sub
wobei CSV.csv die Importdatei ist:
mit Semikolon als Trenner, mit Kopfzeile und sie steht bei mir in D:\Daten .
Man hat damit eine vergleichsweise performante Lösung.

Wenn du die KID nicht selbst bilden magst/kannst, gibt es noch die Variante, das die KID selbst gebildet wird. Sie arbeitet mit einer temporären Tabelle namens BestImport, weil die KID über ein Unter-SELECT über die Satzanzahl gebildet wird. Und die Sätze müssen erstmal da sein.

Sub ImportTabelleErzeugeKID()
    CurrentDb.Execute _
      "SELECT * INTO BestImport " + _
      "FROM [Text;FMT=Delimited(;);HDR=Yes;DATABASE=D:\Daten;].[CSV.CSV];", dbFailOnError
    CurrentDb.TableDefs.Refresh
    CurrentDb.Execute _
      "INSERT INTO Tab1 ( KID, Name, Adresse ) " + _
      "SELECT (SELECT count(*) FROM Bestimport as B WHERE B.Name<Bestimport.Name)+1, BestImport.Name, BestImport.Adresse " + _
      "FROM BestImport;"
      ', dbFailOnError
    CurrentDb.Execute _
      "INSERT INTO Tab2 ( KID, Bestellnummer ) " + _
      "SELECT (SELECT KID FROM Tab1 WHERE Tab1.Name=BestImport.Name), Bestellnummer " + _
      "FROM BestImport;", dbFailOnError
    CurrentDb.Execute _
      "DROP TABLE BestImport", dbFailOnError

End Sub

Gruß
lorf

PS(nur für mich, damit ich mir das merke):
Wenn man in Tab2 mehrere gleiche Datensätze einfügen will, muss man Duplikate zulassen, sonst gibts eine Schlüsselverletzung.

Ähnliche Themen

Import eines csv Datei
morpheus__85  24.07.2007 - 270 Hits - 1 Antwort

excel import in access
ichhabeinefrage  14.08.2007 - 268 Hits - 2 Antworten

Access, import Access-Tabellen
KRD  02.09.2007 - 265 Hits - 1 Antwort

csv. Datenexport aus Access
Susi2007  14.09.2007 - 307 Hits - 6 Antworten

Probleme beim exportieren von CSV aus Access
Inka2008  29.01.2008 - 215 Hits - 4 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026