Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Split durchführen?

Begonnen von hajott, Mai 23, 2023, 16:50:01

⏪ vorheriges - nächstes ⏩

hajott

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

MzKlMu

#1
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.
Gruß Klaus

hajott

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

ebs17

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

Mit freundlichem Glück Auf!

Eberhard

hajott

wow, Danke! Werde ich morgrn direkt ausprobieren!