• delphi 多线程 动态创建ADO


    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.

  • 相关阅读:
    springMVC学习笔记五(拦截器详解)
    springMVC学习笔记六(注解方式实现控制器)
    springMVC学习笔记四(数据类型转换和数据验证)
    springMVC学习笔记二(dispatcherServlet)
    springMVC学习笔记三(controller控制器)
    springMVC学习笔记一(hello world)
    mybatis学习笔记四(与spring3集成)
    扩展欧几里得————《数论》
    2017 多校赛 第二场
    POJ 2566 尺取法(进阶题)
  • 原文地址:https://www.cnblogs.com/ITinfo/p/3891563.html
Copyright © 2020-2023  润新知