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

dll 中施用ADOQuery 访问数据库,出错,错在那里

2013-01-02 
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判断

  

while
 RightStr(dataPath, 1) <> '\' do
  begin
  dataPath := dataPath + '\';
  end;

[解决办法]
使用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;……

+1

热点排行