Définit le temps imparti avant que le gestionnaire soit déclaré occupé
#include <SQLite.au3>
_SQLite_SetTimeout ( [$hDB = -1 [, $iTimeout = 1000]] )
$hDB | [optionnel] Une base de données ouverte ou -1 pour utiliser la dernière base de données ouverte |
$iTimeout | [optionnel] Temps imparti [msec] |
Succès: | Retourne $SQLITE_OK. |
Échec: | Retourne une valeur qui peut être comparée aux constantes $SQLITE_*. |
@error: | -1 - SQLite a signalé une erreur (Examinez la valeur de retour) 1 - Erreur dans l'appel de l'API SQLite 'sqlite3_busy_timeout' 2 - Appel empêché par SafeMode |
Cette routine crée un gestionnaire d'occupation qui se met en veille pendant un moment quand une table est verrouillée. Le gestionnaire va se mettre en veille plusieurs fois jusqu'à ce que au moins "ms" millisecondes de veille ont été faites. Après "ms" millisecondes de veille, le gestionnaire retourne 0, et par suite sqlite3_exec() retourne $SQLITE_BUSY.
#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); ") ; La table 'test' est occupée maintenant... _SQLite_SetTimeout($hDB_b, 0) $iTimer = TimerInit() $iRval = _SQLite_Exec($hDB_b, "SELECT * FROM test") ; Ceci échouera MsgBox($MB_SYSTEMMODAL, "_SQLite_SetTimeout Example No Timeout", "Time: " & TimerDiff($iTimer) & @CRLF _ & "Error: " & _SQLite_ErrMsg($hDB_b) & @CRLF) _SQLite_SetTimeout($hDB_b, 5000) $iTimer = TimerInit() $iRval = _SQLite_Exec($hDB_b, "SELECT * FROM test") ; Ceci échouera MsgBox($MB_SYSTEMMODAL, "_SQLite_SetTimeout Example 5 Sec Timeout", "Time: " & TimerDiff($iTimer) & @CRLF _ & "Error: " & _SQLite_ErrMsg($hDB_b) & @CRLF) _SQLite_Exec($hDB_a, "END; ") _SQLite_Close($hDB_a) _SQLite_Close($hDB_b) _SQLite_Shutdown() FileDelete($sDatabase)