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

dll 中使用ADOQuery 访问数据库,出错,错在那里?该怎么解决

2012-03-29 
dll 中使用ADOQuery 访问数据库,出错,错在那里?dll 代码usesWindows, StrUtils, Messages, SysUtils, Vari

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;……

热点排行