Delphi SQL Server TADOConnection Thread  
官方Delphi 学习QQ群: 682628230(三千人)
频道

Delphi SQL Server TADOConnection Thread


ADO 在内部使用 COM 技术,因此无论如何您都不能真正跨线程边界使用它。如果要在线程中使用 ADO,请为线程提供自己的 ADO Connection 和 Query 对象。在线程上下文中执行所有 SQL 工作,并根据需要与主 UI 线程同步状态更新。


此外,您需要在工作线程中初始化 COM 库,然后才能使用 ADO。


尝试更像这样的事情:


procedure TForm1.Button1Click(Sender: TObject);

var

  Thread : TThread;

  ConnStr: string;

begin

  ConnStr := 'Provider=SQLNCLI11.1;'+

    'Persist Security Info=False;'+

    'User ID='+Edit1.Text+';'+

    'Initial Catalog='+Edit2.Text+';'+

    'Data Source='+Edit3.Text+';'+

    'Initial File Name="";'+

    'Server SPN="";'+

    'password="'+Edit4.Text+'"';


  Thread := TThread.CreateAnonymousThread(

    procedure

    var

      ADOConnectionSQL: TADOConnection;

      ADOQuerySQL: TADOQuery;

    begin

      CoInitialize(nil);

      try

        ADOConnectionSQL := TADOConnection.Create(nil);

        try

          ADOConnectionSQL.LoginPrompt := False;

          ADOConnectionSQL.ConnectionString := ConnStr;


          ADOConnectionSQL.Open;


          TThread.Queue(nil,

            procedure

            begin

              Circle1.Fill.Color := TAlphaColorRec.Green;

            end

          );


          ADOQuerySQL := TADOQuery.Create(nil);

          try

            ADOQuerySQL.Connection := ADOConnectionSQL;

            // use ADOQuerySQL as needed...

          finally

            ADOQuerySQL.Free;

          end;

        finally

          ADOConnectionSQL.Free;

        end;

      finally

        CoUninitialize;

      end;

    end);

  Thread.OnTerminate := SQLFinished;

  Thread.Start;

end;


procedure TForm1.SQLFinished(Sender: TObject);

begin

  Circle1.Fill.Color := TAlphaColorRec.Red;

  if TThread(Sender).FatalException <> nil then

  begin

    // something went wrong

    ShowMessage('Failure! ' + Exception(TThread(Sender).FatalException).Message);

  end;

end;



推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.044406890869141 seconds