读书人

ADO控件在线程中使用的有关问题

发布时间: 2013-07-04 11:45:40 作者: rapoo

ADO控件在线程中使用的问题
TADOConnection控件在线程中创建后,如果线程不退出,就打不开Excel,Word之类用的东西
测试代码如下:
Unit1.pas:


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Unit2;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
t: Test;

implementation


{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
t := Test.Create(false);
end;

end.


Unit2.pas

unit Unit2;

interface

uses
Windows, Classes, ADODB, ActiveX;

type
Test = class(TThread)
private
{ Private declarations }
protected
ADODB: TADOConnection;
procedure Execute; override;
end;

implementation

{ Test }

procedure Test.Execute;
begin
CoInitialize(nil);

ADODB := TADOConnection.Create(nil);
while not Terminated do
begin
Sleep(1000)
end;
ADODB.Free;

CoUninitialize;
end;

end.


程序打开后运行后,Excel就打不开,谁知道要怎么处理才行呢?
[解决办法]
这和 Excel 打不打得开 没关系吧。。。
在线程 里面 频繁的 创建 销毁 链接
有必要吗
[解决办法]
应该是没有关系的,是你系统的有问题,跟Delphi没有关系。
[解决办法]
引用:
Quote: 引用:

.NET框架下的office就打的开,office2003打不开。


建议你把ADODB := TADOConnection.Create(nil);放在线程的Create事件中,ADODB.Free;放在Destroy事件中,CoInitialize(nil);和CoUninitialize;在每次操作数据时才调用

CoInitialize(nil);
try
//操作数据库
finally
CoUninitialize;
end;


按那帖子说的,这样应该就行了:
建议你把ADODB := TADOConnection.Create(nil);放在线程的Create事件中,ADODB.Free;放在Destroy事件中

读书人网 >.NET

热点推荐