想用BDE导Access数据库,要创建OdbC 数据源。找了半天也没见着BCB写的代码,所以我改写了一个。如有不足处,请指正。 Mailto:========jianlinlong@163.NET">========jianlinlong@163.net
/*
函数功能:创建Access ODBC数据源
输入参数:DSN--------所要创建的 Access ODBC数据源的名称
strMDBFile-----------Access 库文件的完整路径
strDesc---------这个数据源的描述
strLoginUser---------登录strMDBFile所指的文件的用户名
strPassword----------登录strMDBFile所指的文件的密码
返回值 :成功返回true, 否则会抛出Exception (这样写会不会有问题呀?)
用 法:
(1)CreateAccessDSN("jll_access", "c:windowsdesktopstarso.mdb");
(2)CreateAccessDSN("jll_access2", "c:windowsdesktopstarso.mdb", " ", "Admin", "ok_pwd");
注 意:
#include
#include
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 spReg(new TRegistry());
spReg->rootKey = HKEY_LOCAL_MACHINE; //设置根键值为HKEY_LOCAL_MACHINE
//找到SoftwareODBCODBC.INIODBC Data sources
if (spReg->OpenKey("SoftwareODBCODBC.INIODBC Data Sources", true))
{//注册一个DSN名称
spReg->WriteString(DSN, "microsoft Access driver (*.mdb)" );
spReg->CloseKey();
}else{
//创建键值失败
throw Exception("增加ODBC数据源失败");
}
找到或创建SoftwareODBCODBC.INIMyAccess,写入DSN配置信息
if (spReg->OpenKey("SoftwareODBCODBC.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数据源失败");
};
//找到或创建SoftwareODBCODBC.INIMyAccessEnginesJet
//写入DSN数据库引擎配置信息
if (spReg->OpenKey("SoftwareODBCODBC.INI" + DSN + "EnginesJet", 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;
}
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10748419/viewspace-958295/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10748419/viewspace-958295/