MFC實現登錄對話框連接access數據庫方式


編寫一個簡單的登錄對話框

大家好,我們利用MFC編寫一個簡單的登錄對話框。主窗體是單文檔界面。程序運行的時候,先彈出一個簡單的登錄對話框,輸入用戶名和密碼后主窗體顯示出來。

1、開打VC++6.0。點擊文件,新建,點擊工程中的MFC AppWizard(exe),在右邊選擇工程保存的位置,並且為工程取好名字。

 

2、點擊確定后,選擇單個文檔,你可以一直點擊下一步,直到完成,或者在這里直接點擊完成即可,完成后界面如下。

 

3、點擊工具欄中的“!”號試着編譯運行一次,看是否有問題。如果沒有問題,我們繼續。點擊左邊的ResourceView,在Dialog上面鼠標右鍵單擊彈出一彈出框,單擊Insert Dialog

 

4、在右邊新增的對話框中,適當改變窗口大小,加入靜態文本框和文本編輯框。

 

5、鼠標右鍵單擊剛才加進去的第一個靜態文本框控件,點擊屬性。在彈出的標題中填寫:輸入用戶名:。然后回車

 

同樣在下面的第二個靜態文本框的屬性標題改為:輸入密碼:。然后回車。

6、在第一個文本編輯框上右鍵單擊,點擊屬性,把ID框中的IDC_EDIT1改為容易理解的名字,如:IDC_EDIT_NAME,注意前面的IDC_EDIT最好不要去掉,這樣容易見名而知義。同樣,對第二個文本編輯框的屬性中的IDC_EDIT2改為:IDC_EDIT_PWD

 

 

7、在對話框上的任何空白的地方右鍵單擊,點擊建立類向導。

 

然后彈出

 

選擇建立Create a new class,點擊OK

 

這是為這個對話框創建一個新的類。在Name中,為該對話框類取個名字:CDlg_login。下面的Base class以及Dialog ID不要隨便改動。然后點擊OK。這樣新的類CDlg_login就與本對話框建立起了聯系。

 

8、點擊OK后,我們並沒有退出建立類向導。

 

點擊member variables

 

9、左鍵雙擊IDC_EDIT_NAME(或者單擊后,點擊右邊的add variables),為IDC_EDIT_NAME增加一個對應在類中的名字:m_login_name。其他地方不要改動。

 

點擊OK。同樣也對IDC_EDIT_PWD也取一個名字:。

 

10、點擊確定。這樣我們就建立好了登錄對話框以及其對應的類CDlg_login。我們在ClassView里面可以看到我們新加入 類CDlg_login

 

11、我們注意到右邊的對話框的標題欄上依然還是Dialog,我們可以在對話框空白的地方單擊右鍵,點擊屬性,在標題中輸入:請登錄。其他地方不要改動。

 

12、這個時候如果編譯運行的話,該對話框並不會自動彈出來。我們要讓程序開始運行的時候自動彈出登錄對話框。點擊右邊的FileView,點擊source files,雙擊MainFrm.cpp。這樣在右邊就打開了該文件。找到CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct),這是窗體框架創建函數。在該函數的后面(在return 0 ;的前面)加入語句(注意大小寫):

CDlg_login dlg;//生成一個登錄對話框對象

dlg.DoModal();//讓對話框對象以有模式形式顯示出來

 

這個時候編譯肯定會出錯,我們要在MainFrm.cpp文件的前面添加:#include "dlg_login.h"。編譯后錯誤消失。運行結果如下。

 

13、在運行過程中,點擊OK后,主窗體會顯示出來,我們並沒有在用戶名以及密碼框中輸入。下面我們要求輸入正確的用戶名和密碼,主窗體才能顯示出來。

14、點擊左邊的ResourceView,雙擊Dialog中的IDD_DIALOG1,然后雙擊右邊的OK按鈕,

 

要求增加一個成員函數,點擊OK即可。我們將在下面的截圖所在的void CDlg_login::OnOK()函數中進行編程。

 

15、在void CDlg_login::OnOK()函加入如下代碼:

void CDlg_login::OnOK() 

{

// TODO: Add extra validation here

this->UpdateData(true);

if(this->m_login_name=="math" && this->m_login_pwd=="1234")

CDialog::OnOK();

else

MessageBox("登錄有誤");

}

編譯運行即可實現我們的要求了。

 

16、等等,我們發現輸入密碼的時候是明碼,不是星號顯示的。我們還要在登錄對話框的密碼文本編輯框的屬性中更改。在登錄對話框,右鍵點擊密碼文本框,點擊屬性,點擊style,選中password回車即可。

 

17、本程序還有很多弊端,比如,關閉登錄對話框也可以進行主窗體,點擊cancel也可以進入,用戶名和密碼不能更改,這要求和數據庫聯系起來。大家可以思考一下,怎么該進。全文完畢。


18、現在連接數據庫。先利用access建立數據庫,名字為book_db,並建好一個管理員表book_admin

 

19、為book_db建立數據源,打開控制面板,點擊管理工具,點擊打開數據源,添加系統dsn

 

點擊右邊的添加,選擇Microsoft Access Driver(*.mdb),給數據源取個名字比如:book_db_dsn,

然后點擊選擇,選中剛才建立的book_db保存的位置,選中好該數據庫,點擊確定即可。

 

 

最后點擊確定完成了數據源的建立。

 

20、在MFC中建立ADO數據庫連接

stdafx.h文件中添加對ado的支持:

#import "C:\Program Files\Common Files\System\ado\msado15.dll"  no_namespace rename("EOF","adoEOF")

//#include<icrsint.h>  (可選,可不用添加此頭文件)

 

CDlg_login.h頭文件中添加:

_ConnectionPtr  m_pConnection;

_RecordsetPtr m_pRecordset;

 

21、連接數據源,在OnOk函數中輸入如下:

void CDlg_login::OnOK() 

{

// TODO: Add extra validation here

this->UpdateData(true);

::CoInitialize(NULL);

this->m_pConnection.CreateInstance(__uuidof(Connection));

this->m_pRecordset.CreateInstance(__uuidof(Recordset));

this->m_pConnection->Open("DSN=book_db_dsn","","",0);//上面四行為打開數據源連接

CString str;

str.Format("select * from book_admin where admin_name='%s' and admin_pwd='%s'",this->m_login_name,this->m_login_pwd);

BSTR bstrSQL=str.AllocSysString();

this->m_pRecordset->Open(bstrSQL,(IDispatch*)this->m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);

if(!this->m_pRecordset->adoEOF)

CDialog::OnOK();

else

MessageBox("Failed");

this->m_pRecordset->Close();

this->m_pConnection->Close();

}

 

至此ADO數據源連接完畢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM