2017-07-02 64 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「不起作用。