- Offizieller Beitrag
In den meisten Fällen hat man es wohl nur mit einer offenen Datenbank zu tun.
Wie man vorgeht, wenn es notwendig ist auf mehrere Datenbanken gleichzeitig zuzugreifen, möchte ich mal kurz zeigen. Ein kpl. AutoIt-Bsp. dafür hatte ich nirgendwo finden können.
C
;-- TIME_STAMP 2018-04-17 14:19:28
#include <SQLite.au3>
_SQLite_Startup(@ScriptDir & "\sqlite3.dll", False, 1) ; Dll muss im Skriptordner vorhanden sein
Global $hDB_main ; Handle der (geöffneten) DB
Global $sDB_main = @ScriptDir & '\main.db' ; Pfad der Hauptdatenbank
Global $sDB_attached = @ScriptDir & '\attached.db' ; Pfad der zweiten Datenbank
Global $sAlias = 'attached' ; Alias der zweiten DB
; Öffnen / Erstellen der Hauptdatenbank
$hDB_main = _SQLite_Open($sDB_main)
; Öffnen / Erstellen einer zweiten Datenbank durch Anbinden an die Hauptdatenbank
_SQLite_Exec($hDB_main, StringFormat("ATTACH DATABASE '%s' AS %s", $sDB_attached, $sAlias))
; ============================== Zugriffe auf die Hauptdatenbank normal über das DB-Handle (oder -1)
; Erstellen einer Tabelle in der Haupt-DB
Global $sSQL = _
"CREATE TABLE IF NOT EXISTS test1 (" & _
"name TEXT," & _
"vorname TEXT," & _
"strasse TEXT," & _
"nr TEXT," & _
"plz TEXT," & _
"ort TEXT);"
_SQLite_Exec($hDB_main, $sSQL)
; Einfügen von Daten
$sSQL = _
"INSERT INTO test1 VALUES ('Meier','Hans','Mustergasse','15','01234','Musterhausen');" & _
"INSERT INTO test1 VALUES ('Müller','Veronika','Kuhgasse','3','56789','Rindsdorf');" & _
"INSERT INTO test1 VALUES ('Schuhmann','Dirk','Forstweg','8','32457','Walddorf');"
_SQLite_Exec($hDB_main, $sSQL)
; ============================================ Zugriffe auf die zweite DB durch vorangesetzten Alias
$sSQL = _
StringFormat("CREATE TABLE IF NOT EXISTS %s.test2 (", $sAlias) & _
"name TEXT," & _
"vorname TEXT);"
_SQLite_Exec($hDB_main, $sSQL)
; Einfügen von Daten
$sSQL = _
StringFormat("INSERT INTO %s.test2 VALUES ('Krüger','Doris');", $sAlias) & _
StringFormat("INSERT INTO %s.test2 VALUES ('Lehmann','Gerrit');", $sAlias) & _
StringFormat("INSERT INTO %s.test2 VALUES ('Böttcher','Klaus');", $sAlias)
_SQLite_Exec($hDB_main, $sSQL)
; =============================================================================== Abfragen von Daten
Global $aQuery, $hQuery, $sResult = ''
; Hauptdatenbank
_SQlite_Query ($hDB_main, "SELECT name FROM test1 WHERE name LIKE 'M%';", $hQuery)
While _SQLite_FetchData ($hQuery, $aQuery, False, False) = $SQLITE_OK
$sResult &= $aQuery[0] & @CRLF
WEnd
_SQLite_QueryFinalize($hQuery)
ConsoleWrite('name LIKE M%:' & @CRLF & $sResult & @CRLF)
; zweite Datenbank
$sResult = ''
_SQlite_Query ($hDB_main, StringFormat("SELECT vorname FROM %s.test2 WHERE name = 'Lehmann';", $sAlias), $hQuery)
While _SQLite_FetchData ($hQuery, $aQuery, False, False) = $SQLITE_OK
$sResult &= $aQuery[0] & @CRLF
WEnd
_SQLite_QueryFinalize($hQuery)
ConsoleWrite('vorname "Lehmann":' & @TAB & $sResult & @CRLF)
; ========================================================= Daten aus Haupt-DB in zweite DB einfügen
$sSQL = StringFormat("INSERT INTO %s.test2 SELECT name, vorname FROM test1;", $sAlias)
_SQLite_Exec($hDB_main, $sSQL)
; Inhalt der zweiten DB ausgeben
Global $aResult, $iRows, $iColumns
If _SQLite_GetTable2d($hDB_main, StringFormat("SELECT * FROM %s.test2;", $sAlias), $aResult, $iRows, $iColumns) = $SQLITE_OK Then
_SQLite_Display2DResult($aResult)
EndIf
; ========================================================================================== Beenden
_SQLite_Close($hDB_main)
_SQLite_Shutdown()
#cs
Eine mit ATTACH angebundene DB lässt sich mit DETACH wieder lösen:
_SQLite_Exec($hDB, "DETACH DATABASE sAlias;")
Es können gleichzeitig bis zum Wert von SQLITE_LIMIT_ATTACHED Datenbanken angebunden werden (Standardwert ist 7).
#ce
Alles anzeigen