uses ComObj, DAO97;{$R *.DFM}procedure TOfficeForm.spOLECreateClick(Sender: TObject);
var
  CreateAccess: OleVariant;
begin
  //通过建立ADOX(Microsoft ActiveX(R) Data Objects Extensions)对象进行访问
  CreateAccess:=CreateOleObject('ADOX.Catalog');
  //通过OLE方式创建Access97格式的数据库
  CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.3.51;Data Source=c:\Aceco97.mdb');
end;如何改成C++BUILDER,这个Create()是普通方法还是构造函数?
  

解决方案 »

  1.   

    #include <utilcls.h>
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        //通过建立ADOX(Microsoft ActiveX(R) Data Objects Extensions)对象进行访问
        Variant AdoObj;
        AdoObj=Variant::CreateObject("ADOX.Catalog");
        //通过OLE方式创建Access97格式的数据库
        AdoObj.OleProcedure("Create","Provider=Microsoft Jet 3.51 OLE DB Provider;Data Source=c:\\ba_97.mdb");
        AdoObj.OleProcedure("Create","Provider=Microsoft Jet 4.0 OLE DB Provider;Data Source=c:\\ba_2000.mdb");//  AdoObj= Unassigned;
    }
    我将Provider=中的串修改了一下就可以了,但win2000Sever并未提供ADO 3.51
    所以不能产生Access97库,这个问题就烦了;
      

  2.   

    为什么用 Provider=Microsoft Jet 4.0 OLE DB Provider; 就对了呢?
      

  3.   

              Provider=Microsoft.Jet.OLEDB.3.51;
      改成    Provider=Microsoft Jet 3.51 OLE DB Provider;
    就正常了,你们用DELPHI,用前者会不会出现"发生意外"的错误!
      

  4.   

    哈哈,还是被同事发现这个贴子才上来的!以上问题很简单,由于你系统安装的DAO版本的问题,所以字符串会有点变化,或者你根本就没有安装DAO3.5,这也是为什么Access97建议用DAO方式,Access2000用ADO的方式。具体你可以参考HKEY_CLASSES_ROOT/Microsoft.Jet.OLEDB.4.0,你注册表里面注册的应用程序服务器名称是什么就用什么,当然现在Access2000已经包含在MDAC2.12及以上,不用担心了。或者更笨的办法,将你的DAO350.DLL/DAO351.DLL打开看一下就知道了!注意不要在BCB下妄图用ADO的方式随便创建Access97的数据库,很麻烦!建议你升级BCB及BCB的ADO补丁!原来我由于数据库不同是首先安装Office97后安装Office2000,不升级原来的东西,所以两种版本的DAO都有,一切就这么简单!总之:最好不要用ADO的方式创建Access97数据库,因为当时的标准太乱!
      

  5.   

    Hank谢谢,你终于出山了!
    ok. Access97用Dao3.5,  Access2000用ADO 4.0  !!!!!关于Create()中的参数:
                Provider=Microsoft.Jet.OLEDB.3.51;
      要改成    Provider=Microsoft Jet 3.51 OLE DB Provider;
    我用后者才成功,但你提供的是前者,前者也能成功?! 关注