MFC + Access 用户验证程序(初级数据库编程)
MFC + Access 用戶驗證程序(初級數(shù)據(jù)庫編程)
轉(zhuǎn)自:企業(yè)即時通訊
軟件流程: 彈出對話框,要求輸入用戶及密碼,正確則跳到主對話框,錯誤則要求重新輸入,關(guān)閉則什么也不做退出。 三無程序,有用的或剛學(xué)ADO的看看。
?
// stdafx.h
// stdafx.h : include file for standard system include files, //? or project specific include files that are used frequently, but //????? are changed infrequently //
#if !defined(AFX_STDAFX_H__B170E8A6_57B5_4B19_A471_C368C30871F1__INCLUDED_) #define AFX_STDAFX_H__B170E8A6_57B5_4B19_A471_C368C30871F1__INCLUDED_
#if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000
#define VC_EXTRALEAN??// Exclude rarely-used stuff from Windows headers
#include <afxwin.h>???????? // MFC core and standard components #include <afxext.h>???????? // MFC extensions #include <afxdisp.h>??????? // MFC Automation classes #include <afxdtctl.h>??// MFC support for Internet Explorer 4 Common Controls #ifndef _AFX_NO_AFXCMN_SUPPORT #include <afxcmn.h>???// MFC support for Windows Common Controls #endif // _AFX_NO_AFXCMN_SUPPORT
#include <icrsint.h> #import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("EOF","adoEOF")
//{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__B170E8A6_57B5_4B19_A471_C368C30871F1__INCLUDED_) ---------------------------------------------------------------------------------------------------------------------------------------------------
#if !defined(AFX_LOGINDLG_H__C757DD49_652B_41A1_84C3_EC0D3C40A07F__INCLUDED_) #define AFX_LOGINDLG_H__C757DD49_652B_41A1_84C3_EC0D3C40A07F__INCLUDED_
#if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // LoginDlg.h : header file //
/ // CLoginDlg dialog
class CLoginDlg : public CDialog { // Construction public: ?BOOL UserValid(); ?CLoginDlg(CWnd* pParent = NULL);?? // standard constructor
// Dialog Data ?//{{AFX_DATA(CLoginDlg) ?enum { IDD = IDD_DIALOG1 }; ??// NOTE: the ClassWizard will add data members here ?//}}AFX_DATA
// Overrides ?// ClassWizard generated virtual function overrides ?//{{AFX_VIRTUAL(CLoginDlg) ?protected: ?virtual void DoDataExchange(CDataExchange* pDX);??? // DDX/DDV support ?//}}AFX_VIRTUAL
// Implementation protected:
?// Generated message map functions ?//{{AFX_MSG(CLoginDlg) ?virtual void OnOK(); ?virtual void OnCancel(); ?virtual BOOL OnInitDialog(); ?//}}AFX_MSG ?DECLARE_MESSAGE_MAP() };
//{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_LOGINDLG_H__C757DD49_652B_41A1_84C3_EC0D3C40A07F__INCLUDED_)
---------------------------------------------------------------------------------------------------------------------------------------------------
// LoginDlg.cpp : implementation file //
#include "stdafx.h" #include "userlogin.h" #include "LoginDlg.h" #include "userloginDlg.h"
#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif
/ // CLoginDlg dialog
CLoginDlg::CLoginDlg(CWnd* pParent /*=NULL*/) ?: CDialog(CLoginDlg::IDD, pParent) { ?//{{AFX_DATA_INIT(CLoginDlg) ??// NOTE: the ClassWizard will add member initialization here ?//}}AFX_DATA_INIT }
void CLoginDlg::DoDataExchange(CDataExchange* pDX) { ?CDialog::DoDataExchange(pDX); ?//{{AFX_DATA_MAP(CLoginDlg) ??// NOTE: the ClassWizard will add DDX and DDV calls here ?//}}AFX_DATA_MAP }
BEGIN_MESSAGE_MAP(CLoginDlg, CDialog) ?//{{AFX_MSG_MAP(CLoginDlg) ?//}}AFX_MSG_MAP END_MESSAGE_MAP()
/ // CLoginDlg message handlers
void CLoginDlg::OnOK() { ?// TODO: Add extra validation here /*?char *szBuf = new char[128]; ?GetDlgItemText(IDC_EDIT1, szBuf, 128); ?MessageBox(szBuf);*/ ?if (! UserValid()) ??return;
?CDialog::OnOK(); }
void CLoginDlg::OnCancel() { ?// TODO: Add extra cleanup here
?CDialog::OnCancel(); }
BOOL CLoginDlg::UserValid() { ?_ConnectionPtr &cPtr = ((CUserloginDlg*)GetParent())->m_pConn; ?char* szUserName = (char*)((CUserloginDlg*)GetParent())->m_szUserName;
?_RecordsetPtr pRs; ?pRs.CreateInstance(__uuidof(Recordset));
?// 確保用戶名輸入不為空 ?char szName[128]; ?GetDlgItemText(IDC_EDIT1, szName, 128); ?if (NULL == szName[0]) ?{ ??AfxMessageBox("用戶名不能為空!"); ??return FALSE; ?} ?char szpw[128]; ?GetDlgItemText(IDC_EDIT2, szpw, 128); ?if (NULL == szpw[0]) ?{ ??AfxMessageBox("密碼不能為空!"); ??return FALSE; ?}
?// 從 account 表里讀出用戶信息 ?char szSQL[256]; ?sprintf(szSQL, "%s%s", "SELECT * FROM account where username='", szName); ?strcat(szSQL, "'");
?try ?{ ??HRESULT hr = pRs->Open(szSQL, ???cPtr.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
??// 確保用戶存在 ??if (pRs->adoEOF) ??{ ???AfxMessageBox("用戶名無效,請重新輸入!"); ???pRs->Close(); ???pRs.Release(); ???return FALSE; ??} ?}
?catch (_com_error e) ?{ ??AfxMessageBox(e.ErrorMessage()); ?}
?CString l_str; ?variant_t var;
?try ?{ ??var = pRs->GetCollect(_variant_t("password")); ??if (var.vt != VT_NULL) ??{ ???l_str = (LPCTSTR)_bstr_t(var); ???if (l_str == szpw) ???{ ???//?AfxMessageBox("密碼正確"); ????strcpy(szUserName, szName); ???} ???else ???{ ????AfxMessageBox("密碼錯誤,請重新輸入!"); ????return FALSE; ???} ??} ??else ??{ ???l_str = _T("none"); ???AfxMessageBox(l_str); ???return FALSE; ??} ?} ?catch (_com_error e) ?{ ??AfxMessageBox(e.Description()); ?} ?pRs->Close(); ?pRs.Release(); }
BOOL CLoginDlg::OnInitDialog() { ?CDialog::OnInitDialog(); ? ?// TODO: Add extra initialization here ?return TRUE;? // return TRUE unless you set the focus to a control ?????????????? // EXCEPTION: OCX Property Pages should return FALSE }
--------------------------------------------------------------------------------------------------------------------------------------------------
// userlogin.h : main header file for the USERLOGIN application //
#if !defined(AFX_USERLOGIN_H__433A5C98_5C19_49A2_8ACA_5AD5FF116D77__INCLUDED_) #define AFX_USERLOGIN_H__433A5C98_5C19_49A2_8ACA_5AD5FF116D77__INCLUDED_
#if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000
#ifndef __AFXWIN_H__ ?#error include 'stdafx.h' before including this file for PCH #endif
#include "resource.h"??// main symbols
/ // CUserloginApp: // See userlogin.cpp for the implementation of this class //
class CUserloginApp : public CWinApp { public: ?CUserloginApp();
// Overrides ?// ClassWizard generated virtual function overrides ?//{{AFX_VIRTUAL(CUserloginApp) ?public: ?virtual BOOL InitInstance(); ?//}}AFX_VIRTUAL
// Implementation
?//{{AFX_MSG(CUserloginApp) ??// NOTE - the ClassWizard will add and remove member functions here. ??//??? DO NOT EDIT what you see in these blocks of generated code ! ?//}}AFX_MSG ?DECLARE_MESSAGE_MAP() };
/
//{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_USERLOGIN_H__433A5C98_5C19_49A2_8ACA_5AD5FF116D77__INCLUDED_) ----------------------------------------------------------------------------------------------------------------------------------------------
// userlogin.cpp : Defines the class behaviors for the application. //
#include "stdafx.h" #include "userlogin.h" #include "userloginDlg.h"
#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif
/ // CUserloginApp
BEGIN_MESSAGE_MAP(CUserloginApp, CWinApp) ?//{{AFX_MSG_MAP(CUserloginApp) ??// NOTE - the ClassWizard will add and remove mapping macros here. ??//??? DO NOT EDIT what you see in these blocks of generated code! ?//}}AFX_MSG ?ON_COMMAND(ID_HELP, CWinApp::OnHelp) END_MESSAGE_MAP()
/ // CUserloginApp construction
CUserloginApp::CUserloginApp() { ?// TODO: add construction code here, ?// Place all significant initialization in InitInstance }
/ // The one and only CUserloginApp object
CUserloginApp theApp;
/ // CUserloginApp initialization
BOOL CUserloginApp::InitInstance() { ?OleInitialize(NULL); ?AfxEnableControlContainer();
?// Standard initialization ?// If you are not using these features and wish to reduce the size ?//? of your final executable, you should remove from the following ?//? the specific initialization routines you do not need.
#ifdef _AFXDLL ?Enable3dControls();???// Call this when using MFC in a shared DLL #else ?Enable3dControlsStatic();?// Call this when linking to MFC statically #endif
?CUserloginDlg dlg; ?m_pMainWnd = &dlg; ?int nResponse = dlg.DoModal(); ?if (nResponse == IDOK) ?{ ??// TODO: Place code here to handle when the dialog is ??//? dismissed with OK ?} ?else if (nResponse == IDCANCEL) ?{ ??// TODO: Place code here to handle when the dialog is ??//? dismissed with Cancel ?}
?// Since the dialog has been closed, return FALSE so that we exit the ?//? application, rather than start the application's message pump. ?return FALSE; }
總結(jié)
以上是生活随笔為你收集整理的MFC + Access 用户验证程序(初级数据库编程)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 生意参谋_GitHub -
- 下一篇: 用workbench给表重命名_MySQ