Function Reference

_SQLite_SetTimeout

ビジーハンドラ用のタイムアウト時間を設定します。

#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)