我想在delphi中用线程(TThread)进行sql server连接,目的是为了避免在连接数据库时应用程序在一段时间内失去焦点? 可以呀。在execute里写就行了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应用程序的焦点???是什么意思?可以在TThread中使用ADO连接SQL server,在TThread中建立ADO对象 unit mythread;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids, Db, DBTables,ExtCtrls;type TForm1 = class(TForm) Button1: TButton; Database1: TDatabase; Query1: TQuery; DataSource1: TDataSource; DBGrid1: TDBGrid; Button2: TButton; Timer1: TTimer; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.DFM}type tmythread = class(TThread) private queryform: tform1; procedure querydataset; procedure show; { Private declarations } protected procedure Execute; override; public constructor create(aqueryform : tform1); end;procedure TForm1.Button1Click(Sender: TObject);begin form1.color:=random(255); //TQueryThread.Create(QueryForm);end;procedure TForm1.Button2Click(Sender: TObject);var queryform:tform1;begin Tmythread.Create(QueryForm);end;procedure tmythread.Execute;begin { Place thread code here } with queryform do begin database1.connected := true; with query1 do begin close; sql.clear; sql.add('select * from customer'); open; end; synchronize(show); synchronize(querydataset); end;end;procedure tmythread.show;begin showmessage('connect successfully!');end;constructor tmythread.create(aqueryform : tform1);begin queryform := aqueryform; freeonterminate:= true; inherited create(false);end;procedure TForm1.Timer1Timer(Sender: TObject);begin button1.onclick(nil);end;procedure tmythread.querydataset;begin with queryform do begin with query1 do begin while not query1.eof do begin next; end; end; end; end;end. 楼上的给位老兄: 这个一个比较难的问题,并不是用Thread就能简单实现的问题。分析一下:我们一般用ADOQuery等VCL控件连接SQL Server,而VCL是不支持多线程的,TThread也只是用同步技术让主线程去执行访问VCL控件的多线程代码。问题是,我们的问题就是出在VCL运行时,应用程序失去焦点。所以用TThread是不能解决问题的。以前,我用DLL访问MySQL时,用多线程是可以的,不知道能不能用DLL实现访问SQL SERVER 哈哈,有意思,谢谢指点!gaoql(雪淞)!留个联系方法吧,我觉得我该从你那里学点东西[email protected] <求助>ODBC 连接SQLSERVER创建新数据源的问题 如何优化这条SQL语句! SQL Server一般用什么开发工具写transact-sql? 求一简单SQL语句 用【服务器名称】连接不上数据库但是ip能连接上? 在數據庫裡不同列裡查詢, 最大值 與 最小值所在的位置 DTS包如何使用 用Report service 怎麼做不固定輸出列的個數的報表 可以成立子版了,特征求大家的意见,看看如何分类。 如何进行多表左外连接 如何将sqlserver7.0中备份出来的数据恢复到sql2000中? 我的SQL Server 的 SQLServerAgent 不能启动,请教啊?
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, Db, DBTables,ExtCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Database1: TDatabase;
Query1: TQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button2: TButton;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}type
tmythread = class(TThread)
private
queryform: tform1;
procedure querydataset;
procedure show;
{ Private declarations }
protected
procedure Execute; override;
public
constructor create(aqueryform : tform1);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
form1.color:=random(255);
//TQueryThread.Create(QueryForm);
end;procedure TForm1.Button2Click(Sender: TObject);
var queryform:tform1;
begin
Tmythread.Create(QueryForm);
end;procedure tmythread.Execute;begin
{ Place thread code here }
with queryform do
begin
database1.connected := true;
with query1 do
begin
close;
sql.clear;
sql.add('select * from customer');
open;
end; synchronize(show);
synchronize(querydataset);
end;
end;
procedure tmythread.show;
begin
showmessage('connect successfully!');
end;constructor tmythread.create(aqueryform : tform1);
begin
queryform := aqueryform;
freeonterminate:= true;
inherited create(false);end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
button1.onclick(nil);
end;procedure tmythread.querydataset;
begin
with queryform do
begin
with query1 do
begin
while not query1.eof do
begin
next;
end;
end;
end;
end;end.
这个一个比较难的问题,并不是用Thread就能简单实现的问题。分析一下:
我们一般用ADOQuery等VCL控件连接SQL Server,而VCL是不支持多线程的,TThread
也只是用同步技术让主线程去执行访问VCL控件的多线程代码。问题是,我们的
问题就是出在VCL运行时,应用程序失去焦点。所以用TThread是不能解决问题的。
以前,我用DLL访问MySQL时,用多线程是可以的,不知道能不能用DLL实现访问SQL SERVER
留个联系方法吧,我觉得我该从你那里学点东西
[email protected]