VBA Access - Datenbanktabellen per sql script erstellen

FrankBooth

Erfahrenes Mitglied
Hallo,

leider bin ich zu diesem Thema bisher nicht fündig geworden. Daher hier meine Frage. Ich möchte eine komplette Datenbankstruktur in Access über ein sql script und VBA erstellen.

Ich möchte also ein VBA Script, das ein sql script aufruft und ausführt und dann Tabellen, Spalten, Indices, Constrains usw erstellt.

Ist das möglich?
Mir ist klar, dass ich die sqls einfach in das VBA Script packen kann, das will ich aber nicht. Das SQL script wird automatisiert erstellt, daher soll es einfach aus VBA aufgerufen werden.

Danke im Voraus.

Viele Grüße
Frank
 

Yaslaw

n/a
Moderator
Du kannst meines Wissens nach in VBA nur ein Script auf einmal mittels currentdb.execute() ausführen. Ergo muss dien Code dein SQL-Fiele soweit zerlegen dass du eines nach dem anderen abarbeitest.

- Scriptdatei einlesen (über das FileSystemObject ists am einfachsten)
- Script in einzelne SQL-Stetements zerlegen (Reguläre Ausdrücke könnten da helfen)
- Die einzelnen Statements ausführen (mittels currentdb.execute())
 

Yaslaw

n/a
Moderator
Wennd ein File natürlich ein wenig strukturiert ist, macht es das viel einfacher.

- Jedes SQL endet mit ;
- Nach einem ; kommt in der Zeile nix mehr
- Kommentare stehen auf eigenden Zeilen
- Die Kommentare beginnen immer mit --
etc.

Sowas lässt sich viel einfacher zerlegen

Mit den oben genannten Regeln habe ich dir kurz was zusammengestellt (Habs aus einem meiner Programme geklaut und kurz angepasst)
Visual Basic:
Dim slqBuffer() As String
Dim trimLine    As String
dim sql         AS String
Dim fso         As New FileSytemObject
Dim stream      As TextStream

Set stream = fso.OpenTextFile(iPath, ForReading)

Do Until stream.AtEndOfStream
    line = stream.ReadLine
    trimLine = Trim(line)
    If Len(trimLine) = 0 Then
        'Leere Ziele
        'ignorieren
    ElseIf Left(trimLine, 2) = "--" Then
        'Kommentarzeile
        'ignorieren
    ElseIf Right(trimLine, 1) = ";" Then
        'sql-Statement ist Ende. 
        'Zeile noch hinzufügen
        Call pushArray(slqBuffer, line)
        'sql zusammensetzen
        sql = join(slqBuffer, vbCrLf)
        'und ausführen
        CurrentDb.execute(sql)
        'und mein Buffer wieder leeren
        Erase slqBuffer
    Else
        'Zeile zu meinem Buffer hinzufügen
        'pushArray: http://wiki.yaslaw.info/wikka/VbVbaArrayFunctions
        'Kann natürlch auch anderst gelösst werden - jedoch sind VBA-Arrays nur mässig bequem ohne Zusatzfunktionen
        Call pushArray(slqBuffer, line)
    End If
Loop

Call stream.close
Set stream = Nothing
Set fso = Nothing