读书人

dll 中使用ADOQuery 访问数据库出错

发布时间: 2012-03-29 12:53:12 作者: rapoo

dll 中使用ADOQuery 访问数据库,出错,错在那里?
dll 代码

uses
Windows, StrUtils, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ADODB, DB, DBCtrls, ExtCtrls, Grids, DBGrids;
{$R *.res}
var
dataPath:string;
ADOQuery: TADOQuery;

begin
dataPath:= ExtractFilePath(ParamStr(0));
while RightStr(dataPath, 1) <> '\' do
begin
dataPath := dataPath + '\';
end;
ADOQuery:=TADOQuery.Create(nil);// 查看在这死机,我想应该是没有初始化,单不知道在那里初始,加什么代码
ShowMessage('2');
ADOQuery.ConnectionString:= 'Provider=MSDASQL.1;Persist Security Info=False;Data Source=MS Access Database;Initial Catalog=' + dataPath + 'data.mdb';
With ADOQuery do
begin
ShowMessage('3');
Close;
SQL.Clear;
SQL.Add('Select type,path From path');
Open;
ShowMessage('kkkkkk');
SQL.Clear;
Close;
end;
ADOQuery.ConnectionString:='';

end.


[解决办法]
错不在adoquery,不过用完最好要执行一下adoquery.free

下面是循环,没有退出循环的代码,用if判断

Delphi(Pascal) code
while
[解决办法]
使用Com组件,需要调用CoInitialize进行初始化,在TADOQuery.Create之前加入CoInitialize(nil);要引用ActiveX这个单元文件,最后调用CoUninitialize;
CoInitialize(nil);
try
ADOQuery:=TADOQuery.Create(nil);
finally
CoUninitialize;
end;
[解决办法]
探讨
使用Com组件,需要调用CoInitialize进行初始化,在TADOQuery.Create之前加入CoInitialize(nil);要引用ActiveX这个单元文件,最后调用CoUninitialize;
CoInitialize(nil);
try
ADOQuery:=TADOQuery.Create(nil);
finally
CoUninitialize;……

读书人网 >.NET

热点推荐