如何设置两组ADOQUERY+DATASOURCE+DBGRID进行多线程查询? 如题,那位能指点一下啊,我是初学,用单线程太慢了!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 unsigned(僵哥) 你给指点一下啊,我初学啊。 只是查询的话,用ADO的异步就可以了 高手帮看一下,我的线程啊,怎么查询的时候总没数据啊??unit main;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, Grids, DBGrids, ADODB, DBTables, ComCtrls, ExtCtrls, Menus,Activex;type TForm1 = class(TForm) ADODataSet1: TADODataSet; DataSource1: TDataSource; Button1: TButton; PageControl1: TPageControl; TabSheet1: TTabSheet; DBGrid1: TDBGrid; TabSheet2: TTabSheet; DBGrid2: TDBGrid; TabSheet3: TTabSheet; DataSource2: TDataSource; DataSource3: TDataSource; Button2: TButton; Button3: TButton; DBGrid3: TDBGrid; MainMenu1: TMainMenu; File1: TMenuItem; hread1: TMenuItem; StatusBar1: TStatusBar; Timer1: TTimer; Open1: TMenuItem; New1: TMenuItem; N1: TMenuItem; Close1: TMenuItem; Exit1: TMenuItem; Memo1: TMemo; Label1: TLabel; ADOQuery1: TADOQuery; ADOQuery2: TADOQuery; procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Exit1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; TThreadQuery = class(TThread)privateFQuery: TADOQuery;FDataSource: TDataSource;procedure ConnectDataSource;Protectedprocedure Execute; override;publicconstructor Create(Query: TADOQuery;DataSource: TDataSource); virtual; destructor Destroy; override;end;varForm1: TForm1;Q1,Q2: TThreadQuery;implementation{$R *.dfm}procedure TThreadQuery.ConnectDataSource;beginFDataSource.DataSet := FQuery;end;procedure TThreadQuery.Execute;begintryFQuery.Open;Synchronize(ConnectDataSource);exceptShowMessage('Query Error');end;end;constructor TThreadQuery.Create(Query: TADOQuery; DataSource: TDataSource);beginFQuery := Query;FDataSource := DataSource;inherited Create(true);//trueFreeOnTerminate := false; //falseend;procedure TForm1.FormCreate(Sender: TObject);begin{Q1 := TThreadQuery.Create(adoQuery1, DataSource2);Q2 := TThreadQuery.Create(adoQuery2, DataSource3);}end;procedure TForm1.FormDestroy(Sender: TObject);beginQ1.Terminate;Q1.Destroy;Q2.Terminate;Q2.Destroy;end;procedure TForm1.Button2Click(Sender: TObject);beginQ1 := TThreadQuery.Create(adoQuery1, DataSource2); if Q1.Suspended then Q1.Resume else Q1.Suspend;end;procedure TForm1.Button3Click(Sender: TObject);beginQ2 := TThreadQuery.Create(adoQuery2, DataSource3);//add it if Q2.Suspended then Q2.Resume else Q2.Suspend;end;procedure TForm1.Exit1Click(Sender: TObject);beginapplication.Terminateend;destructor TThreadQuery.Destroy;begin CoUnInitialize; inherited;end;end. 怎样快速学会面向对象的编程思维? 各位大大..请教个问题...关于定做软件. 将socket通讯程序写成了一个windows服务程序,无法停止 如何依据类容器的某个成员排序 后台服务怎样与前台交互? 请各位大大帮改一个小地方 DateTimePicker控件的两段日期问题 动态报表的问题 请教高手问题。谢了!!!!!!!!!!!!!!!! 我下载了csdn离线浏览器我想看源文件,但是说需要一个TDBISAMTable组件,请问去那里下载这个组件! 那种html的邮件要怎么收发啊.急啊.谢谢了. 如何在TreeView控件的节点前面显示两个图标?
unit main;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, Grids, DBGrids, ADODB, DBTables, ComCtrls,
ExtCtrls, Menus,Activex;type
TForm1 = class(TForm)
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
Button1: TButton;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
DBGrid1: TDBGrid;
TabSheet2: TTabSheet;
DBGrid2: TDBGrid;
TabSheet3: TTabSheet;
DataSource2: TDataSource;
DataSource3: TDataSource;
Button2: TButton;
Button3: TButton;
DBGrid3: TDBGrid;
MainMenu1: TMainMenu;
File1: TMenuItem;
hread1: TMenuItem;
StatusBar1: TStatusBar;
Timer1: TTimer;
Open1: TMenuItem;
New1: TMenuItem;
N1: TMenuItem;
Close1: TMenuItem;
Exit1: TMenuItem;
Memo1: TMemo;
Label1: TLabel;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TThreadQuery = class(TThread)
private
FQuery: TADOQuery;
FDataSource: TDataSource;
procedure ConnectDataSource;
Protected
procedure Execute; override;
public
constructor Create(Query: TADOQuery;DataSource: TDataSource); virtual;
destructor Destroy; override;
end;var
Form1: TForm1;
Q1,Q2: TThreadQuery;implementation{$R *.dfm}
procedure TThreadQuery.ConnectDataSource;
begin
FDataSource.DataSet := FQuery;
end;
procedure TThreadQuery.Execute;
begin
try
FQuery.Open;
Synchronize(ConnectDataSource);
except
ShowMessage('Query Error');
end;
end;
constructor TThreadQuery.Create(Query: TADOQuery; DataSource: TDataSource);
begin
FQuery := Query;
FDataSource := DataSource;
inherited Create(true);//true
FreeOnTerminate := false; //false
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
{Q1 := TThreadQuery.Create(adoQuery1, DataSource2);
Q2 := TThreadQuery.Create(adoQuery2, DataSource3);}
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Q1.Terminate;
Q1.Destroy;
Q2.Terminate;
Q2.Destroy;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Q1 := TThreadQuery.Create(adoQuery1, DataSource2);
if Q1.Suspended then Q1.Resume else Q1.Suspend;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Q2 := TThreadQuery.Create(adoQuery2, DataSource3);//add it
if Q2.Suspended then Q2.Resume else Q2.Suspend;
end;procedure TForm1.Exit1Click(Sender: TObject);
begin
application.Terminate
end;
destructor TThreadQuery.Destroy;
begin
CoUnInitialize;
inherited;
end;
end.