none
Access 2016 - csv auslesen, bestimmte Spalte in neue/vorhandene Tabelle per VBA

    Frage

  • Guten Tag Zusammen,

     

    ich bin eher ein VBA Neuling und versuche mich gerade durch MS Access zu hangeln. Ich hoffe mir kann hier jemand den richtigen weg weisen beziehungsweise mich auf die richtige Idee bringen :)

    Folgendes Szenario:

    1 Access Datenbank, dort soll eine CSV eingelesen werden, diese verfügt über mehrere Spalten, wobei ich nur die Einträge von 2 Spalten benötige, diese sind am Spaltennamen eindeutig identifizierbar.

    Nach dem Einlesen, sollen die Datensätze in eine neue Tabelle, oder falls die Tabelle bereits vorhanden ist in diese eingefügt werden.

    Die Tabelle im Access ist dabei wie folgt aufgebaut:

    Titel / FW01 / FW02... / Gesamt

    Die CSV soll jede Woche eingelesen werden, beziehungsweise jede Woche eine neue. Dabei sind nicht immer alle "Titel" vorhanden und es können auch neue hinzukommen. Das heißt also es muss geprüft werden, ob der Titel bereits vorhanden ist, wenn ja wird in diese Zeile geschrieben, wenn nicht wird eine neue Zeile hinzugefügt.

    Dann die Spalten: FW01 für die erste Woche FW02 für die 2. und so weiter. Diese sollen angelegt werden und die Daten des entsprechenden "Titel" aus der CSV eingetragen werden.

     Das klingt alles Kompliziert, ist es auch.


    Bis jetzt sieht es so aus: Ich lasse den Nutzer den Pfad der CSV bestimmen, die FW angeben und FY und das Quarter. Danach soll das ganze per Knopfdruck eingelesen werden. Soweit mein Code:

    Private Sub Befehl11_Click()
     
    Dim iYT_path As String
    Dim iOO_path As String
    Dim iFW As Integer
    Dim iFY As Integer
    Dim iQuarter As String
    Dim tmpString As String
    Dim TablenameYT As String
    Dim TablenameOO As String
     
    '< set variables>
    iYT_path = YT_RAW.Value
    iOO_path = OOYALA_RAW.Value
    iFW = FW.Value
    iFY = FY.Value
    iQuarter = Quarter.Value
    ' Set Tablename for YT and OO
    TablenameYT = iFY + "YT"
    TablenameOO = iFY + "OO"
    ' Read Youtube CSV and copy to YT_FW Table
    f = FreeFile
    Open iYT_path For Input As f
    Do While Not EOF(f)
    Line Input #f, TextZeile
                Rows = Rows + 1
                If Rows = 1 Then
                    
     
     
    End Sub

    Wie gesagt wäre ein Hinweis, wie ich da am besten verfahre sehr hilfreich :)

     

    Grüße und schonmal vielen Dank,

    David


    Mittwoch, 16. Dezember 2015 09:49

Alle Antworten

  • Hallo David,

    zunächst würde ich die Aufgabe einmal in kleiner Teilaufgaben zerlegen, so kannst Du jede Teilaufgabe besser auf Fehler prüfen.

    Fangen wir einmal mit dem CSV-Import an.

    Hier würde ich zunächst einmal überlegen, ob die CSV-Datei per VBA-Code eingelesen werden muss, oder obnicht besser  die von Access bereitgestellten Mittel genutzt werden können.

    Access kann entweder ein CSV Datei direkt importieren und daraus ein neue Tabelle erstellen, oder die CSV Datei als Tabellenverknüpfung ablegen. Die Verknüpfung kann wie eine normale Tabelle angesprochen werden.

    Erst wenn das aus irgend einem Grund  nicht möglich ist würde ich mit dem Import per VBA beginnnen.

    Kennst Du Dich im Access so weit aus um diese Schritte durchzuführen?

    Kleiner Tipp "Externe Daten" -> "textdatei"

    Wenn Du das geschafft hast oder weitere Fragen hast, melde Dich wieder.

    Grüße

    Roland

    Mittwoch, 16. Dezember 2015 11:06
  • Zusätzlich zu dem von Roland vorgeschlagenen Zerlegen in Teilaufgabe solltest Du Dir Gedanken um das Datenmodell machen.

    An eine Access-Tabelle bei jedem Import neue Spalten anzufügen ist eine denkbar schlechte Idee. Auch die Spalte Gesamt lässt darauf schließen, dass Du für Datenbanken noch nicht das richtige Verständnis hast.

    Berechnungen gehören nicht in die Tabelle sondern werden zu Laufzeit erledigt.

    Gruß Maik

    Freitag, 18. Dezember 2015 13:09
  • Hallo David,

    als Ergänzung zu Rolands Antwort:

    Wenn Du die CSV-Datei verknüpfst, kannst Du eine Importspezifikation erstellen. Dort kannst Du unter anderem die spalten ausblenden, die Dich nicht interessieren.

    CU


    Thomas@Team-Moeller.de
    Blog: Blog.Team-Moeller.de
    Homepage: www.Team-Moeller.de


    Samstag, 19. Dezember 2015 09:14
  • Erstmal Danke für die Antworten, schön Hilfe zu finden :)

    Also manuelles Importieren klappt natürlich problemlos, auch Spalten die ich nicht benötige habe ich herausfiltern können. Die Importspezifikation habe ich auch abgespeichert.

    Der Ansatz ist auch glaube ich wirklich besser. Auch wenn ich nun jede Woche eine neue CSV manuell einlesen muss.

    Meine Überlegung:

    Die CSV einlesen und die Tabelle dann in eine vorhandene Kopieren, Natürlich nur die aktualisierten Daten. Das soll einfach dazu dienen, dass ich am Ende des Jahres nicht 52 Tabellen in der DB habe.

    Der nächste Schritt sollte nun sein, per Button Klick diese "Rohdaten" in die Haupttabelle einzutragen. Dort dann natürlich in die Spalte der bestimmten Woche und der Zeile des bestimmten Videos. Da in den Rohdaten, nicht immer alle Videos vorhanden sind, sondern nur die, welche auch Aufgerufen wurden, muss ich Rohdaten mit vorhanden vergleichen. Wie gehe ich nun da am besten vor? Beziehungsweise macht es überhaupt sinn so anzusetzen?

    Eine Verknüpfung macht glaube ich wenig sinn, da sich die CSV nicht ändert sondern jede Woche eine neue CSV vorhanden ist.

    Am besten ich erkläre nochmal genau, was es eigentlich werden soll. Am Ende soll eine Tabelle herauskommen in der die Aufrufe von Videos pro Woche sichtbar sind und die Aufrufe im gesamten Fiscaljahr, beziehungsweise des aktuellen Jahres bis zum aktuellen Datum. Zusätzlich natürlich noch die Aufrufe der einzelnen Quartale.

    Grüße,

    David

    Montag, 21. Dezember 2015 09:52