我用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文件?