TADOQuery、TADOCommand、または TADODataSet でのクエリ実行タイムアウトの設定に問題があります (それぞれで試しました)。データベースに接続し、結果としてデータセットを返すストアド プロシージャを定期的に実行する小さなアプリケーションがあります。私の目的は、このアプリケーションを常にオンラインに保つことですが、私の問題は、接続が失われると、(前述のコンポーネントの 1 つを介して) 実行されたばかりのコマンドのタイムアウトにデフォルトの 30 秒かかることです。私は解決策を探していましたが、何もうまくいきません。 CommandTimeout を 5 秒以上に設定して、自分のタイムアウトを尊重するために ADODB.pas を変更する方法を教えてください。
set DataComponent.Connection.CommandTimeout := 1; のように、これには多くの「解決策」がありました。しかし、実際には何も機能しません。私はD2009、MSSQL2005を使用しており、データコンポーネントとともに接続がスレッドで動的に作成されます。
最後に、私が試したのはこれです
// protected variable owned and created in the thread with its own connection
var Query_Object: TADODataSet;
// connection timeout is set to 3 seconds
Query_Object.Connection.ConnectionTimeout := 3;
...
// this piece of code I'm calling periodically in the only one existing thread
...
SQL_Query := 'EXEC my_procedure_which_returns_dataset'
with Query_Object do
begin
Close;
CommandType := cmdText;
CommandText := SQL_Query;
CommandTimeout := 5; // doesn't affect the timeout
CursorLocation := clUseServer; // let the dataset retreives prepared data
Open;
end;
// and here I need to get faster than in the default 15 seconds to let the user
// know that the reading takes more than mentioned 5 seconds
...
どうもありがとう :)