SQL-Script von Aussen

Hallo,

kann ich ohne große Umstände eine *.sql gegen eine AccessDB laufen lassen? Es ist mir nämlich zu doof meine Anweisungen (x create table, alter table, inserts usw.) einzeln in jeweils eine „Abfrage“ zu packen und dann jede einzeln auszuführen. Von VBA aus vielleicht oder per Kommandozeile?

Grüße
Kroeger

Hallo,

von VBA aus kannst Du mit

DoCmd.RunSQL „SQL-Anweisung“

die Anweisungen ausführen.

ujk

Hallo ujk,

vielen Dank für deine Antwort, leider ist das nicht was ich suche, was du schreibst ist mir bekannt, bringt aber nichts, da:

  • jeweils ein RunSQL nur eine Anweisung (also nur ein Create oder Select oder oder oder akzeptiert)
  • ich erst den String auf eine Zeile bringen muss oder aber noch Listenverkettungszeichen (hier gleich zwei bzw. sogar drei: " _ &amp:wink: einfügen muss.

Das ist am Ende genauso ineffizient wie das Anlegen einer „Abfrage“ und einzelne einfügen des jeweiligen SQL-Strings.

Nochmal zum Verständnis, ich hab eine Datei.SQL in der liegen nacheinander mehrere SQL-Anweisungen, die will ich nich auseinandernehmen, nich wenn ich nich muss.

Viele Grüße
Kroeger

Hallo,

hier ein Beispiel, in dem ich eine Datei einlese und Zeile für Zeile abarbeite (sowie den Input zurechtschneide und noch ein fehlendes Feld im String ergänze). Nur so zur Anregung. Dateinahme ist im Feld Text1 zwischengespeichert.

Dim stInput As String
Dim stVergleich As String
Dim intZähler As Integer
Dim stQuelle As String

If Me![Text1] = „“ Or IsNull(Me![Text1]) = True Then
MsgBox („Bitte wählen Sie zuerst eine gültige Importdatei aus!“)
Exit Sub
Else
stQuelle = Me![Text1]
End If

stVergleich = Chr$(34)

If Dir(stQuelle) = „“ Or IsNull(stQuelle) Then
MsgBox („Datei konnte nicht gefunden werden!!“)
Exit Sub
Else
'Nichts tun
End If

Open stQuelle For Input As #1 'Speicherort der SQL-Datei

DoCmd.SetWarnings False

Do While Not EOF(1)
Line Input #1, stInput
intZähler = InStr(stInput, stVergleich)
stInput = Right(stInput, (Len(stInput) - intZähler)) 'Schneidet alles links inklusive Anführungszeichen ab
intZähler = InStr(stInput, stVergleich)
stInput = Left(stInput, (intZähler - 1)) 'Schneidet alles rechts inklusive Anführungszeichen ab
stInput = Left(stInput, (Len(stInput) - 2))
stInput = stInput & „,NULL);“
DoCmd.RunSQL stInput
Loop

DoCmd.SetWarnings True

Close #1

1 Like

Hallo nochmal ujk,

du meinst, wenns kein anderer tut machs halt selbst? Ist nat. ne Möglichkeit. Dank dir jedenfalls.

Grüße
Kroeger