第一次在VS2010下MFC採用ADO方式連線ACCESS資料庫(詳細過程)
第一步:首先建立基於對話方塊的MFC應用程式Library,然後新增一個使用者登入介面如圖:
並建立此對話方塊的類LoginDlg ,在類中新建兩個變數CString m_strName; CString m_strPassword;並完善相應的建構函式和DoDataExchange 部分程式碼如下:
LoginDlg::LoginDlg(CWnd* pParent /*=NULL*/)
: CDialog(LoginDlg::IDD, pParent)
{
m_strName=_T("");
m_strPassword=_T("");
}
void LoginDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX,IDC_LOGIN_NAME,m_strName);
DDV_MaxChars(pDX,m_strName,8);
DDX_Text(pDX,IDC_LOGIN_PASSWORD,m_strPassword);
DDV_MaxChars(pDX,m_strPassword,8);
}
編譯執行程式,能夠正常執行出現介面
第二步:用ADO方法連線名為Library.mdb的資料庫
1、在stdafx.h中新增#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")
注意:在#include語句後面,不要加到最前面
2、在主對話方塊LibraryDlg.h中新增變數_ConnectionPtr pConn; 用來連線資料庫的物件
在LibraryDlg.cpp的建構函式中新增如下程式碼:
CLibraryDlg::CLibraryDlg(CWnd* pParent /*=NULL*/)
: CDialog(CLibraryDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
CoInitialize(NULL);
pConn = _ConnectionPtr(__uuidof(Connection));
pConn->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/Library.mdb";
pConn->Open("","","",adConnectUnspecified);
}
並在解構函式中pConn->Close();pConn.Release();
此程式碼主要是用來與資料庫建立連線,從主對話方塊執行開始就建立連線,直到程式結束。
注意:Provider的獲取:在VS2010工具選單->連線到資料庫,在新增連線對話方塊中瀏覽到你之前建好的資料庫,並點測試。
如果資料庫連線成功,點高階屬性,Provider就在對話方塊的最下面,copy過來就行了。
第三步:在登入框獲取資料庫中的記錄,並與輸入的使用者名稱和密碼進行對比,以保證正常登入
在LoginDlg.cpp的登入按鈕中新增如下程式碼:
void LoginDlg::OnBnClickedConfirm()
{
// TODO: 在此新增控制元件通知處理程式程式碼
UpdateData(TRUE);
CoInitialize(NULL);
/*CString mSqlStr;
mSqlStr="select * from CLERK where NAME='";
mSqlStr+=m_strName;
mSqlStr+="'";
*/
if (m_strName.IsEmpty()) /*判斷使用者名稱資訊是否為空*/
{
AfxMessageBox(_T("請輸入使用者名稱!"));
return;
}
_RecordsetPtr pRst(__uuidof(Recordset));
pRst = ((CLibraryDlg*)(AfxGetMainWnd()))->pConn->Execute("select * from CLERK ",NULL,adCmdText);
if(pRst->rsEOF)
{
MessageBox(_T("使用者名稱不存在,請重新輸入"));
}
else if ((CString)pRst->GetCollect("PASSWORD")==m_strPassword)
{
CDialog::OnOK();
}
else
{
MessageBox(_T("密碼不正確"));
}
pRst->Close();
pRst.Release();
CoUninitialize();
}
編譯執行就可看到結果了
下一步準備將資料庫換成mysql.......