新聞中心
MFC(Microsoft Foundation Class)是一個(gè)用于Microsoft Windows圖形用戶界面(GUI)開發(fā)的C++類庫(kù)。MFC包含許多類,包括窗口控制、對(duì)話框、按鈕、文本框等控件,但是最強(qiáng)大的功能之一是它能夠與數(shù)據(jù)庫(kù)進(jìn)行交互。

創(chuàng)新互聯(lián)公司成都網(wǎng)站建設(shè)按需定制,是成都網(wǎng)站維護(hù)公司,為門窗定制提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計(jì)服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計(jì)、前端HTML5制作、后臺(tái)程序開發(fā)等。成都網(wǎng)站設(shè)計(jì)熱線:18982081108
本文將介紹。
之一步:連接到數(shù)據(jù)庫(kù)
在使用MFC與數(shù)據(jù)庫(kù)進(jìn)行交互之前,我們首先需要建立到數(shù)據(jù)庫(kù)的連接。MFC提供了一組類來(lái)處理與數(shù)據(jù)庫(kù)的交互,其中最重要的是CDatabase類。以下是一個(gè)建立與Microsoft Access數(shù)據(jù)庫(kù)連接的示例代碼:
“`
CDatabase database;
CString sDriver = _T(“ODBC;”);
CString sDSN = _T(“Driver={Microsoft Access Driver (*.mdb)};DBQ=”);
sDSN += szPath;
TRY {
database.Open(NULL,false,false,sDriver,sDSN);
} CATCH(CDBException,e) {
AfxMessageBox(e->m_strError);
return;
} END_CATCH;
“`
為了建立連接,我們需要提供ODBC驅(qū)動(dòng)程序的名稱和DSN (數(shù)據(jù)源名稱),DSN是一個(gè)包含了數(shù)據(jù)庫(kù)文件路徑的字符串變量。使用CDatabase的Open()方法建立到指定數(shù)據(jù)庫(kù)的連接。
第二步:準(zhǔn)備要查詢的語(yǔ)句
在連接到數(shù)據(jù)庫(kù)后,我們需要準(zhǔn)備要查詢的語(yǔ)句。MFC中使用的是SQL語(yǔ)言,正如我們所知道的一樣,SQL具有其特定的語(yǔ)法、關(guān)鍵字和函數(shù)。例如,以下的查詢語(yǔ)句從一個(gè)名為“Employees”的表中選擇所有數(shù)據(jù):
“`
SELECT * FROM Employees;
“`
我們可以使用CRecordset類來(lái)執(zhí)行這樣的語(yǔ)句。
第三步:執(zhí)行查詢并讀取結(jié)果
在執(zhí)行查詢語(yǔ)句之前,我們需要?jiǎng)?chuàng)建一個(gè)CRecordset類的對(duì)象,并將SQL語(yǔ)句傳遞給它。CRecordset類是MFC的CRecordset類層次結(jié)構(gòu)的基類,提供了許多方法來(lái)執(zhí)行SQL查詢。
在使用CRecordset之前,我們需要定義一個(gè)派生類,使用預(yù)定義的MFC類向我們的數(shù)據(jù)庫(kù)表發(fā)送SQL查詢并包含查詢結(jié)果的記錄集。例如:
“`
class CEmployeesRecordset : public CRecordset {
public:
CEmployeesRecordset(CDatabase* pDatabase = NULL) : CRecordset(pDatabase) {
m_nFields = 5;
m_nDefaultType = snapshot;
}
CString m_EmployeeID;
CString m_FirstName;
CString m_LastName;
CString m_Title;
COleDateTime m_BirthDate;
virtual CString GetDefaultSQL() {
return _T(“SELECT * FROM Employees”);
}
virtual void DoFieldExchange(CFieldExchange* pFX) {
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Text(pFX, _T(“EmployeeID”), m_EmployeeID);
RFX_Text(pFX, _T(“FirstName”), m_FirstName);
RFX_Text(pFX, _T(“LastName”), m_LastName);
RFX_Text(pFX, _T(“Title”), m_Title);
RFX_Date(pFX, _T(“BirthDate”), m_BirthDate);
}
DECLARE_DYNAMIC(CEmployeesRecordset)
};
“`
我們可以在上面的代碼中看到,定義了一個(gè)名為CEmployeesRecordset的類,它繼承自CRecordset。這個(gè)類定義了5個(gè)成員變量,每個(gè)變量都對(duì)應(yīng)于表中的一個(gè)字段。
成員函數(shù)GetDefaultSQL()定義了默認(rèn)查詢語(yǔ)句。函數(shù)DoFieldExchange()用于定義派生類的成員變量與數(shù)據(jù)庫(kù)中的列之間如何映射。這個(gè)函數(shù)使用RFX_Text()宏來(lái)將數(shù)據(jù)庫(kù)列的值與派生類的成員變量一一對(duì)應(yīng)。
現(xiàn)在,我們可以使用這個(gè)派生類來(lái)從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)。以下是進(jìn)行查詢和讀取的代碼:
“`
CEmployeesRecordset rs(&database);
rs.Open(CRecordset::snapshot, NULL, CRecordset::readOnly);
while(!rs.IsEOF()) {
CString strData;
strData.Format(_T(“%s %s”), rs.m_FirstName, rs.m_LastName);
// 使用 strData
rs.MoveNext();
}
rs.Close();
“`
我們創(chuàng)建了一個(gè)CEmployeesRecordset類對(duì)象,并將其與數(shù)據(jù)庫(kù)連接。然后我們使用Open()函數(shù)打開記錄集。這個(gè)函數(shù)有三個(gè)參數(shù),之一個(gè)參數(shù)是打開記錄集的方式,第二個(gè)參數(shù)是SQL語(yǔ)句,第三個(gè)參數(shù)是記錄集的類型。
在打開記錄集之后,我們就可以通過(guò)一個(gè)while循環(huán)遍歷整個(gè)結(jié)果集,直到IsEOF()方法返回true。在循環(huán)過(guò)程中,我們可以訪問(wèn)派生類的成員變量,將結(jié)果存儲(chǔ)在自己的變量中,或直接使用這些值。我們使用Close()函數(shù)關(guān)閉記錄集并與數(shù)據(jù)庫(kù)斷開連接。
本文介紹了如何在MFC中使用CDatabase和CRecordset類從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)。了解如何使用MFC與數(shù)據(jù)庫(kù)進(jìn)行交互的基礎(chǔ)知識(shí)是在開發(fā)各種應(yīng)用程序時(shí)很必要的一步。MFC不僅會(huì)幫助您更好地處理用戶界面,同時(shí)也為您的應(yīng)用程序提供了一種簡(jiǎn)便的方法來(lái)訪問(wèn)數(shù)據(jù)。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
求問(wèn)MFC 循環(huán)讀取數(shù)據(jù)庫(kù)中的表,表中字段有NULL時(shí)出現(xiàn)異常,如何修改
——解決方案 只能先判斷是否為NULL然后面賦值
或者是數(shù)據(jù)庫(kù)里表睜灶每個(gè)字段的值默認(rèn)為空格” “,這樣就不用判斷了,這是在設(shè)計(jì)數(shù)據(jù)庫(kù)里的表時(shí)定義的,每個(gè)字段都有各種屬性,比如類型,大小,默認(rèn)值,鍵值等屬性
——解決方案也可以對(duì)查詢語(yǔ)句進(jìn)行處理,對(duì)于可能null的字段,改寫為ISNULL(xxxx,”)…強(qiáng)制返回一個(gè)值
——解決方案”SELECT ISNULL(字串字段名,”),…ISNULL(整數(shù)字段名,0)… FROM 表 …”
ISNULL 是SQL Server中的函數(shù),在你構(gòu)造的查詢語(yǔ)句中,由SQL服務(wù)器進(jìn)行解析,確老銀保不會(huì)返回不侍早宴好處理的空值
——解決方案C/C++ code _variant_t var=m_AdoConn.m_pRecordset->GetCollect(“UserNo”); if(var.vt != VT_NULL) m_Grid.SetItemText(i,0,(LPCTSTR)(_bstr_t)var); else m_Grid.SetItemText(i,0,TEXT(“”));
判斷他是不是NULL。是插入字符””不是就插入原值
mfc從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于mfc從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù),如何使用MFC從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù),求問(wèn)MFC 循環(huán)讀取數(shù)據(jù)庫(kù)中的表,表中字段有NULL時(shí)出現(xiàn)異常,如何修改的信息別忘了在本站進(jìn)行查找喔。
香港云服務(wù)器機(jī)房,創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)云服務(wù)器廠商,回大陸優(yōu)化帶寬,安全/穩(wěn)定/低延遲.創(chuàng)新互聯(lián)助力企業(yè)出海業(yè)務(wù),提供一站式解決方案。香港服務(wù)器-免備案低延遲-雙向CN2+BGP極速互訪!
名稱欄目:如何使用MFC從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)(mfc從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù))
文章起源:http://www.dlmjj.cn/article/cdssdic.html


咨詢
建站咨詢
