打开Access命令
Microsoft.Jet.OLEDB.4.0,microsoft.ACE.oledb.12.0遇到提示这种东西没有注册到,解决方法是先检查有没有安装offcie和access软件。前一种要Office2003,后一种要Office2007以上版本。
ACE 引擎是随 Office 2007 一起发布的数据库连接组件,既可以访问 Office 2007,也可以访问 Office 97-2003。
另外:Microsoft.ACE.OLEDB.12.0 可以访问正在打开的 Excel 文件,而 Microsoft.Jet.OLEDB.4.0 是不可以的。
所以,在使用不同版本的office时,要注意使用合适的引擎。
以上对access同样有效。
Jet连接语句:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\您 的数据库名.mdb;Persist Security Info=True;Jet OLEDB:Database Password=您的数据库密码
ACE连接语句:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\您 的数据库名.accdb;Persist Security Info=True;Jet OLEDB:Database Password=您的数据库密码
实现代码:
_ConnectionPtr pAccConnect;
_CommandPtr pAccCmd;
try
{
if (FAILED(pAccConnect.CreateInstance(_uuidof(Connection))))
{
return false;
}
// 没有密码的数据库即使加上密码选项连接也不报错,所以如果通过连接来判读就无法识别无密码的数据库
std::string strConnect = "";
CString strPasswordConnect;
strPasswordConnect.Format(L"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s;Persist Security Info=True;Jet OLEDB:DataBase Password=%s", strFile, _strPassword);
strConnect = CW2A(strPasswordConnect);
pAccConnect->CursorLocation = adUseClient;
if (FAILED(pAccConnect->raw_Open((_bstr_t)strConnect.c_str(), NULL, NULL, adModeUnknown)))
{
return false;
}
}
catch (_com_error * e)
{
std::string str = (char *)e->Description();
CString strErr = e->ErrorMessage();
return false;
}
pAccCmd.CreateInstance(__uuidof(Command));
pAccCmd->ActiveConnection = pAccConnect;
如何判断ACCESS数据库有无密码
因为没有密码的数据库即使加上密码选项连接也不报错,所以如果通过连接来判读就无法识别无密码的数据库。
通过设置密码可以来测试数据库是否有密码,这是由于修改数据库密码的前提是数据库必须先有密码才行,如果数据库原先没有密码则会报错。
更多推荐
C++读取Access数据库
发布评论