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成功'; showmessage('数库成功');end; procedure Tf_ljqk.FormCreate(Sender: TObject); var inifile: TIniFile; v_Path,dbconstr,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;
unit Unit2;interfaceuses
Classes,ADODB,DB;type
TDBInfo = class
//数库服务器信息 ,其它自己添加吧
ConnectString: String;
end; TCheckDB = class(TThread)
private
{ Private declarations }
FDBInfo: TDBInfo;
procedure UpdateUI;
protected
procedure Execute; override;
public
constructor Create(Suspended: Boolean; DBInfo: TDBInfo);
end;
implementation
uses
unit1;
constructor TCheckDB.Create(Suspended: Boolean; DBInfo: TDBInfo);
begin
FDBInfo := DBInfo;
end;procedure TCheckDB.Execute;
var
ADO: TADOTable;
begin
ADO := TADOTable.Create(nil);
ADO.Connectionstring := FDBInfo.ConnectString;
//设置其它相关ADO属性...
if ADO.Open then
Synchronize(Update);
{ Place thread code here }
end;procedure TCheckDB.UpdateUI;
begin
Form1.label1.caption := '数库1成功';
end;
end.
把你所有要连的数据库信息组合成连接字符串放到一个stringlist中,循环该List,
里面创建线程挂起,然后赋属性参数,再唤醒线程,就可以了
代码就省了
DELPHI自带得DEMO中有那么一段。
TDBInfo = class
//数库服务器信息 ,其它自己添加吧
ConnectString: String;
end;
///下面DBInfo: TDBInfo声明是为了你要测试的数库信息,比如地址,端等等啰而不是叫你传ADOTable进去...
TCheckDB.Create(Suspended: Boolean; DBInfo: TDBInfo)
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成功';
showmessage('数库成功');end;
procedure Tf_ljqk.FormCreate(Sender: TObject);
var
inifile: TIniFile;
v_Path,dbconstr,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;
看看这一段嘛
TDBInfo = class
//数库服务器信息 ,其它自己添加吧
ConnectString: String;
end;
///下面DBInfo: TDBInfo声明是为了你要测试的数库信息,比如地址,端等等啰而不是叫你传ADOTable进去...
TCheckDB.Create(Suspended: Boolean; DBInfo: TDBInfo)您能帮我修改一下吗,我的源码如上所示