首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2013-07-04 
ADO控件在线程中使用的问题TADOConnection控件在线程中创建后,如果线程不退出,就打不开Excel,Word之类用的

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事件中

热点排行