打开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数据库