2023年如何在vc++的mfc中使用cdao*庫
摘要 : 詳細介紹如何在vc++的mfc中使用cdao庫,需要安裝哪些庫,實現對access 1995的mdb檔案呼叫。選擇mfc作為靜態庫解決cdao被遺棄的問題。
測試環境 : visual studio 2017
使用mfc的庫,必須選擇mfc專案。如果vs沒有安裝mfc,安裝方法如下。
tools > get tools and features > open visual studio installer > individual components > install visual c++ mfc for x86 and x64
安裝之後,你就擁有了可以使用的mfc庫檔案,在solution explorer中external dependencies中就會多出很多afx的庫。為了使用cdao*庫,只需要呼叫標頭檔案。
#include 「afxdao.h」
編譯環境需要選擇x86,因為jet和dao3.6只支援32位系統。
編譯之後回報錯誤error c4995 『cdaodatabase』: name was marked as #pragma deprecated mfccdao c:\users\thinkpad\source\repos\mfccdao\mfccdao\mfccdaodlg.cpp 93
在之前這只是warning現在是error,編譯失敗。
解決方法在開頭加入下面這句話,忽視報錯資訊。
#pragma warning( disable:4995 ) // disable deprecated warning
這張**釋了afxdao.h的reference有哪些.具體的資訊見下面的鏈結.
如何在mfc除錯**,在控制台輸出的方法。
trace(「nom : %s \n」, nom);
現在準備工作都做完了,我們可以用cdao*呼叫資料庫的資訊了。
這裡我事先準備了乙個access 1995 的資料庫mdb檔案。裡面有乙個person表,兩個屬性nom和age,型別字元和int。將這段**放到生成form裡的函式即可。我這裡是bool cmfccdaodlg::oninitdialog()
cdaodatabase db;
db.open(_t("c:\\users\\thinkpad\\source\\repos\\accessdb\\db95.mdb"));
cdaorecordset rs(&db);
cstring strsql = _t("select * from person");
rs.open(dbopendynaset, strsql, dbreadonly);
colevariant var;
cstring nom;
int age;
while (!rs.iseof())
rs.close();
db.close();
簡單的解釋 :
_t會將字串轉換成lpctstr,只是cdao*函式要求的格式。
trace函式用於在控制台輸出。
rs記錄了一行的資訊,要想獲得某一列的資訊,用getfieldvalue(_t(「nom」), var);將資訊先存到var中,在將var的值列印出來。
控制台會輸出 :
c:\users\thinkpad\source\repos\mfccdao\mfccdao\mfccdaodlg.cpp(111) : atltracegeneral - nom : a
c:\users\thinkpad\source\repos\mfccdao\mfccdao\mfccdaodlg.cpp(114) : atltracegeneral - age : 10
c:\users\thinkpad\source\repos\mfccdao\mfccdao\mfccdaodlg.cpp(111) : atltracegeneral - nom : b
c:\users\thinkpad\source\repos\mfccdao\mfccdao\mfccdaodlg.cpp(114) : atltracegeneral - age : 20
c:\users\thinkpad\source\repos\mfccdao\mfccdao\mfccdaodlg.cpp(111) : atltracegeneral - nom : c
c:\users\thinkpad\source\repos\mfccdao\mfccdao\mfccdaodlg.cpp(114) : atltracegeneral - age : 30
同時會生成一些unload資訊,這裡我很困惑,比如
『mfccdao.exe』 (win32): unloaded 『c:\windows\syswow64\expsrv.dll』
『mfccdao.exe』 (win32): unloaded 『c:\windows\syswow64\msjet40.dll』
『mfccdao.exe』 (win32): unloaded 『c:\program files (x86)\common files\microsoft shared\dao\dao360.dll』
『mfccdao.exe』 (win32): unloaded 『c:\windows\syswow64\sogoutsf.ime』
沒有載入msjet40.dll或者dao360.dll。沒有載入dll,程式怎麼執行呢?
解決cdao*被遺棄的問題。
編譯程式的時候選擇,use mfc in a static library
具體方法 : project > yourprojectname properties… > configuration properties > general > project defaults > use of mfc > select use use mfc in a static library
事實上,只能選擇in a static library或 in a shared dll。選擇standard windows libraries會報錯,因為這是乙個mfc程式。
選擇mfc作為靜態庫的原因 :這樣程式編譯之後會把所有使用的庫檔案都鏈結進入exe檔案,不存在以後cdao*庫不遺棄的問題。如果,使用動態庫,如果以後microsoft刪除了這個庫,程式就執行不了了。當然,使用靜態庫,程式會變大。占用更多的記憶體。
參考retrieving, writing, and creating data in a microsoft access file (cdaodatabase and cdaorecordset)
如何在VC中嵌入IE
一 需要在你的程式中嵌入ie瀏覽器的視窗。有兩種實現方法,其一,新增chtmlview的視類 其二,新增ie瀏覽器的activex控制項。其實不管用什麼方法,除了函式名稱稍有區別外,它們最終都呼叫了微軟的iwebbrowser2的介面。二 方法和步驟 1.建立乙個對話窗形式的mfc應用程式,注意在導...
如何在VC6 MFC中使用GDI
gdi 可應用於二維向量圖象,柵格圖象及排版,是為c c 程式設計師而設計的表現為c 類而存在的介面,能用於一切基於windows的應用中。作為gdi的後繼者,gdi 在gdi中增加了新功能,如文字的反鋸齒,漸變筆刷,alpha溶合 也優化了gdi許多已有的功能。此外,gdi 改變了程式設計模式,使...
FAQ 如何在 中獲得 的指標 MFC
問 請問如何在乙個全域性函式中,獲得它檢視類,文件類得指標啊?問 如何在乙個對話方塊中,獲得它檢視類,文件類得指標啊?舉例來說,如果檢視的成員函式需要建立乙個對話方塊,而對話方塊需要訪問文件,那麼可以在對話方塊類中宣告乙個文件指標,檢視的成員函式建立對話方塊之後把對話方塊中的文件指標變數的值設定為和...