当前位置:Gxlcms > mysql > MFC+Access用户验证程序(初级数据库编程)

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

时间:2021-07-01 10:21:17 帮助过:32人阅读

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

人气教程排行