Funktionreferenz


_SQLite_SetTimeout

Beschreibung anzeigen in

Setzt einen Timeout für beschäftigte Prüfroutinen

#include <SQLite.au3>
_SQLite_SetTimeout ( [$hDB = -1 [, $iTimeout = 1000]] )

Parameter

$hDB [optional] Eine offene Datenbank, mit -1 wird die zuletzt geöffnete Datenbank verwendet
$iTimeout [optional] Timeout [msec]

Rückgabewert

Erfolg: $SQLITE_OK
Fehler: eine Variable welche mit $SQLITE_* Konstanten verglichen werden kann
@error: -1 - SQLite gibt einen Fehler zurück (Prüfe den Rückgabewert)
1 - Der Aufruf der SQLite API war fehlerhaft 'sqlite3_busy_timeout'
2 - Aufruf durch den Sicherheitsmodus verhindert

Bemerkungen

Die SQLite-Dateien können von https://www.autoitscript.com/autoit3/pkgmgr/sqlite heruntergeladen werden. Abgespeichert können diese in @ScriptDir, @SystemDir, @WindowsDir oder @WorkingDir werden.

Diese Routine setzt eine beschäftigte Prüfroutine die eine Weile anhält, wenn eine Tabelle geschlossen wird. Die Prüfroutine wird mehrfach ruhen, mindestens solange bis eine vorgegebene Zeit von "ms" Millisekunden abgelaufen ist. Anschließend gibt er den Wert 0 zurück, was die Funktion sqlite3_exec() dazu veranlasst $SQLITE_BUSY zurückzugeben.

Verwandte Funktionen

_SQLite_Query

Beispiel

#include <File.au3>
#include <MsgBoxConstants.au3>
#include <SQLite.au3>
#include <SQLite.dll.au3>

_SQLite_Startup()
ConsoleWrite("_SQLite_LibVersion=" & _SQLite_LibVersion() & @CRLF)

Local $sDatabase, $hDB_a, $hDB_b, $iTimer, $iRval
$sDatabase = _TempFile()
$hDB_a = _SQLite_Open($sDatabase)
$hDB_b = _SQLite_Open($sDatabase)

_SQLite_Exec($hDB_a, "BEGIN EXCLUSIVE;")
_SQLite_Exec($hDB_a, "CREATE TABLE Test (a,b,c);")
_SQLite_Exec($hDB_a, "INSERT INTO Test VALUES (1,2,3);")
; Tabelle 'Test' ist jetzt beschäftigt...

_SQLite_SetTimeout($hDB_b, 0)
$iTimer = TimerInit()
$iRval = _SQLite_Exec($hDB_b, "SELECT * FROM Test") ; Das wird fehlschlagen!
MsgBox($MB_SYSTEMMODAL, "_SQLite_SetTimeout: Beispiel ohne Timeout", "Zeit: " & TimerDiff($iTimer) & @CRLF _
         & "Fehler: " & _SQLite_ErrMsg($hDB_b) & @CRLF)
_SQLite_SetTimeout($hDB_b, 5000)
$iTimer = TimerInit()
$iRval = _SQLite_Exec($hDB_b, "SELECT * FROM test") ; Das wird fehlschlagen!
MsgBox($MB_SYSTEMMODAL, "_SQLite_SetTimeout: Beispiel mit 5s Timeout", "Zeit: " & TimerDiff($iTimer) & @CRLF _
         & "Fehler: " & _SQLite_ErrMsg($hDB_b) & @CRLF)
_SQLite_Exec($hDB_a, "END;")
_SQLite_Close($hDB_a)
_SQLite_Close($hDB_b)
_SQLite_Shutdown()
FileDelete($sDatabase)