我在使用 TADOQuery、TADOCommand 或 TADODataSet 设置查询执行超时时遇到问题(我都试过了)。我有一个很小的应用程序,它连接到数据库并定期执行存储过程,结果返回数据集。我的目标是让这个应用程序始终在线,但我的问题是,当连接丢失时,刚刚执行的命令(通过上述组件之一)的超时时间默认为 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
...
非常感谢 :)