gpt4 book ai didi

DELPHI XE3 ADO 查询使我的应用程序在等待数据时卡住

转载 作者:行者123 更新时间:2023-12-01 18:53:17 25 4
gpt4 key购买 nike

是否有任何解决方案,以免我的 UI 在等待来自数据库的数据时卡住?

示例:

我们有一个 adoquery,而且我们有

adoquery.active:=false;adoquery.active:=true;

当 adoquery 尝试从数据库获取数据时,UI 中的所有内容都会被卡住,如果用户单击,则整个程序将变为没有回应!!

有办法解决这个问题吗?

最佳答案

您可以在 ExecuteOptions 中使用 [eoAsyncExecute,eoAsyncFetch],这将要求数据集使用显式 TAdoConnection。
为了避免意外行为,您必须在打开数据集之前使用 DisableControls,并在 FetchComplete 之后使用 EnableControls
FetchComplete 中直接调用 EnableControls 可能会导致异常,因此需要将 Postmessage 与用户定义的 Message 一起使用。

  Const
// define a message for handling completed AsyncFetch after leaving FetchComplete
WM_MYConnect=WM_User + 77;

type

TMyForm = class(TForm)
MyDataSet: TADODataSet;
MyDatasource: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
ADOConnection1: TADOConnection;
procedure Button1Click(Sender: TObject);
procedure MyDataSetFetchComplete(DataSet: TCustomADODataSet; const Error: Error; var EventStatus: TEventStatus);
private
{ Private-Deklarationen }
Procedure ConnectDatasource(var MSG:TMessage); message WM_MYConnect;
public
{ Public-Deklarationen }
end;

var
MyForm: TMyForm;

implementation

{$R *.dfm}

procedure TMyForm.Button1Click(Sender: TObject);
begin
MyDataset.Close;
// example blocking command for SQL-Server 10 seconds
MyDataset.CommandText := 'WAITFOR DELAY ''00:00:10'' Select* from aa';
Mydataset.DisableControls;
Mydataset.ExecuteOptions := [eoAsyncExecute,eoAsyncFetch];
MyDataset.Open;
end;

procedure TMyForm.ConnectDatasource(var MSG:TMessage);
begin
TAdodataset(MSG.WParam).EnableControls;
// MyDataSource.DataSet := MyDataset;
end;

procedure TMyForm.MyDataSetFetchComplete(DataSet: TCustomADODataSet; const Error: Error; var EventStatus: TEventStatus);
begin
// if we want to add a datasource we will have to ensure that it will happen after leaving FetchComplete
// so we call our procedure ConnectDatasource via PostMessage
PostMessage(Handle,WM_MYConnect,wParam(DataSet),0);
end;

end.

关于DELPHI XE3 ADO 查询使我的应用程序在等待数据时卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26057655/

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