多线程查询数据库

Unit QueryThread
interface

uses
  Classes,messages,ADODB,DB,SysUtils,Dialogs,ActiveX;

type
  Tmythread = class(TThread)
  private
    Fquery:TAdoquery;            //查询
    FConnection:TAdoconnection;  //连接
    FDataSource: TDataSource;   { 与查询组件相关的数据感知组件         }
    procedure ConnectDataSource;{ 连接数据查询组件和数据感知组件的方法 }
  protected
    procedure Execute; override;
  public
    constructor Create(Suspended:Boolean;Query:TAdoQuery;DS:TDataSource); {  线程构造器 }
    destructor Destroy;override;
  end;

implementation
procedure Tmythread.ConnectDataSource;{ 连接数据查询组件和数据感知组件的方法 }
begin
   FDataSource.dataset:=Fquery;
end;
constructor Tmythread.Create(Suspended:Boolean;Query:TAdoQuery;DS: TDataSource);
begin
  CoInitialize( nil );  // 这个在 线程中是必需的
  try
    Fconnection:=TAdoconnection.create(nil);
    Fquery:=Query;
    FDataSource:=DS;
    Fquery.connection:=Fconnection;
    with Fconnection do
    begin
      LoginPrompt:=False;
      KeepConnection:=True;
      ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;Data Source=honesty';
    end;
    inherited Create(Suspended);
  except
    on E: Exception do
    begin
      showmessage('创建 线程时出错!错误是:'+ E.Message );
    end;
  end;
end;
destructor Tmythread.Destroy;
begin
  Fconnection.free; //释放
  CoUnInitialize;
  inherited Destroy;
end;
procedure Tmythread.Execute;
begin
  try
    FreeOnTerminate := true;
    FQuery.Open;                  { 打开查询 }
    Synchronize(ConnectDataSource); {  线程同步 }
  except
    showmessage(' 线程异常!');       { 线程异常 }
  end;
end;

end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值