采用ADO异步形式,即:eoAsyncFetchNonBlocking;通过线程执行,运行后通知事件FetchComplete
[code=Delphi(Pascal])
constructor TAnsycDBThread.Create(var DataSet: TCustomADODataSet);
begin
FDataSet := DataSet;
Inherited Create(False);
end;procedure TAnsycDBThread.Execute;
begin
FreeOnTerminate := True;
FDataSet.Open;
{ Place thread code here }
end;
[/code]
执行结果由事件:
[code=Delphi(Pascal])
procedure FetchComplete(DataSet: TCustomADODataSet; const Error: Error;
var EventStatus: TEventStatus);
begin
HandUpMsg_rg.Items.Clear; //radioGroup控件
while not DataSet.Eof do
begin
HandUpMsg_rg.Items.Append(DataSet.fieldbyname('MsgTitle').AsString);
DataSet.Next;
end;
end;
[/code]问题:结果可以回来,跟踪代码有传值回来.但界面的RadioGroup控件没有显示;而且程序退出会出现"无效的窗口句柄"
该怎么解决啊...急
[code=Delphi(Pascal])
constructor TAnsycDBThread.Create(var DataSet: TCustomADODataSet);
begin
FDataSet := DataSet;
Inherited Create(False);
end;procedure TAnsycDBThread.Execute;
begin
FreeOnTerminate := True;
FDataSet.Open;
{ Place thread code here }
end;
[/code]
执行结果由事件:
[code=Delphi(Pascal])
procedure FetchComplete(DataSet: TCustomADODataSet; const Error: Error;
var EventStatus: TEventStatus);
begin
HandUpMsg_rg.Items.Clear; //radioGroup控件
while not DataSet.Eof do
begin
HandUpMsg_rg.Items.Append(DataSet.fieldbyname('MsgTitle').AsString);
DataSet.Next;
end;
end;
[/code]问题:结果可以回来,跟踪代码有传值回来.但界面的RadioGroup控件没有显示;而且程序退出会出现"无效的窗口句柄"
该怎么解决啊...急
constructor TAnsycDBThread.Create(var DataSet: TCustomADODataSet);
begin
FDataSet := DataSet;
Inherited Create(False);
end; procedure TAnsycDBThread.Execute;
begin
FreeOnTerminate := True;
FDataSet.Open;
{ Place thread code here }
end; //执行结果由事件:
procedure FetchComplete(DataSet: TCustomADODataSet; const Error: Error;
var EventStatus: TEventStatus);
begin
HandUpMsg_rg.Items.Clear; //radioGroup控件
while not DataSet.Eof do
begin
HandUpMsg_rg.Items.Append(DataSet.fieldbyname('MsgTitle').AsString);
DataSet.Next;
end;
end;
问题:结果可以回来,跟踪代码有传值回来.但界面的RadioGroup控件没有显示;而且程序退出会出现"无效的窗口句柄"
该怎么解决啊...急
是这样的,在一个窗体里面有个RaidioGroup,里面的Item必须通过数据库返回的结果集显示.
在这个窗体中构造好AODQuery(使用异步方式即:eoAsyncFetchNonBlocking)后,把它放到一个线程执行(线程很简单,就exec的部分执行ADOQuery.open).
线程执行完毕后,AODQuery里有个事件FetchComplete,这个事件是写在开始那个窗体所在的单元.现在的问题是:这个事件已经有结果回来,结果也正确(HandUpMsg_rg.Items.Append(DataSet.fieldbyname('MsgTitle').AsString));可就是界面的这个RadioGroup里没显示任何数据,而且退出程序后还会报"无效的窗口句柄"的问题...该如何解决哈..
//线程代码
{ TAnsycDBThread }constructor TAnsycDBThread.Create(var DataSet: TCustomADODataSet; Btn: TButton=nil);
begin
FDataSet := DataSet;
FBtn := Btn;
Inherited Create(False);
end;procedure TAnsycDBThread.Execute;
begin
FreeOnTerminate := True;
try
FDataSet.Open;
FDataSet := nil;
except
if Assigned(FBtn) then
begin
FBtn.Enabled := True;
FBtn.Caption := '查询';
end;
end;
{ Place thread code here }
end;//事件返回代码
procedure TFormAlarmSend.BusinessCfgADOQueryFetchComplete(
DataSet: TCustomADODataSet; const Error: Error;
var EventStatus: TEventStatus);
begin
while not DataSet.Eof do
begin
rgDBusiness.Items.Append(DataSet.FieldByName('Business').AsString);
DataSet.Next;
end;
end;
如下:
procedure FetchComplete(DataSet: TCustomADODataSet; const Error: Error;
var EventStatus: TEventStatus);
begin
//增加以下两行
if terminated then
exit; HandUpMsg_rg.Items.Clear; //radioGroup控件
while not DataSet.Eof do
begin
HandUpMsg_rg.Items.Append(DataSet.fieldbyname('MsgTitle').AsString);
DataSet.Next;
end;
end;