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.

delphi 多线程 动态创建ADO

时间: 2024-10-09 19:29:54

delphi 多线程 动态创建ADO的相关文章

Delphi多线程下的ADO编程

前言: 几个月前接到一个任务:将一后台程序访问数据库的方式从BDE改为ADO,原因是由于业务量的增加,通过BDE不论是向数据库写入数据还是从数据库中读出数据的速度都变得无法忍受,大家都知道ADO在数据库访问速度方面比BDE要快的多了(我写了一个测试程序使用ADO比使用BDE快了近100倍!).这个任务还不简单嘛,只要将BDE的控件更换成ADO的再修改一些代码不就搞定了!我当时确实是这么想的,而且用了不到一个小时就搞定,测试运行一段没问题,大功告成了,我想.谁知道一个恶梦就此开始,我的愚昧无知使我

Delphi中动态创建的Panel无法改变颜色的解决办法(要把Panel的ParentBackground设为False)

刚开始代码如下: procedure TForm1.Button1Click(Sender: TObject); var Panel: TPanel; begin Panel := TPanel.Create(Form1); Panel.Name := 'pnlPreVideo'; Panel.Parent := Form1; Panel.OnClick := Panel1Click; MoveWindow(Panel.Handle, 10, 10, 100, 100, True); end;

BMDThread控件动态创建多线程示例

http://www.cnblogs.com/railgunman/archive/2010/12/08/1900688.html BMDThread控件是一套相当成熟的线程控件,使用它可以让你快速的创建.管理线程.    可以到CSDN或者盒子上下载BMDThread控件.    下面我们用多线程模拟客户端发送文件的例子来简单认识一下它.    在窗体中放置一个TIDClient,TBMDThread,TBMDThreadGroup.三个TEdit,两个按钮(开始线程,结束线程),一个MEMO

Delphi动态创建组件,并释放内存

开发所用delphi版本是xe2,效果图如下: 代码如下: ----------------------------------------------------------------------------------------------------------------- unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Class

聊聊多线程那一些事儿 之 四 经典应用(取与舍、动态创建)

hello task,咱们又见面啦!!前面已经通过三篇简单的文章,对多线程的创建.运行.阻塞.等待.取消.延迟操作.异步方法等相关的知识点,通过这一些介绍,现在上手写一个多线程就是分分钟的小事件.如果需要看前三排文章的小伙伴,可以点击下面链接快速阅读谢谢! 说了那么多后,我仔细想了一下,还是要来点实际的项目用例比较实在,那么我现在就讲我平时在项目中用常用的一些业务梳理处理,以供参考,写到不好勿喷,有更好的解决方式,欢迎交流.谢谢! 应用一.多线程的中的取与舍 还是用上几篇文章中的关于酒店客房的数

Delphi 动态创建组件,单个创建、单个销毁

效果图如下: 实现部分代码如下: var rec: Integer = 0; //记录增行按钮点击次数 implementation {$R *.dfm} //动态释放单个组件内存,即销毁组件 procedure TForm1.DeleteRow(Sender: TObject); begin if rec < 1 then Exit else begin TPanel(Panel1.Controls[rec]).Free; //释放单个控件内存 TComboBox(Panel2.Control

DELPHI 动态 创建和释放 多个 EDIT 控件

unit Unit1;   interface   uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls, ExtCtrls;   type   TForm1 = class(TForm)     pnl1: TPanel;     btn1: TButton;     btn2: TButton;     procedure btn1Click(

Delphi动态创建菜单

在程序运行中动态创建菜单,主要使用TMeunItem类,所有菜单的条目都是TMenuItem的一个实例. 打开Delphi7集成开发环境,在默认新建工程里,放置一个Button1按钮和MainMenu1菜单项,设置Button1的Caption属性为添加主菜单. 在Button1的Object Inspector选项卡设置Button1的OnClick响应事件,代码如下: procedure TForm1.Button1Click(Sender: TObject); var files,edit

Win32 多线程的创建方法,区别和联系

Win32多线程的创建方法主要有: CreateThread() _beginthread()&&_beginthreadex() AfxBeginThread() CWinThread类 一.简介 CreateThread: Win32提供的创建线程的最基础的API,用于在主线程上创建一个线程.返回一个HANDLE句柄(内核对象).在内核对象使用完毕后,一般需要关闭,使用CloseHandle()函数. _beginthread()&&_beginthreadex():_