Hallo Wissende,
ich betreue ein Access-Makro, in welchem unter anderem eine csv-Datei importiert wird (mit Importspezifikation). Auf das Problem reduziert, gibt es nur zwei Felder:
- Kundennummer (Primärschlüssel)
- Bemerkungen (Text)
In diesem Bemerkungsfeld stehen keine, eine oder mehrere Bemerkungen als Code (stets fünfstellig), also z.B. K0278/O0110/O0120/O0135
Der Slash kommt dabei nur als Trennzeichen vor. Gibt es nur eine Bemerkung, steht im Feld z.B. K0278
Ich möchte nun eine Abfrage machen, die als Ergebnis folgenden Aufbau hat:
- Autowert (Primärschlüssel)
- Kundennummer
- genau ein Bemerkungscode
Je nach dem, ob in der Ursprungstabelle bei diesem Kunden eine Bemerkung stand kommt der Kunde im Ergebnis 0 bis n mal vor.
Aus Excel kenne ich eine Funktion "Split", in diese Richtung könnte es gehen, aber ich weiß nicht, ob man da auch was bei Abfragen mit anfangen kann.
Könnte mich bitte jemand vom Schlauch schieben? VIelen Dank im voraus !
Hans-Jürgen
Hallo,
eine Abfrage ist da wenig sinnvoll. Für Access wird ein normalisierter Tabellenaufbau benötigt. Und das wäre für jeden Bemerkungscode ein Datensatz (wie für die Abfrage angedacht).
Split gibt es auch bei Access und mit dessen Hilfe sollte per VBA aus der CSV jeweils mit AddNew ein neuer Datensatz in einer extra Tabelle erstellt werden. Die CSV sollte dazu nicht importiert sondern nur verlinkt werden (die Spezi kann dazu auch genutzt werden).
Mit einem Makro geht das nicht, es ist VBA zu verwenden.
Zitatich betreue ein Access-Makro,
Ist das wirklich ein Makro oder nicht doch VBA Code.
Makro und VBA sind bei Access 2 verschiedene Dinge.
Hallo Klaus,
vielen Dank und zunächst sorry für die unklare Aussage: Es ist VBA.
In der csv stehen noch mehr Dateien, die ich hier der Übersichtlichkeit halber weggelassen habe. Meine Hoffnung war, dass wir die Tabelle, die aus dem Import gebildet wurde, nutzen können.
Wenn das nicht anders geht, könnte ich im Standard-Import auch das Bemerkungsfeld überspringen und die Bemerkungen separat importieren. Mir fehlt allerdings der Plan, wie ich das mit AddNew am besten anstelle.
Kannst du mir da ein einfaches Muster aufstellen?
Viele Grüße
Hans-Jürgen
Sub beispiel_import()
Dim db As DAO.Database
Dim rsCSV As DAO.Recordset
Dim rsZiel As DAO.Recordset
Dim sArr() As String
Dim i As Long
Set db = CurrentDb
Set rsZiel = db.OpenRecordset("SELECT Kundennummer, BCode FROM Zieltabelle", dbAppendOnly)
With rsZiel
Set rsCSV = db.OpenRecordset("SELECT Kundennummer, BCode" & _
"FROM [Text;NameSpezifikation;FMT=Delimited;HDR=yes;IMEX=2;CharacterSet=850;DATABASE=C:\temp\].[datei01.csv]", _
dbOpenForwardOnly)
Do While Not rsCSV.EOF
sArr = Split(rsCSV!BCode, "/")
For i = 0 To UBound(sArr)
.AddNew
!Kundennummer = rsCSV!Kundennummer
!BCode = sArr(i)
.Update
Next
rsCSV.MoveNext
Loop
.Close
End With
rsCSV.Close
End Sub
wow, Danke! Werde ich morgrn direkt ausprobieren!