function Tdatamoudle.creatpath(const datapath: WideString): HResult;
var dataConnection: TADOConnection;
begin
CoInitialize(nil);
try
dataconnection:=Tadoconnection.Create(nil);
finally
CoUninitialize;
with dataConnection do
  begin
    Connected:=false;
    loginprompt:=false;
    ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;Data Source=MS Access Database;Initial Catalog='+datapath;
    Connected:=true;
  end;
end;
end;
我希望将TADOCONNECTION封装在COM里,通过传递的路径进行创建连接,可是在调用时总会报错,请各位大大帮帮忙哦!

解决方案 »

  1.   

    你是否用用有带ODBC的Access数据库,要注意连接初始路径,建议换OLE DB的连接方式试试.
      

  2.   

    这个不是问题啊!主要还是在COM中如何生成和创建的问题,而非连接方式。
      

  3.   

    TADOConnection本来就是Borland封装了MDAC的connection
    干嘛还要再封装一遍?楼主用Import Type Library导入Microsoft ActiveX Data Objects 2.x Library
    直接用_Connection就可以了
      

  4.   

    呵呵,主要是希望自己做个数据池,将TADOConnection 以及各种TADOQuery等封装到一个COM里,以便自己的程序直接调用!呵呵!类似DATAMOULD的作用!不过是所有引用的程序都是用这里同一个数据的。
      

  5.   

    CoInitialize(nil);
      try
        dataconnection:=Tadoconnection.Create(nil);
        with dataConnection do
        begin
          Connected:=false;
          loginprompt:=false;
          ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;Data Source=MS Access Database;Initial Catalog='+datapath;
          Connected:=true;
        end;
      finally
        CoUninitialize;
      end;
    下面还在用dataConnection,你这么快就调用CoUninitialize;肯定会出错。
      

  6.   

    同意 wilmer(许多伟劣茂牌) 还有,Tadoconnection创建和析构的时候,
    会自动调用CoInitialize,CoUninitialize
    如果没有特殊要求,可以不用手动处理CoInitialize,CoUninitialize
      

  7.   

    uses
      Windows, ActiveX, Classes, ComObj, check_TLB, StdVcl, strutils, SysUtils, DB, ADODB;type
      TMyCheck = class(TTypedComObject, IMyCheck)
      protected
        dataConnection: TADOConnection;
        function creatdatapath(const datapath: WideString): HResult; stdcall;
      end;function TMyCheck.creatdatapath(const datapath: WideString): HResult;
    begin
    with dataConnection do
      begin
        Connected:=false;
        loginprompt:=false;
        ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;Data Source=MS    Access Database;Initial Catalog='+datapath;
        Connected:=true;
      end;  
    end;我现在将TADOConnection声明在了类里,但是在程序里调用这个函数时,照样还是跳出错误,是否就是说TADOConnection控件不能在COM里封装使用?
    我只想将连接的功能放到自己的COM里,为什么这样是不可以的呢?
      

  8.   

    COM调用出错啊!只要是有一句赋值给TADOCONNECTION的就出错 !