ビジーハンドラ用のタイムアウト時間を設定します。
#include <SQLite.au3>
_SQLite_SetTimeout ( [ $hDB = -1 [, $iTimeout = 1000 ]] )
パラメータ
$hDB | [オプション]開かれているデータベース。最後に開かれたデータベースを使用する場合-1を使用 |
$iTimeout | [オプション]タイムアウト時間 [msec] |
返し値
成功: | $SQLITE_OKを返します |
失敗: | $SQLITE_* 定数と比較可能な値を返します |
@error: | -1 - SQLiteがエラーを報告 (返し値を調べてください) |
1 - SQLite API 'sqlite3_busy_timeout'の呼び出しエラー | |
2 - SafeModeによって呼び出しが阻止されました |
注意
このルーチンはテーブルがロックされている際にスリープするビジーハンドラを設定します。ハンドラは少なくとも"ms"ミリ秒の間、スリープします。"ms"ミリ秒のスリープ処理後にハンドラは0を返し、これによってsqlite3_exec()がSQLITE_BUSYを返します。
関連
_SQLite_Query
例
#include <SQLite.au3>
#include <SQLite.dll.au3>
#include <File.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);")
; テーブル 'test' は現在ビジー...
_SQLite_SetTimeout($hDB_b,0)
$iTimer = TimerInit()
$iRval = _SQLite_Exec($hDB_b,"SELECT * FROM test") ; これは失敗する
MsgBox(0,"_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") ; これは失敗する
MsgBox(0,"_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)