📄 threadquery.pas
字号:
unit ThreadQuery;
interface
uses
Classes,ADODB,DB,Dialogs,SysUtils,DBGridEh,StdCtrls,Forms,Messages,Windows;
const WM_MyMsg1 = WM_User + 201;
type
TThreadQuery = class(TThread) //声明线程类
private
FQuery:TAdoQuery; //线程类中的查询组件
FDataSource:TDataSource; //线程类中与查询组件相关的数据感知组件
FDataSource1:TDataSource;
Ffrm_handle:HWND;
procedure ConnectDataSource;//线程类中连接数据查询组件与数据感知组件的方法。
procedure ConnectDataSource1;
procedure ConnectDataSource2;
{ Private declarations }
protected
procedure Execute; override;
public
constructor Create(Query:TADOQuery;frm_handle:HWND);virtual;
end;
implementation
uses cx_hint,ThreadHint;
{ Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure TThreadQuery.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }
{ TThreadQuery }
constructor TThreadQuery.Create(Query:TADOQuery;frm_handle:HWND);
begin
FQuery:=Query;
//FDataSource:=DataSource;
//FDataSource1:=DataSource1;
Ffrm_handle:=frm_handle;
inherited Create(False); //参数为False,立即运行;为True,挂起。
FreeOnTerminate:=True;//如果设为False,线程运行完后不会自动删除,如果为True,线程运行完后会自动删除。
end;
procedure TThreadQuery.Execute;
var
i:integer;
begin
try
FQuery.Close;
//Synchronize(ConnectDataSource);
try
FQuery.Open;
except
FQuery.ExecSQL;//打开查询
end;
Synchronize(ConnectDataSource1);//线程同步
except
Synchronize(ConnectDataSource2);
end;
{ Place thread code here }
end;
procedure TThreadQuery.ConnectDataSource;
begin
//dm_pas.dm_frm.qry_ddcx_dno.Parameters.ParamValues['date1']:=FormatDateTime('yyyy-MM-dd',print_pas.print_frm.DateTimePicker1.DateTime);
//dm_pas.dm_frm.qry_ddcx_dno.Parameters.ParamValues['date2']:=FormatDateTime('yyyy-MM-dd',print_pas.print_frm.DateTimePicker2.DateTime+1);
end;
procedure TThreadQuery.ConnectDataSource1;
var
skip:integer;
begin
//ThreadHint.FWinControl.Free;
//dm_pas.dm_frm.ADOQuery1.Recordset:=dm_pas.dm_frm.qry_ddcx_dno.Recordset;
//dm_pas.dm_frm.ADOQuery2.Clone(dm_pas.dm_frm.qry_ddcx_dno);
//dm_pas.dm_frm.ADOQuery3.Recordset:=dm_pas.dm_frm.ADOQuery2.Recordset;
//main_pas.mainform_ddcx.DBGridEh1.DataSource:=nil;
//main_pas.mainform_ddcx.DBGridEh1.DataSource:=dm_pas.dm_frm.DataSource1;
//main_pas.mainform_ddcx.DBGridEh2.DataSource:=nil;
//main_pas.mainform_ddcx.DBGridEh2.DataSource:=dm_pas.dm_frm.DataSource3;
//ShowMessage('查询完毕!!!');
PostMessage(Ffrm_handle,WM_MyMsg1,0,0);
end;
procedure TThreadQuery.ConnectDataSource2;
begin
ThreadHint.FWinControl.Free;
ShowMessage('查询异常!!!');
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -