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

来源:互联网 发布:java mysql怎么改密码 编辑:程序博客网 时间:2024/05/22 08:00

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 <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{// Constructionpublic: 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

// Implementationprotected:

 // 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_FILEstatic 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_MAPEND_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_FILEstatic 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;}

原创粉丝点击