VBA-Script um Daten von CSV nach Access zu importieren

  • Sonstige

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von peterfido.

    VBA-Script um Daten von CSV nach Access zu importieren

    hallo leute und guten morgen (naja oder eher schon fast mahlzeit..)

    ich bin gerade dabei ein vba-modul zu schreiben, mit dem automatisch daten aus einer csv datei in eine tabelle von einer access db importiert werden sollen.
    ich bin auch schon nach langen suchen so weit, das ich die csv datei zeile für zeile auslesen kann und den zeileninhalt jeweils auf einer variable abspeichere.
    die access db kann ich auch öffnen.
    aber wenn es dann darum geht die betreffende tabelle zu öffnen und die daten hinein zu schreiben, dann hauts mich leider raus...
    das öffnen geht zwar aber die daten bekomme ich nicht rein.
    ich such schon seit einiger zeit den richtigen befehl, finde aber leider nichts
    da ich noch nicht wirklich viel erfahrung mit vba habe, würde ich ganz gern einen hinweiss bekommen, woran es bei meiner routine hakt

    Visual Basic-Quellcode

    1. Sub Import()
    2. Dim inhalt
    3. Close #1
    4. Open "c:\Test.csv" For Input As #1
    5. While Not EOF(1)
    6. Line Input #1, dummy
    7. inhalt = Split(dummy, ";")
    8. Open "c:\Test.mdb" For Random As #2
    9. DoCmd.OpenTable "Testtabelle", acAdd
    10. <hier fehlt mir der befehl zum reinschreiben der daten in die tabelle>
    11. Wend
    12. Close #1
    13. End Sub



    Edit by LaMa5: Bitte den [ VB ] Tag benutzen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „LaMa5“ ()

    Du öffnest bei jedem Wert die Datenbank neu, ohne sie vorher zu schließen.

    Ansonsten kann ich ja mal nen Datenbankhandling meines MP3-Players posten.

    Vielleicht sind ja ein paar anregungen bei.VB

    Visual Basic-Quellcode

    1. Option Explicit
    2. ' Pfad+Name der Datenbank
    3. Global dbFile As String
    4. ' Datenbank-Objekt-Variable
    5. Global Db As Database
    6. ' Tabellen-Objekt
    7. Global Tabelle As Recordset
    8. Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    9. Public Type Lied
    10. Pfad As String
    11. DateiName As String
    12. Interpret As String
    13. Titel As String
    14. Zaehler As Long
    15. Nummer As Long
    16. Laenge As Long
    17. Jahr As Long
    18. Hinzu As Date
    19. Suche As String
    20. End Type
    21. Public Sub dbErstellen()
    22. Set Db = Workspaces(0).CreateDatabase(dbFile, _
    23. dbLangGeneral, dbVersion30)
    24. End Sub
    25. Public Function dbGesamt() As Long
    26. dbGesamt = Db.TableDefs("Lieder").RecordCount
    27. End Function
    28. Public Sub TabelleErstellen()
    29. 'dbFile = App.Path + DatenBank
    30. 'Set DB = Workspaces(0).CreateDatabase(dbFile, dbLangGeneral, dbVersion30)
    31. 'Set DB = DBEngine.CreateDatabase(dbFile, dbLangGeneral & ";pwd=" & s, dbEncrypt)
    32. Dim tbLieder As New TableDef
    33. Dim Feld As New Field
    34. tbLieder.name = "Lieder"
    35. 'Datenfeld #0
    36. Feld.name = "LiedNr"
    37. Feld.Type = dbLong
    38. Feld.Attributes = dbAutoIncrField
    39. tbLieder.Fields.Append Feld
    40. Set Feld = Nothing
    41. 'Datenfeld #1
    42. Feld.name = "DateiName"
    43. Feld.Type = dbText
    44. Feld.Size = 250
    45. Feld.AllowZeroLength = True
    46. tbLieder.Fields.Append Feld
    47. Set Feld = Nothing
    48. 'Datenfeld #2
    49. Feld.name = "Zähler"
    50. Feld.Type = dbLong
    51. 'Feld.Size = 20
    52. 'Feld.AllowZeroLength = True
    53. tbLieder.Fields.Append Feld
    54. Set Feld = Nothing
    55. Db.TableDefs.Append tbLieder
    56. 'Db.Close
    57. End Sub
    58. ' Datenbank öffnen
    59. ' Tabelle "Adressen" öffnen
    60. Public Sub dbOeffnen()
    61. Set Db = Workspaces(0).OpenDatabase(dbFile, _
    62. False, False)
    63. Set Tabelle = Db.OpenRecordset("Lieder")
    64. End Sub
    65. ' Datenbank schließen
    66. Public Sub dbSchliessen()
    67. On Local Error Resume Next
    68. If Not Tabelle Is Nothing Then Tabelle.Close
    69. If Not Db Is Nothing Then Db.Close
    70. Set Tabelle = Nothing
    71. Set Db = Nothing
    72. End Sub
    73. Sub Zählerhoch(ByVal DateiName As String)
    74. Dim Wert As Long
    75. If Trim(DateiName) = "" Then
    76. Exit Sub
    77. End If
    78. If Not SchonVorhanden(DateiName) Then
    79. 'dbOeffnen
    80. Tabelle.AddNew
    81. Tabelle(1) = DateiName
    82. Tabelle(2) = 1
    83. Tabelle.Update
    84. Log ("Zähler " & DateiName & ": 1")
    85. 'dbSchliessen
    86. Else
    87. Tabelle.index = "Name"
    88. 'Suchen
    89. Tabelle.Seek "=", DateiName
    90. Tabelle.Edit
    91. Wert = Tabelle(2)
    92. Wert = Wert + 1
    93. Log ("Zähler " & DateiName & Str(Wert))
    94. Tabelle(2) = Wert
    95. Tabelle.Update
    96. End If
    97. End Sub
    98. Sub Zählerrunter(ByVal DateiName As String)
    99. Dim Wert As Long
    100. If Trim(DateiName) = "" Then
    101. Exit Sub
    102. End If
    103. If Not SchonVorhanden(DateiName) Then
    104. Exit Sub
    105. Else
    106. Tabelle.index = "Name"
    107. 'Suchen
    108. Tabelle.Seek "=", DateiName
    109. Tabelle.Edit
    110. Wert = Tabelle(2)
    111. Wert = Wert - 1
    112. If Wert < 0 Then
    113. Wert = 0
    114. End If
    115. Log ("Zähler " & DateiName & Str(Wert))
    116. Tabelle(2) = Wert
    117. Tabelle.Update
    118. End If
    119. End Sub
    120. Private Function SchonVorhanden(ByVal Suche As String) As Boolean
    121. Static SuchText As String
    122. Static sIndex As Integer
    123. Dim Result As Boolean
    124. Dim CurRec As String
    125. Dim CurIdx As String
    126. Dim Feld As String
    127. 'Suchvorgang starten
    128. 'aktuellen Datensatz merken
    129. GetBookmark Tabelle, CurRec, CurIdx
    130. 'Index setzen
    131. Tabelle.index = "Name"
    132. 'Suchen
    133. Tabelle.Seek "=", Suche
    134. Result = (Not Tabelle.NoMatch)
    135. 'Such-Auswertung
    136. If Result Then
    137. SchonVorhanden = True
    138. Else
    139. SchonVorhanden = False
    140. 'Datensatzzeiger auf ursprünglichen Datensatz zurücksetzen
    141. SetBookmark Tabelle, CurRec, CurIdx
    142. End If
    143. End Function
    144. Sub FavoritenListeErstellen()
    145. Static SuchText As String
    146. Static sIndex As Integer
    147. Dim Result As Boolean
    148. Dim CurRec As String
    149. Dim CurIdx As String
    150. Dim Feld As String
    151. 'Suchvorgang starten
    152. 'aktuellen Datensatz merken
    153. GetBookmark Tabelle, CurRec, CurIdx
    154. 'Index setzen
    155. Tabelle.index = "Zähler"
    156. Tabelle.MoveFirst
    157. Nächster:
    158. If Not Trim(Tabelle(1)) = "" Then
    159. Form1.List3.AddItem Tabelle(1)
    160. End If
    161. Log ("Favorit: " & Tabelle(1) & "Z: " & Tabelle(2))
    162. If CanMoveNext(Tabelle) And Form1.List3.ListCount < 250 Then
    163. Tabelle.MoveNext
    164. GoTo Nächster
    165. End If
    166. 'Datensatzzeiger auf ursprünglichen Datensatz zurücksetzen
    167. SetBookmark Tabelle, CurRec, CurIdx
    168. End Sub
    169. Public Function ZählerLesen(ByVal DateiName As String) As Long
    170. Static SuchText As String
    171. Static sIndex As Integer
    172. Dim Result As Boolean
    173. Dim CurRec As String
    174. Dim CurIdx As String
    175. Dim Feld As String
    176. 'Suchvorgang starten
    177. 'Index setzen
    178. Tabelle.index = "Name"
    179. Tabelle.Seek "=", DateiName
    180. Result = (Not Tabelle.NoMatch)
    181. '
    182. 'Such-Auswertung
    183. If Result Then
    184. ZählerLesen = Tabelle(2)
    185. Else
    186. ZählerLesen = 0
    187. End If
    188. End Function

    Visual Basic-Quellcode

    1. Public Sub EintragLöschen(ByVal DateiName As String)
    2. Static SuchText As String
    3. Static sIndex As Integer
    4. Dim Result As Boolean
    5. Dim CurRec As String
    6. Dim CurIdx As String
    7. Dim Feld As String
    8. 'Suchvorgang starten
    9. 'Index setzen
    10. Tabelle.index = "Name"
    11. Tabelle.Seek "=", DateiName
    12. Result = (Not Tabelle.NoMatch)
    13. '
    14. 'Such-Auswertung
    15. If Result Then
    16. Tabelle.Delete
    17. If Tabelle.RecordCount > 0 Then
    18. If Not Tabelle.EOF Then
    19. Tabelle.MoveNext
    20. Else
    21. Tabelle.MoveLast
    22. End If
    23. End If
    24. End If
    25. End Sub
    26. Public Sub GetBookmark(Tabelle As Recordset, _
    27. CurRec As String, CurIdx As String)
    28. '
    29. '*** Datensatz-Zeiger merken ***
    30. '
    31. On Local Error Resume Next
    32. CurIdx = Tabelle.index
    33. CurRec = Tabelle.Bookmark
    34. If Err Then CurRec = ""
    35. On Local Error GoTo 0
    36. End Sub
    37. Public Function SetBookmark(Tabelle As Recordset, _
    38. CurRec As String, CurIdx As String) As Integer
    39. '
    40. '*** Datensatz-Zeiger zurücksetzen ***
    41. '
    42. Dim Result As Integer
    43. On Local Error Resume Next
    44. Result = True
    45. Tabelle.index = CurIdx
    46. If CurRec <> "" Then
    47. Tabelle.Bookmark = CurRec
    48. If Err <> 0 Then Result = False
    49. Else
    50. Tabelle.MoveLast
    51. Tabelle.MoveNext
    52. End If
    53. On Local Error GoTo 0
    54. SetBookmark = Result
    55. End Function
    56. ' Indexes erstellen
    57. Public Sub IndexesErstellen()
    58. Dim index As New index
    59. Dim antwort As Integer
    60. Dim TabWasOpen As Boolean
    61. ' Falls Tabelle geöffnet -> Hinweis und ggf. schliessen
    62. TabWasOpen = False
    63. If Not Tabelle Is Nothing Then
    64. TabWasOpen = True
    65. Tabelle.Close
    66. End If
    67. ' Fehlerbehandlung einschalten
    68. ' (falls Indexes bereits existieren!)
    69. ' On Local Error GoTo IndexCreate_Error
    70. ' LfNr (PrimaryKey)
    71. index.name = "Nr"
    72. index.Primary = True
    73. index.Unique = True
    74. index.Fields = "LiedNr"
    75. 'Hinzufügen zur Indexes-Auflistung
    76. Db.TableDefs("Lieder").Indexes.Append index
    77. Set index = Nothing
    78. ' Name
    79. index.name = "Name"
    80. index.Primary = False
    81. index.Unique = False
    82. index.Fields = "DateiName"
    83. 'Hinzufügen zur Indexes-Auflistung
    84. Db.TableDefs("Lieder").Indexes.Append index
    85. Set index = Nothing
    86. ' Name
    87. index.name = "Zähler"
    88. index.Primary = False
    89. index.Unique = False
    90. index.Fields = "Zähler"
    91. 'Hinzufügen zur Indexes-Auflistung
    92. Db.TableDefs("Lieder").Indexes.Append index
    93. Set index = Nothing
    94. ' Falls Tabelle geöffnet war, jetzt wieder öffnen
    95. Set Tabelle = Db.OpenRecordset("Lieder")
    96. ' Fehlerbehandlung wieder ausschalten
    97. On Local Error GoTo 0
    98. Exit Sub
    99. IndexCreate_Error:
    100. If Err.Number = 3283 Or Err.Number = 3284 Then
    101. ' Index existiert bereits -> ignorieren
    102. Resume Next
    103. Else
    104. ' sonstiger Fehler -> Meldung anzeigen
    105. antwort = MsgBox("Fehler " & Err.Number & vbCrLf & Err.Description & vbCrLf & vbCrLf & "...beim Erstellen der Indexes", vbAbortRetryIgnore + vbCritical, "Fehler")
    106. If antwort = 4 Then Resume 0
    107. If antwort = 5 Then Resume Next
    108. Exit Sub
    109. End If
    110. End Sub
    111. Public Function FeldInhalt(Feld As Field) As Variant
    112. If IsNull(Feld.Value) Then
    113. If Feld.Type = dbInteger Or Feld.Type = dbLong Then
    114. FeldInhalt = 0
    115. ElseIf Feld.Type = dbBoolean Then
    116. FeldInhalt = False
    117. Else
    118. FeldInhalt = ""
    119. End If
    120. Else
    121. FeldInhalt = Feld.Value
    122. End If
    123. End Function
    124. ' Prüfen, ob vorwärtsgeblättert werden kann
    125. Public Function CanMoveNext(Tabelle As Recordset) As Boolean
    126. CanMoveNext = False
    127. If Tabelle.RecordCount > 0 Then
    128. On Local Error Resume Next
    129. Tabelle.MoveNext
    130. CanMoveNext = (Not Tabelle.EOF And Err = 0)
    131. Tabelle.MovePrevious
    132. On Local Error GoTo 0
    133. End If
    134. End Function
    135. ' Prüfen, ob zurückgeblättert werden kann
    136. Public Function CanMovePrevious(Tabelle As Recordset) As Boolean
    137. CanMovePrevious = False
    138. If Tabelle.RecordCount > 0 Then
    139. On Local Error Resume Next
    140. Tabelle.MovePrevious
    141. CanMovePrevious = (Not Tabelle.BOF And Err = 0)
    142. Tabelle.MoveNext
    143. On Local Error GoTo 0
    144. End If
    145. End Function



    Edit by LaMa5: VB Tag korrigiert
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „LaMa5“ ()