线程里边可以用ADO类操作数据库吗?
想在线程里执行数据库,不知道能否用ado控件,试了一下,老出错。
请教高手指点。
问题点数:0、回复次数:4Top
1 楼hch_45(痞子宏)回复于 2003-12-03 08:25:51 得分 0
当然可以,不过定义,构造、释放、属性等你要动态设置。Top
2 楼BADLUCK88()回复于 2003-12-03 21:02:03 得分 0
我就是动态设置的,可是还是不行啊,
不知道能否给个例子,谢谢Top
3 楼MartinWang(小磋磋)回复于 2003-12-03 23:11:33 得分 0
要初始化的!!:)Top
4 楼qyyok()回复于 2003-12-04 09:18:15 得分 0
给你一段查询的源码
把dbgrideh的名称 和sql语句传过去
unit OpenSql;
interface
uses
Classes,DB, ADODB, DBCtrlsEh, DBGridEh,IsSearch,Dialogs;
type
TOpenSql = class(TThread)
private
{ Private declarations }
Procedure SetDataSouce;
protected
SortStr:String;
TmpQry:TADOQuery;
TmpGrd:TDBGRidEh;
procedure Execute; override;
public
constructor Create(GrdT:TDBGRidEh;Qryt:TADOQuery;SorTT:string); virtual;
end;
implementation
{ Important: Methods and properties of objects in VCL or CLX can only be used
in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure TOpenSql.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }
{ TOpenSql }
constructor TOpenSql.Create(GrdT:TDBGRidEh;Qryt:TADOQuery;SorTT:string);
begin
inherited Create(True);
SortStr:=SorTT;
GrdT.SumList.Active:=False;
TmpGrd:=GrdT;
TmpGrd.DataSource.DataSet:=nil;
TmpQry:=Qryt;
FreeOnTerminate := True;
Resume;
end;
procedure TOpenSql.Execute;
begin
TmpQry.Open;
TmpQry.Sort:=SortStr;
Synchronize(SetDataSouce);
{ Place thread code here }
end;
procedure TOpenSql.SetDataSouce;
begin
FrmIsSearch.ani1.Active:=False;
// FrmIsSearch.pnl1.Caption:=SortStr;
FrmIsSearch.Close;
TmpGrd.DataSource.DataSet:=TmpQry;
TmpGrd.SumList.Active:=True;
end;
end.Top




