1. 程式人生 > >第一次在VS2010下MFC採用ADO方式連線ACCESS資料庫(詳細過程)

第一次在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.......