数据库中保存了多个单位服务器ip、数据库sid、password、database等字段,需要逐个探测各条记录保存的数据连接信息是否可连,若逐个测试耗费时间太长,所以我想用多线程来实现
我是在一窗体的主程序中建立的线程,测试数据连结用的是adoconnection unit U_ljqk;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ImgList, RzGroupBar,
Grids, DBGridEh, ExtCtrls, RzListVw, RzCommon, RzButton, RzPanel,
DB, ADODB, inifiles, Menus, CoolTrayIcon, Syncobjs;type
Tf_ljqk = class(TForm)
。 private
{ Private declarations }
public
{ Public declarations }
end;
Thrd = class(TThread)
private
{ Private declarations }
FDBInfo: string;
procedure UpdateUI;
protected
procedure Execute; override;
public
constructor Create(Suspended: Boolean; DBInfo: string);
end;
var
f_ljqk: Tf_ljqk;
implementation
{$R *.dfm}
constructor Thrd.Create(Suspended: Boolean; DBInfo: string);
begin
FDBInfo := DBInfo;
end;
procedure Thrd.Execute;
var
ADO: TADOConnection;
begin
//self.FreeOnTerminate:=true;
ADO := TADOConnection.Create(nil);
ADO.Connectionstring := FDBInfo;
ado.CommandTimeout:=10;
ado.ConnectionTimeout:=5;
if ADO.connected then
Synchronize(UpdateUI)
{ Place thread code here }
end;
procedure Thrd.UpdateUI;
begin
f_ljqk.label1.caption := '数库1成功';
end;
procedure Tf_ljqk.FormCreate(Sender: TObject);
var
v_dbstr: string;
begin
with adoquery1 do
begin
while not eof do
begin
v_dbstr:='Provider=SQLOLEDB.1;Password='+trim(FieldByName('loadpwd').AsString)+';'+
'Persist Security Info=True;User ID='+trim(FieldByName('loadid').AsString)+';Initial Catalog=master'+
';Data Source='+trim(FieldByName('ip').AsString)+';pooling=false';
Thrd.Create(false,v_dbstr);
next;
end;
end;
end;
错误提示 ....THread Error :句柄无效(6)....
我知道参数传递时有错误,但我不知道怎么改,哪位大侠能帮我改改吗 ,兄弟我感激不尽
我是在一窗体的主程序中建立的线程,测试数据连结用的是adoconnection unit U_ljqk;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ImgList, RzGroupBar,
Grids, DBGridEh, ExtCtrls, RzListVw, RzCommon, RzButton, RzPanel,
DB, ADODB, inifiles, Menus, CoolTrayIcon, Syncobjs;type
Tf_ljqk = class(TForm)
。 private
{ Private declarations }
public
{ Public declarations }
end;
Thrd = class(TThread)
private
{ Private declarations }
FDBInfo: string;
procedure UpdateUI;
protected
procedure Execute; override;
public
constructor Create(Suspended: Boolean; DBInfo: string);
end;
var
f_ljqk: Tf_ljqk;
implementation
{$R *.dfm}
constructor Thrd.Create(Suspended: Boolean; DBInfo: string);
begin
FDBInfo := DBInfo;
end;
procedure Thrd.Execute;
var
ADO: TADOConnection;
begin
//self.FreeOnTerminate:=true;
ADO := TADOConnection.Create(nil);
ADO.Connectionstring := FDBInfo;
ado.CommandTimeout:=10;
ado.ConnectionTimeout:=5;
if ADO.connected then
Synchronize(UpdateUI)
{ Place thread code here }
end;
procedure Thrd.UpdateUI;
begin
f_ljqk.label1.caption := '数库1成功';
end;
procedure Tf_ljqk.FormCreate(Sender: TObject);
var
v_dbstr: string;
begin
with adoquery1 do
begin
while not eof do
begin
v_dbstr:='Provider=SQLOLEDB.1;Password='+trim(FieldByName('loadpwd').AsString)+';'+
'Persist Security Info=True;User ID='+trim(FieldByName('loadid').AsString)+';Initial Catalog=master'+
';Data Source='+trim(FieldByName('ip').AsString)+';pooling=false';
Thrd.Create(false,v_dbstr);
next;
end;
end;
end;
错误提示 ....THread Error :句柄无效(6)....
我知道参数传递时有错误,但我不知道怎么改,哪位大侠能帮我改改吗 ,兄弟我感激不尽
解决方案 »
- 怎样把xml文件各节点的内容读入sql数据库?
- Inforpower 的 wwDBGrid如何实现移到滚动条时或滚动鼠标滑轮时,不刷新数据
- 如何用函数得到我程序所在的目录?在线等。
- INI小节名,能否更改??
- 有谁会使用import type library 引入的MSN的相关控件delphi中
- powerpoint 中定位
- 怎样调试delphi内部代码?
- 怎么注册一个Embed类型的!(高分)解决500分
- 怎样知道已经存在的 "内存映象文件" 的信息,比如大小?
- 关于窗体的问题!谢谢!!!
- 各位:电脑网路断线几分钟后恢复正常, 请问ADO连接怎么复位
- 在QuickReport的OnNeedData中如何有选择的打印数组中的数据?
unit U_ljqk;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, Grids, DB, ADODB, inifiles, Menus, Syncobjs, activex;type
Tf_ljqk = class(TForm)
。 private
{ Private declarations }
public
{ Public declarations }
end;
Thrd = class(TThread)
private
{ Private declarations }
FDBInfo: string;
procedure UpdateUI;
procedure UpdateUX;
protected
procedure Execute; override;
public
end;
var
f_ljqk: Tf_ljqk;
implementation
{$R *.dfm}
procedure Thrd.Execute;
var
ADO: TADOConnection;
begin
self.FreeOnTerminate:=true;
CoInitialize(nil);
ADO := TADOConnection.Create(nil);
ADO.Connectionstring := FDBInfo;
ado.CommandTimeout:=10;
ado.ConnectionTimeout:=5;
ado.LoginPrompt:=false;
try
ado.Open;
except
Synchronize(UpdateUX);
end;
if ADO.connected then
Synchronize(UpdateUI)
else
Synchronize(UpdateUX);
ado.Free;
CoUninitialize;
end;
procedure Thrd.UpdateUI;
begin
f_ljqk.label1.caption := '数库1成功';
end; procedure Thrd.UpdateUX;
begin
f_ljqk.label1.caption := '数库1失败';
end;
procedure Tf_ljqk.FormCreate(Sender: TObject);
var
v_dbstr: string;
begin
with adoquery1 do
begin
while not eof do
begin
v_dbstr:='Provider=SQLOLEDB.1;Password='+trim(FieldByName('loadpwd').AsString)+';'+ 'Persist Security Info=True;User ID='+trim(FieldByName('loadid').AsString)+';Initial Catalog=master'+';Data Source='+trim(FieldByName('ip').AsString);
new(myThrd);
myThrd^ := Thrd.Create(True);
myThrd^.FreeOnTerminate := True;
myThrd^.FDBInfo := v_dbstr;
myThrd^.Resume;
next;
end;
end;
end;