⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logindlg.cpp

📁 A HR database application.
💻 CPP
字号:
// LoginDlg.cpp : implementation file
//

#include "stdafx.h"
#include "HRDB.h"
#include "LoginDlg.h"
#include "desexec.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//引入全局SQL环境变量
extern SQLHENV    henv;
extern SQLHDBC    hdbc;
extern SQLHSTMT   hstmt;
extern SQLRETURN  retcode;
extern BOOL       findResult;
int count = 0; // 登录失败次数计数器(超过三次自动退出)

//全局变量userName,passWord
CString userName;
CString passWord;

/////////////////////////////////////////////////////////////////////////////
// CLoginDlg dialog


CLoginDlg::CLoginDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CLoginDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CLoginDlg)
	m_strPassWord = _T("");
	m_strUserName = _T("");
	//}}AFX_DATA_INIT
}


void CLoginDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLoginDlg)
	DDX_Control(pDX, IDC_LOGIN_USERNAME, m_editUserName);
	DDX_Control(pDX, IDC_LOGIN_PASSWORD, m_editPassWord);
	DDX_Text(pDX, IDC_LOGIN_PASSWORD, m_strPassWord);
	DDX_Text(pDX, IDC_LOGIN_USERNAME, m_strUserName);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLoginDlg, CDialog)
	//{{AFX_MSG_MAP(CLoginDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLoginDlg message handlers

void CLoginDlg::OnOK() 
{
	SQLVARCHAR   username[20];
	SQLVARCHAR   password[20];
	SQLINTEGER   usernameLenOrInd = 0, passwordLenOrInd = 0;
	UpdateData(TRUE); //更新控件关联变量
	userName = m_strUserName;
	passWord = m_strPassWord;
	strcpy( (char *)username, m_strUserName);
	strcpy( (char *)password, m_strPassWord);
	usernameLenOrInd = SQL_NTS;
	passwordLenOrInd = SQL_NTS;

	// 分配环境句柄
	TODBC0( SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv ) );

	// 设置环境属性(ODBC版本号)
	TODBCe( henv, SQLSetEnvAttr( henv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0 ) );

	// 分配连接句柄
	TODBCe( henv, SQLAllocHandle( SQL_HANDLE_DBC, henv, &hdbc ) );

	// 设置连接属性(限制登录时间为5秒)
	TODBCc( hdbc, SQLSetConnectAttr( hdbc, SQL_LOGIN_TIMEOUT, (void *)5, 0) );

	// 连接到数据源
	retcode = TODBCc(hdbc, SQLConnect( hdbc, (SQLCHAR *)"hr", SQL_NTS,
		                    		(SQLCHAR *)username, SQL_NTS, 
									(SQLCHAR *)password, SQL_NTS ));

	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		// 分配语句句柄
		TODBCc( hdbc, SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) );
		findResult = TRUE;
		CDialog::OnOK();
	}
	else
	{
		if (count >= 2)
		{
			CLoginDlg::OnCancel();
		}
		else
		{
			count++;
			AfxMessageBox("登录失败!");
			m_editUserName.SetWindowText("");
			m_editPassWord.SetWindowText("");
		}
	}
}

void CLoginDlg::OnCancel() 
{
	findResult = FALSE;
	CDialog::OnCancel();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -