2017-07-02 104 views
0

我用ADODB来读取Excel在32位Windows文件,它的运行文件所遗留的C++代码,它是这样的:使用adodb读取64位Windows 7中的excel文件的C++?

#import "C:/Program Files/Common Files/System/ado/msado15.dll" rename("EOF", "adoEOF") rename("BOF", "adoBOF") 

string conn_str; 
if(*(file_name.back()) == 'x') 
    conn_str = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + file_name + ";Extended Properties=\"Excel 12.0 Xml;HDR=Yes;IMEX=1\""; 
else 
    conn_str = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + file_name + ";Extended Properties=\"Excel 8.0;HDR=Yes\""; 

::CoInitialize(NULL); 

pRec->Open("SELECT * FROM [" + SheetName + "]", conn_str, adOpenStatic, adLockOptimistic, adCmdText)); 

现在移动到新的环境中部署(64位Windows + 64位excel),代码无法运行,错误消息是“无法找到提供程序”。

试图解决这个问题,但在互联网搜索后,我有点困惑。

微软FAQ About Windows DAC/MDAC等似乎是说“Microsoft数据访问组件(MDAC)”包括ADO,OLE DB和ODBC;但MDAC已过时,现在该软件包被称为“Windows数据访问组件(Windows DAC)”,它会自动安装在Windows 7中。

- 所以我不需要在64位Windows 7上安装MDAC ,并且Microsoft Data Access Components (MDAC) 2.8 SP1上的下载是32位的?

但是,那么我怎样才能使用调用msado15.dll的遗留代码来读取excel?

我应该将32位MDAC安装到SysWOW64文件夹并继续使用它吗?但是,这个32位msado能打开一个由64位excel创建的excel文件吗?

或者我应该使用“Windows DAC”中的其他dll在64位窗口上使用ado吗?

或者,我不得不放弃ado并找到其他方式来读取C++中的excel文件?

回答

0

的情况下,在这里的任何一个碰撞,以获得出色的C数据++代码X64的Windows机器上安装的Office 64位,你需要

  • 下载Microsoft Access Database Engine 2016 Redistributable 并安装
  • 进口msadoXX。在C++代码中使用dll
  • 使用正确的连接字符串,在上面的页面中展开“安装说明”,有详细信息如ConnectionString属性为“Microsoft.ACE.OLEDB.12.0”,用于Excel 97-2003工作簿(.xls)的使用“Excel 8.0”,Excel工作簿(.xlsx)使用“Excel 12.0 Xml”等。注意:“Microsoft。 JET.OLEDB“不起作用。