远程有两个字段结构都相同的MSSQL数据库192.168.0.2与192.168.0.3 数据库名:DB
我想用ADOQuery1与ADOconnection1连接 192.168.0.2
  想用ADOQuery2与ADOconnection2连接 192.168.0.3
  都一样执行 select Name from DB.dbo.ALLName where id='2' 并把它们 memo1.lines.add();  我想创个两个线程来分别针对这两个数据库来select...并把它们 memo1.lines.add
大家能不能提供个模式或者思路,代码更好?

解决方案 »

  1.   

    要执行多少次,如果就执行一次就不要用多线程了如果要用多线程的话重载下Tread的Excute方法就行
      

  2.   

    查询线程单元文件
    unit QueryThreads;interfaceuses
      Classes, ADODB, StdCtrls;type
      TQueryThread = class(TThread)
        constructor Create(CreateSuspended: Boolean);
        destructor Destroy(); override;
      public
        AdoQuery: TADOQuery;
        PMemo: ^TMemo;
      protected
        procedure Execute; override;
      private
        procedure WriteToMemo;
      end;implementation{ TQueryThread }constructor TQueryThread.Create(CreateSuspended: Boolean);
    begin
      AdoQuery := TADOQuery.Create(nil);
      inherited;
    end;destructor TQueryThread.Destroy;
    begin
      AdoQuery.Free;
      inherited;
    end;procedure TQueryThread.Execute;
    begin
      FreeOnTerminate := True;
      try
        AdoQuery.Active := True;
        Synchronize(WriteToMemo);
      except
      end;
    end;procedure TQueryThread.WriteToMemo;
    begin
      AdoQuery.First;
      while not AdoQuery.Eof do
      begin
        PMemo.Lines.Add(AdoQuery.FieldValues['Name']);  // 根据你的实际情况修改。
        AdoQuery.Next;
      end;
    end;end.
    主窗体单元文件
    .
    .
    .implementationuses
      QueryThreads;var
      QueryThread: TQueryThread;procedure TForm1.Button1Click(Sender: TObject);  // 点击按钮后,启动查询线程,查询时不影响窗体操作。
    begin
      QueryThread := TQueryThread.Create(True);
      // 连接字串改成你的,这是我测试时用的。
      QueryThread.AdoQuery.ConnectionString := 'Provider=MSDASQL.1;Password=pass;' +
          'Persist Security Info=True;User ID=admin;Mode=Read;Extended Properties=' +
          '"DBQ=C:\Users.mdb;DefaultDir=C:\;Driver={Microsoft Access Driver (*.mdb)};' +
          'DriverId=25;FIL=MS Access;FILEDSN=C:\Users.dsn;MaxBufferSize=2048;MaxScanRows=8;' +
          'PageTimeout=5;PWD=pass;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"';
      // 查询SQL改成你的。
      QueryThread.AdoQuery.SQL.Text := 'select * from users';
      // 传递主窗体上的Memo给线程,便于向其中添加数据。你也可以改成由主窗体去读取线程的数据。
      QueryThread.PMemo := @Memo1;
      // 启动线程
      QueryThread.Resume;
    end;.
    .
    .
      

  3.   

    到这里去瞧瞧, 有些DELPHI的技巧: http://www.cnblogs.com/iinsnian/