原文連接地址:https://blog.csdn.net/HW140701/article/details/71077579html
Win32編譯環境下,用ADO數據庫鏈接Access數據庫通常都不會報錯,可是最近因爲項目上的須要,程序須要編譯成64位以便申請到更多的使用內存空間,當把編譯方式從Win32改成x64的時候,忽然出現了數據庫鏈接出現未知錯誤,這時候就猜到了應該是編譯環境的改變致使了數據庫鏈接出錯,在參考了其餘大神的解決方案以後,終於解決了這個問題,個人環境爲Win7 64+MFC(VS2010)+ADO+Access2007。數據庫
參考連接以下:編程
http://blog.csdn.net/sundacheng1989/article/details/17925431ide
http://www.cnblogs.com/bluedoctor/p/3925871.htmlui
http://blog.csdn.net/kirawoo/article/details/39032387spa
http://blog.csdn.net/u010891996/article/details/12522911.net
解決方法:命令行
步驟1:去官網下載AccessDatabaseEngine_64.exe,下載連接code
https://www.microsoft.com/zh-cn/download/details.aspx?id=13255orm
或者直接去個人下載頻道進行下載
http://download.csdn.net/detail/hw140701/9830665
驟2:這一個步驟是強制安裝剛剛下載的AccessDatabaseEngine_64.exe,若是不強制安裝的話,它會要求你卸載你所安裝的所有的Office軟件,那多麻煩!!!,因此選擇忽略提醒,強制安裝,
打開cmd.exe,在命令行輸入「你的AccessDatabaseEngine_64.exe的存放路徑」 /passive,好比個人就是"F:\軟件\我下載的\Windows數據庫編程\AccessDatabaseEngine_64.exe" /passive強制安裝,輸完這個命令就等待安裝完成。
步驟3:在安裝完上述引擎以後,你須要修改一下你的代碼,在win32編譯環境下咱們的數據庫的連接字符串是
m_connection.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s",databaseName);
若是你須要在x64的編譯環境環境下鏈接Access數據庫你須要修改成
m_connection.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s",databaseName);
爲了更好的適配不一樣的編譯環境,我將個人代碼修改成
1 //初始化COM,建立ADO鏈接對象實例 2 getsample_pConnection.CreateInstance(__uuidof(Connection)); 3 getsample_pRecordset.CreateInstance(__uuidof(Recordset)); 4 //構造數據庫鏈接字符 5 CString m_connection; 6 #if defined _WIN64//若是是64位程序 7 m_connection.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s",databaseName); 8 #elif defined _WIN32//若是是32位程序 9 m_connection.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s",databaseName); 10 #endif 11 12 try 13 { 14 //使用Open方法鏈接數據庫 15 getsample_pConnection->Open(_bstr_t(m_connection),"","",adModeUnknown); 16 //如下兩行用來設置狀態欄的提示信息 17 } 18 catch(_com_error e)//捕捉數據庫打開過程當中的錯誤信息 19 { 20 21 CString tempErrorMessage; 22 tempErrorMessage.Format("數據庫鏈接失敗,錯誤緣由爲:%s",e.ErrorMessage()); 23 AfxMessageBox(tempErrorMessage) 24 }
當是64位程序的時候就爲
m_connection.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s",databaseName);
當是32位程序的時候就爲
m_connection.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s",databaseName);
而後重啓一下PC,應該就能夠編譯成功了。