【发布时间】:2014-03-24 20:15:52
【问题描述】:
我已经浏览了大量关于此的文章和论坛,但我仍然没有找到我的解决方案。尽管这个网站上也有好几篇这样的帖子。
他们将这些事情作为答案:
安装这个:http://www.microsoft.com/en-us/download/details.aspx?id=13255 我无法安装 x86 版本,因为我有 office x64 2010。但我确实安装了该软件包的 x64 版本。
安装这个http://www.microsoft.com/en-us/download/details.aspx?id=23734 我试过了,没有结果。
确保您的应用程序目标正确(即 x86) 我 100% 确定我的应用程序是 32 位的。
我的工作环境如下:
Visual Studio 2012 专业版
编码语言为 C++
Microsoft Office 2010
Windows 8 x64
这是我正在使用的代码:
class Credential
{
public:
TCHAR CredentialID[3];
TCHAR CredentialName[255];
BEGIN_COLUMN_MAP(Credential)
COLUMN_ENTRY(1, CredentialID)
COLUMN_ENTRY(2, CredentialName)
END_COLUMN_MAP()
};
还有这个:
try
{
CDataSource ds;
CSession session;
ATL::CCommand<CAccessor<Credential>> cust;
HRESULT hr = CoInitialize(0);
if(FAILED(hr))
{
Console_Output("Can't start COM!?\n");
return;
}
hr = ds.OpenFromInitializationString(L"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=MPFDatabase.accdb;");
Console_Output("%d\n", hr);
if(FAILED(hr))
{
Console_Output("Can't open Nwind\n");
return;
}
hr = session.Open(ds);
if(FAILED(hr))
{
Console_Output("Can't open Nwind SESSION\n");
ds.Close();
return;
}
TCHAR mySQL[] = "SELECT * FROM Credential";
hr = cust.Open(session, mySQL);
if(FAILED(hr))
{
Console_Output("Can't open Nwind TABLE\n");
session.Close();
ds.Close();
return;
}
while(cust.MoveNext() == S_OK)
{
Console_Output("%s -- %s\n", cust.CredentialID, cust.CredentialName);
}
cust.Close();
session.Close();
ds.Close();
}
catch(std::exception &Ex)
{
Console_Output("ex: %s\n", Ex.what());
}
我到了调用 ds.OpenFromInitializationString 的地步,但随后它要么在没有任何通知的情况下停止我的应用程序(也不例外)。或者我会在我的控制台中打印“无法打开 Nwind\n”。
这 2 个结果取决于我安装的建议答案。
我已经为我的数据源尝试了绝对和相对路径。 我 100% 确定它没有被锁定或类似的东西。我自己创建了数据库,它只包含 2 个表,没什么特别的。
如果我在 windows powershell 中列出我的提供程序,我会得到这些提供程序:
SQLOLEDB
MSQLAP
MSQLAP
MSDataShape
SQLNCLI11
Microsoft.ACE.OLEDB.12.0
ADsDSOObject
SQLNCLI11 枚举器
Windows 搜索数据源
MSDASQL
MSDASQL 枚举器
SQLOLEDB 枚举器
MSDAOSP
如你所见,ace引擎确实安装好了。
编辑:
忘了提到它与我计算机上的 ms access 2010 中制作的本地 accdb 文件有关。如果不清楚。
【问题讨论】:
-
欢迎来到 Stack Overflow!请注意,标签是独立的,不能组合起来创建概念。也就是说,结合
[microsoft]、[access]和[database]与[ms-access]标签的含义不同。请务必阅读选择标签时出现的有用说明!
标签: c++ ms-access ms-access-2010