在C++Builder中创建Access odbc数据源

类别:编程语言 点击:0 评论:0 推荐:

想用BDE导Access数据库,要创建ODBC 数据源。找了半天也没见着BCB写的代码,所以我改写了一个。如有不足处,请指正。 [email protected]

/*
函数功能:创建Access ODBC数据源
输入参数:DSN--------所要创建的 Access ODBC数据源的名称
          strMDBFile-----------Access 库文件的完整路径
          strDesc---------这个数据源的描述
          strLoginUser---------登录strMDBFile所指的文件的用户名
          strPassword----------登录strMDBFile所指的文件的密码
返回值  :成功返回true, 否则会抛出Exception (这样写会不会有问题呀?)
用    法:
         (1)CreateAccessDSN("jll_access", "c:\\windows\\desktop\\starso.mdb");
         (2)CreateAccessDSN("jll_access2", "c:\\windows\\desktop\\starso.mdb", " ", "Admin", "ok_pwd");
注    意:
         #include <Registry.hpp>
         #include <memory>

         using namespace std;
*/
bool __fastcall CreateAccessDSN(const AnsiString& DSN,
                                const AnsiString& strMDBFile,
                                const AnsiString& strDesc = "no descript",
                                const AnsiString& strLoginUser = "",
                                const AnsiString& strPassword = "")
{
   auto_ptr<TRegistry> spReg(new TRegistry());
   spReg->RootKey = HKEY_LOCAL_MACHINE;  //设置根键值为HKEY_LOCAL_MACHINE
    //找到Software\ODBC\ODBC.INI\ODBC Data Sources
   if (spReg->OpenKey("Software\\ODBC\\ODBC.INI\\ODBC Data Sources", true))
   {//注册一个DSN名称
       spReg->WriteString(DSN, "Microsoft Access Driver (*.mdb)" );
       spReg->CloseKey();
   }else{
    //创建键值失败
       throw Exception("增加ODBC数据源失败");
   }
   找到或创建Software\ODBC\ODBC.INI\MyAccess,写入DSN配置信息
   if (spReg->OpenKey("Software\\ODBC\\ODBC.INI\\" + DSN, true))
   {
      spReg->WriteString("DBQ", strMDBFile);//数据库目录,连接您的数据库
      spReg->WriteString("Description",  strDesc);//数据源描述
      char buf[MAX_PATH];
      ::GetSystemDirectory(buf, MAX_PATH);
      spReg->WriteString("Driver", AnsiString(buf) + "\\odbcjt32.dll" );//驱动程序DLL文件
      spReg->WriteInteger("DriverId", 25 );     //驱动程序标识
      spReg->WriteString("FIL", "Ms Access;" );    //Filter依据
      spReg->WriteInteger("SafeTransaction", 0 );  //支持的事务操作数目
      spReg->WriteString("UID", strLoginUser);//用户名称
      spReg->WriteString("PWD", strPassword);//用户密码
      BYTE bData = 0;
      spReg->WriteBinaryData("Exclusive", &bData, 1);      //非独占方式
      spReg->WriteBinaryData("ReadOnly", &bData, 1 );       //非只读方式
      spReg->CloseKey();
   }else{
      throw("增加ODBC数据源失败");
   };
   //找到或创建Software\ODBC\ODBC.INI\MyAccess\Engines\Jet
  //写入DSN数据库引擎配置信息
    if (spReg->OpenKey("Software\\ODBC\\ODBC.INI\\" + DSN + "\\Engines\\Jet", true))
    {
      spReg->WriteString( "ImplicitCommitSync", "Yes");
      spReg->WriteInteger("MaxBufferSize", 2048 );//缓冲区大小
      spReg->WriteInteger("PageTimeout", 10 );//页超时
      spReg->WriteInteger("Threads", 3 );//支持的线程数目
      spReg->WriteString("UserCommitSync", "Yes");
      spReg->CloseKey();
    }else{
      throw("增加ODBC数据源失败");
    }
    return true;
}

本文地址:http://com.8s8s.com/it/it29189.htm