数据库中保存了多个单位服务器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)....
我知道参数传递时有错误,但我不知道怎么改,哪位大侠能帮我改改吗 ,兄弟我感激不尽
解决方案 »
- 请问有没有做过数字电视上位机开发的,上位机都需要做那些工作?
- cxgrid控件动态footer字段
- 为什么WideString在OCX作为参数传递出来是空的?
- 关于使用dbgrideh遍历数据库引起的问题
- Midas+COM+基本问题
- 怎样利用存储过程动态生成临时表?
- 菜鸟问题系列—关于类型转换
- 请问在win2000下调用关闭系统api运行出错,提示没有运行权限,在win98下可以,怎么办?
- 怎样将人民币小写转换为大写?请高手指点!谢谢!
- delphi6的d版有谁见到过没有
- 各位:电脑网路断线几分钟后恢复正常, 请问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;