gpt4 book ai didi

德尔福 : Globally change ADO command timeout

转载 作者:行者123 更新时间:2023-12-03 18:28:56 26 4
gpt4 key购买 nike

我们有一个巨大的 Delphi 2005 应用程序,其中包含大量的 ADO 组件(TADODataset、TADOStoredPROc、TADOCommand...),分布在数百个表单上。它们都连接到一个单一的 TADOConnection。

这些组件中的大多数将其 CommandTimeout 属性设置为默认值 (30 秒),但少数将其设置为 5 分钟 (300 秒),有些设置为永不超时 (0 秒)。

我希望能够为应用程序范围内的所有 ADO 组件全局更改此设置。我更喜欢在运行时以编程方式执行此操作,以便在需要时可以在每个安装的基础上调整超时。

我希望当创建/附加 ADO 组件时,我可以在连接上找到一个全局事件,我可以在其中调整命令超时,或者破解我的方法来将我的代码注入(inject)组件本身,但出现空白。

我不想创建后代,因为我必须搜索/替换所有组件,如果我忘记使用后代而不是常规 ADO 组件,我的超时将不会跟随应用程序的其余部分。

任何人都知道我们怎么能做到这一点?

最佳答案

如果所有 ADO 组件都放在一个窗体上,则可以使用 Screen.Forms 和 Screen.FormCount 属性遍历所有窗体。对于每个表单,迭代其 ComponentCount/Components 属性并检查 TADOCommand、TADODataSet、TADOQuery、TADOStoredProc 和 TADOTable。然后,您可以根据需要设置超时。当然,如果您动态创建表单,则必须单独考虑这一点。

以下代码可以指导您。

procedure SetADOTimeout(ATimeout: Integer);
var
cmp: TComponent;
frm: TForm;
I: Integer;
J: Integer;
begin
for I := 0 to Screen.FormCount - 1 do begin
frm := Screen.Forms[I];
for J := 0 to frm.ComponentCount - 1 do begin
cmp := frm.Components[J];
if cmp is TADOCommand then
TADOCommand(cmp).CommandTimeout := ATimeout
else if cmp is TADODataSet then
TADODataSet(cmp).CommandTimeout := ATimeout
else if cmp is TADOQuery then
TADOQuery(cmp).CommandTimeout := ATimeout
else if cmp is TADOStoredProc then
TADOStoredProc(cmp).CommandTimeout := ATimeout
else if cmp is TADOTable then
TADOTable(cmp).CommandTimeout := ATimeout;
end;
end;
end;

关于德尔福 : Globally change ADO command timeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7472328/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com