Home  >  Article  >  Database  >  MFC + Access 用户验证程序(初级数据库编程)

MFC + Access 用户验证程序(初级数据库编程)

WBOY
WBOYOriginal
2016-06-07 15:43:111043browse

MFC + Access 用户验证程序(初级数据库编程) 企业即时通讯 软件流程:弹出对话框,要求输入用户及密码,正确则跳到主对话框,错误则要求重新输入,关闭则什么也不做退出。三无程序,有用的或刚学ADO的看看。 ////////////////////////////////////////// s

MFC + Access 用户验证程序(初级数据库编程)

企业即时通讯

软件流程: 弹出对话框,要求输入用户及密码,正确则跳到主对话框,错误则要求重新输入,关闭则什么也不做退出。 三无程序,有用的或刚学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          // MFC core and standard components #include          // MFC extensions #include         // MFC Automation classes #include   // MFC support for Internet Explorer 4 Common Controls #ifndef _AFX_NO_AFXCMN_SUPPORT #include    // MFC support for Windows Common Controls #endif // _AFX_NO_AFXCMN_SUPPORT

#include #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; }

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn