码迷,mamicode.com
首页 > 编程语言 > 详细

delphi 多线程 动态创建ADO

时间:2014-08-05 10:48:20      阅读:880      评论:0      收藏:0      [点我收藏+]

标签:des   style   color   使用   os   io   strong   for   

delphi 在多线程动态连接ADO控件 异常:exception class EOleSysError with message ‘尚未调用CoInitialize

如果是使用多线程的话那就在 Execute事件的开头加上 CoInitialize(nil); 结尾加上CoUninitialize()

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,ADODB, DB,ActiveX;//ActiveX 必须
type
TForm1 = class(TForm)
Button1: TButton;
ADOConnection1: TADOConnection;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TMyThread = class(TThread)
protected
procedure Execute; override;
end;
var
Form1: TForm1;
id:integer;
implementation

{$R *.dfm}

procedure TMyThread.Execute;
var
AdoConn1:TADOConnection;
AdoQuery1:TAdoQuery;
begin
FreeOnTerminate:=true;{这可以让线程执行完毕后随即释放}
CoInitialize(nil);// 重要,解决“尚未调用CoInitialize”,需要引入ActiveX单元
try
AdoConn1:=TADOConnection.Create(Form1);//动态创建ADO控件
AdoConn1.ConnectionString:=Form1.ADOConnection1.ConnectionString;
AdoConn1.LoginPrompt:=false;
AdoConn1.Open;
AdoQuery1:=TAdoQuery.Create(Form1);
AdoQuery1.Connection:=AdoConn1;

with AdoQuery1 do
begin
Close;
SQL.Clear;
SQL.Add(‘select * from pubgszl‘);
open;
While not eof do
begin
Form1.Memo1.Lines.Add(FieldByName(‘gsdm‘).AsString);
next;
end;
end;
Form1.Memo1.Lines.Add(‘处理成功.‘);
AdoConn1.Close;
AdoQuery1.Destroy;
AdoConn1.Destroy;//消除
except
AdoConn1.Destroy;
AdoQuery1.Destroy;
Form1.Memo1.Lines.Add(‘处理失败.‘);
end;
CoUninitialize();
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TMyThread.Create(False);
end;
end.

delphi 多线程 动态创建ADO,布布扣,bubuko.com

delphi 多线程 动态创建ADO

标签:des   style   color   使用   os   io   strong   for   

原文地址:http://www.cnblogs.com/ITinfo/p/3891563.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!