// LoginDlg.cpp : implementation file
//#include "stdafx.h"
#include "超市收银管理系统.h"
#include "LoginDlg.h"#include "LoginDlgSet.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF");
/////////////////////////////////////////////////////////////////////////////
// CLoginDlg dialog
extern CDatabase m_database;
extern CString m_ID;
extern loginusertype;CLoginDlg::CLoginDlg(CWnd* pParent /*=NULL*/)
: CDialog(CLoginDlg::IDD, pParent)
{
count=0;
//{{AFX_DATA_INIT(CLoginDlg)
m_userpassword = _T("");
m_userID = _T("");
m_usertype = _T("");
//}}AFX_DATA_INIT
}
void CLoginDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLoginDlg)
DDX_Text(pDX, IDC_EDIT_USER_PASSWORD, m_userpassword);
DDX_Text(pDX, IDC_EDIT_USER_NAME, m_userID);
DDX_CBString(pDX, IDC_COMBO, m_usertype);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLoginDlg, CDialog)
//{{AFX_MSG_MAP(CLoginDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CLoginDlg message handlersvoid CLoginDlg::OnOK()
{
// TODO: Add extra validation here
//先设置为未登陆状态
BOOL bLogin=FALSE; CLoginDlgSet * m_recordset=new CLoginDlgSet(&m_database);
CString strSQL; //读入用户输入的信息
UpdateData(TRUE); int type=1;
if(m_usertype.Compare("收银员")==0)
type=1;
else
if(m_usertype.Compare("管理员")==0)
type=2;//测试数据库是否打开
if(!m_database.IsOpen())
{
if(!m_database.Open(_T("ODBC;DSN=超市收银管理系统")))
{
MessageBox( "数据库未打开 ");
exit(0);
}
}
//查询是否有匹配的用户
/* 所有在使用ODBC操作数据库时,需要注意:
对于不返回结果集的SQL语句,我们应该使用CDatabase::ExecuteSQL()来执行,如:删除(DELETE),插入(INSERT),更新(UPDATE).
对于需要返回结果集的SQL语句,我们需要使用CRecordSet::Open()方法来执行,如:查询(SELECT)。*/ strSQL.Format("select * from USER where USERS_ID='%s' AND USER_PASSWORD='%s' AND USER_TYPE=%d",m_userID,m_userpassword,type);
//Open(LPCTSTR lpszDSN, BOOL bExclusive = FALSE,
//BOOL bReadonly = FALSE, LPCTSTR lpszConnect = _T("ODBC;"),
//BOOL bUseCursorLib = TRUE);
//m_database.ExecuteSQL(strSQL);
m_recordset->Open(CRecordset::forwardOnly,strSQL,CRecordset::readOnly);
//m_recordset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL,false);
//若查询结果为空
// m_database.get if(m_recordset->GetRecordCount()==0)
{
if(count<3)
{
MessageBox("用户名或密码不正确!");
count++;
}
else
{
MessageBox("错误次数达三次以上!","本窗口将关闭!");
EndDialog(IDCANCEL);
}
} //成功登陆
else
{
while( !m_recordset->IsEOF())//IsEOF()
{ m_recordset->GetFieldValue("USERS_ID",m_ID);// ???????????问题出现在这里,现在程序执行到这里就不在向下执行了 求大神解决??????????
MessageBox("4","",MB_OK);
m_recordset->MoveNext();
bLogin=TRUE;
loginusertype=type;
}
}
//若登陆成功,返回主框架IDOK
if(bLogin)
{
MessageBox("欢迎登陆超市收银管理系统");
EndDialog(IDOK);
}
else
m_database.Close();
return;
// CDialog::OnOK();
}
//#include "stdafx.h"
#include "超市收银管理系统.h"
#include "LoginDlg.h"#include "LoginDlgSet.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF");
/////////////////////////////////////////////////////////////////////////////
// CLoginDlg dialog
extern CDatabase m_database;
extern CString m_ID;
extern loginusertype;CLoginDlg::CLoginDlg(CWnd* pParent /*=NULL*/)
: CDialog(CLoginDlg::IDD, pParent)
{
count=0;
//{{AFX_DATA_INIT(CLoginDlg)
m_userpassword = _T("");
m_userID = _T("");
m_usertype = _T("");
//}}AFX_DATA_INIT
}
void CLoginDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLoginDlg)
DDX_Text(pDX, IDC_EDIT_USER_PASSWORD, m_userpassword);
DDX_Text(pDX, IDC_EDIT_USER_NAME, m_userID);
DDX_CBString(pDX, IDC_COMBO, m_usertype);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLoginDlg, CDialog)
//{{AFX_MSG_MAP(CLoginDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CLoginDlg message handlersvoid CLoginDlg::OnOK()
{
// TODO: Add extra validation here
//先设置为未登陆状态
BOOL bLogin=FALSE; CLoginDlgSet * m_recordset=new CLoginDlgSet(&m_database);
CString strSQL; //读入用户输入的信息
UpdateData(TRUE); int type=1;
if(m_usertype.Compare("收银员")==0)
type=1;
else
if(m_usertype.Compare("管理员")==0)
type=2;//测试数据库是否打开
if(!m_database.IsOpen())
{
if(!m_database.Open(_T("ODBC;DSN=超市收银管理系统")))
{
MessageBox( "数据库未打开 ");
exit(0);
}
}
//查询是否有匹配的用户
/* 所有在使用ODBC操作数据库时,需要注意:
对于不返回结果集的SQL语句,我们应该使用CDatabase::ExecuteSQL()来执行,如:删除(DELETE),插入(INSERT),更新(UPDATE).
对于需要返回结果集的SQL语句,我们需要使用CRecordSet::Open()方法来执行,如:查询(SELECT)。*/ strSQL.Format("select * from USER where USERS_ID='%s' AND USER_PASSWORD='%s' AND USER_TYPE=%d",m_userID,m_userpassword,type);
//Open(LPCTSTR lpszDSN, BOOL bExclusive = FALSE,
//BOOL bReadonly = FALSE, LPCTSTR lpszConnect = _T("ODBC;"),
//BOOL bUseCursorLib = TRUE);
//m_database.ExecuteSQL(strSQL);
m_recordset->Open(CRecordset::forwardOnly,strSQL,CRecordset::readOnly);
//m_recordset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL,false);
//若查询结果为空
// m_database.get if(m_recordset->GetRecordCount()==0)
{
if(count<3)
{
MessageBox("用户名或密码不正确!");
count++;
}
else
{
MessageBox("错误次数达三次以上!","本窗口将关闭!");
EndDialog(IDCANCEL);
}
} //成功登陆
else
{
while( !m_recordset->IsEOF())//IsEOF()
{ m_recordset->GetFieldValue("USERS_ID",m_ID);// ???????????问题出现在这里,现在程序执行到这里就不在向下执行了 求大神解决??????????
MessageBox("4","",MB_OK);
m_recordset->MoveNext();
bLogin=TRUE;
loginusertype=type;
}
}
//若登陆成功,返回主框架IDOK
if(bLogin)
{
MessageBox("欢迎登陆超市收银管理系统");
EndDialog(IDOK);
}
else
m_database.Close();
return;
// CDialog::OnOK();
}
m_recordset->MoveFirst();
函数不知道对不对,就是这个意思
m_recordset->Fields->GetItem("fieldname")->Value;
CDBVariant varValue_ID;
m_recordset->GetFieldValue("USERS_ID",varValue_ID);
m_ID= varValue_ID.m_iVal;
void GetFieldValue(
LPCTSTR lpszName,
CDBVariant& varValue,
short nFieldType = DEFAULT_FIELD_TYPE
);
void GetFieldValue(
short nIndex,
CDBVariant& varValue,
short nFieldType = DEFAULT_FIELD_TYPE
);
void GetFieldValue(
short nIndex,
CStringA& strValue
);
void GetFieldValue(
short nIndex,
CStringW& strValue
);
MSDN 看这个 CRecordset 怎么使用
extern CDatabase m_database;
extern CString m_ID;
extern loginusertype;
CLoginDlg::CLoginDlg(CWnd* pParent /*=NULL*/)
: CDialog(CLoginDlg::IDD, pParent)
{
count=0;
}