在管理员登录框中点击了确定,为什么进入不了管理界面?

jiangshanxiu 2010-05-15 09:20:26
我的一个应用程序
if(mydlg.DoModal()==IDOK)
{
sql = "select*from admin where adminpwd ='"+mydlg.m_mpassword+"'"; //查询密码
m_pRecordset=m_AdoConn.GetRecordSet(sql); //得到记录集
if(m_pRecordset->adoEOF) //如果没有
{AfxMessageBox("密码错误"); } //提示错误
else
{
mydlg1.DoModal(); //进入管理 就是这里出现了问题
}
}
m_AdoConn.ExitConnect();//释放数据库资源
}
这个问题就是:当我的用户名和密码输入正确时,点击确定的按钮,进入不了管理界面,不知道是为什么?。而我修改密码是成功的!数据库连接也没有问题!可就是进入不了我的管理界面IDD_MANAGE。当我用用右键在DoModal()上点击右键找定义和参考时,提示没有这个信息,不知是否我没定义还是没有写这个函数的实现。若要定义和实现这个函数应该怎么样写?
...全文
319 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangshanxiu 2010-05-23
  • 打赏
  • 举报
回复
OK!搞定!
yelangweiwang 2010-05-18
  • 打赏
  • 举报
回复
先把弹出对话框换成别的,看能进去不,能进去,然后调你的对话框。
jiangshanxiu 2010-05-18
  • 打赏
  • 举报
回复
我跟踪了,断点调试过来!

还是出现这些问题。

我调试了


这些问题怎么解决,请大家共同想想!
谢谢!
chinoistzc 2010-05-17
  • 打赏
  • 举报
回复
接分...
hzy694358 2010-05-16
  • 打赏
  • 举报
回复
在这个函数里
ADMIN::OnInitDialog()
按F9设个断点,跟踪下
hzy694358 2010-05-15
  • 打赏
  • 举报
回复
你单独调用这条语句试试
mydlg1.DoModal();
如果还不可以那应该是ManageDLG 这个类的问题,
设个断点跟进去
jiangshanxiu 2010-05-15
  • 打赏
  • 举报
回复
这是登录用的对话的代码:

ADMIN::ADMIN(CWnd* pParent /*=NULL*/)
: CDialog(ADMIN::IDD, pParent)
{
//{{AFX_DATA_INIT(ADMIN)
m_mpassword = _T("");
m_user = _T("");
m_newpass = _T("");
m_oldpass = _T("");
//}}AFX_DATA_INIT
}


void ADMIN::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(ADMIN)
DDX_Text(pDX, IDC_GPASSWOER, m_mpassword);
DDX_Text(pDX, IDC_USER, m_user);
DDX_Text(pDX, IDC_NEWPASSWORD, m_newpass);
DDX_Text(pDX, IDC_OLDPASSWORD, m_oldpass);
//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(ADMIN, CDialog)
//{{AFX_MSG_MAP(ADMIN)
ON_BN_CLICKED(IDC_MODIFY, OnModify)
ON_WM_CLOSE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// ADMIN message handlers

BOOL ADMIN::OnInitDialog()
{
CDialog::OnInitDialog();
m_AdoConn.OnInitADOConn(); //链接数据库
(CEdit*)GetDlgItem(IDC_USER)->SetFocus(); //设置焦点
if(rectlarge.IsRectNull()) //没有点击修改密码时的对话框窗口小些
{
CRect rectseparator;
GetWindowRect(&rectlarge);
GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectseparator);
rectsmall.left=rectlarge.left;
rectsmall.top=rectlarge.top;
rectsmall.right=rectseparator.right;
rectsmall.bottom=rectseparator.bottom;
}
SetWindowPos(NULL,0,0,rectsmall.Width(),rectsmall.Height(),SWP_NOMOVE|SWP_NOZORDER); //设置窗口位置
return true;
}

void ADMIN::OnModify() //点击了修改密码按钮后的窗口大小
{
UpdateData();
CString str;
if(GetDlgItemText(IDC_MODIFY,str),str=="修改密码")
{
SetDlgItemText(IDC_MODIFY,"完成修改");
}
else
{
SetDlgItemText(IDC_MODIFY,"修改密码");
}

if(rectlarge.IsRectNull())
{
CRect rectseparator;
GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectseparator);
rectsmall.left=rectlarge.left;
rectsmall.top=rectlarge.top;
rectsmall.right=rectseparator.right;
rectsmall.bottom=rectseparator.bottom;
}
if(str=="完成修改")
{
sql = "select*from admin where adminname ='"+m_user+"'"+"and adminpwd ='"+m_oldpass+"'";//验证密码
m_pRecordset=m_AdoConn.GetRecordSet(sql);

if(m_pRecordset->adoEOF)
{
MessageBox("原密码错误!","系统提示:",MB_OK|MB_ICONASTERISK);
}
else
{
CString str1;
str1.Format("update admin set adminpwd='%s'",m_newpass); //修改的密码同时也要把数据库中的秘密数据修改
m_pRecordset=m_AdoConn.GetRecordSet(_bstr_t(str1));
MessageBox("修改成功!","系统提示:",MB_OK);
}
SetWindowPos(NULL,0,0,rectsmall.Width(),rectsmall.Height(),SWP_NOMOVE|SWP_NOZORDER);
}
else
{
SetWindowPos(NULL,0,0,rectlarge.Width(),rectlarge.Height(),SWP_NOMOVE|SWP_NOZORDER);
}
}

void ADMIN::OnClose()
{
CDialog::OnClose();
}

大家看看那里出来问题
jiangshanxiu 2010-05-15
  • 打赏
  • 举报
回复

可以修改密码,即可以改变数据库中的密码值。
而当输入正确的用户名和密码时。点击确定就跳不到我要的管理界面。系统就出现如下问题
jiangshanxiu 2010-05-15
  • 打赏
  • 举报
回复
void CHCOKDlg::OnManage()
{

ADMIN mydlg; //定义密码框窗体
ManageDLG mydlg1; //在这里定义的mydlg1
ADOConn m_AdoConn; //定义数据库操作对象
m_AdoConn.OnInitADOConn(); //创建数据库链接
_bstr_t sql;
_RecordsetPtr m_pRecordset; //定义记录集

if(mydlg.DoModal()==IDOK)
{
sql = "select*from admin where adminpwd ='"+mydlg.m_mpassword+"'"; //查询密码
m_pRecordset=m_AdoConn.GetRecordSet(sql); //得到记录集
if(m_pRecordset->adoEOF) //如果没有
{AfxMessageBox("密码错误"); } //提示错误
else
{
mydlg1.DoModal(); //进入管理
}
}
m_AdoConn.ExitConnect();//释放数据库资源
}


我想进入的管理界面的ID号是:IDD_MANAGE
hzy694358 2010-05-15
  • 打赏
  • 举报
回复
mydlg1 :这个在哪定义的,
代码贴出来看看
向立天 2010-05-15
  • 打赏
  • 举报
回复
当我的用户名和密码输入正确时,点击确定的按钮,进入不了管理界面
=======================
你通过哪个界面输入用户名和密码
mydlg.DoModal()==IDOK
这个吧
管理界面是哪个
mydlg1.DoModal();
这个
if(mydlg.DoModal()==IDOK)
后当然不会去执行else的内容了
迷途的书童 2010-05-15
  • 打赏
  • 举报
回复
换给基本的对话框试试@
hzy694358 2010-05-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yincheng01 的回复:]
这个是变量范围问题,你这里的mydlg1是定义的局部变量,在void CHCOKDlg::OnManage()函数完结后mydlg1的生命周期已经结束,在你点击IDOK后程序已经运行完OnManage()函数,请问怎么还能显示管理界面呢,你把mydlg1定义为全局变量试试。
[/Quote]
OnManage是CHCOKDlg的函数并不是并不是属于ADMIN 的
尹成 2010-05-15
  • 打赏
  • 举报
回复
这个是变量范围问题,你这里的mydlg1是定义的局部变量,在void CHCOKDlg::OnManage()函数完结后mydlg1的生命周期已经结束,在你点击IDOK后程序已经运行完OnManage()函数,请问怎么还能显示管理界面呢,你把mydlg1定义为全局变量试试。
jiangshanxiu 2010-05-15
  • 打赏
  • 举报
回复
这是ManageDLG类
// ManageDLG dialog

class ManageDLG : public CDialog
{
// Construction
public:
ManageDLG(CWnd* pParent = NULL); // standard constructor
void ShowData() ;
void singerShowData() ;
// Dialog Data
//{{AFX_DATA(ManageDLG)
enum { IDD = IDD_MANAGE };
CListCtrl m_list2;
CListCtrl m_list;
//}}AFX_DATA


// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(ManageDLG)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:

// Generated message map functions
//{{AFX_MSG(ManageDLG)
afx_msg void OnAddsong();
virtual BOOL OnInitDialog();
afx_msg void OnDelsong();
afx_msg void OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnAddsinger();
afx_msg void OnItemchangedList2(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnDel();
afx_msg void OnModifsinger();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};


jiangshanxiu 2010-05-15
  • 打赏
  • 举报
回复
我试过了!
我调试了!
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
Loaded symbols for 'C:\WINDOWS\system32\MFC42D.DLL'
Loaded symbols for 'C:\WINDOWS\system32\MSVCRTD.DLL'
Loaded 'C:\WINDOWS\system32\gdi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\user32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\shell32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\advapi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\rpcrt4.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\secur32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msvcrt.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\shlwapi.dll', no matching symbolic information found.
Loaded symbols for 'C:\WINDOWS\system32\MFCO42D.DLL'
Loaded 'C:\WINDOWS\system32\ole32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\oleaut32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\imm32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\lpk.dll', no matching symbolic information found.
出现这些问题。


当运行应用程序时,出现这样的图。
jianghandaxue 2010-05-15
  • 打赏
  • 举报
回复
会调试吗?单步调试下,看具体是哪段代码报错误,具体使用方法如下:

1、在你的void chxdl::OnOK()代码体里面的最上端设置一个断点,用键盘上的F9设置,你会看见一个棕色的小圆点,设置成功
2、再点键盘上的F5,程序进入调试状态
3、再点F10进行单步跟踪代码,肯定找得到哪段代码写法有问题......
4、在你的open()函数里面再设置断点,跟进去......
jiangshanxiu 2010-05-15
  • 打赏
  • 举报
回复
mydlg1.DoModal();就是这个语句出了问题
我应该怎么改呢?
你说单独调用这个语句,我应该怎么样单独调用呀,可以举个例子吗?
若是这个ManageDLG类有问题,那应该是什么问题呢?
void ManageDLG::OnAddsong()
{

MADDSONG mydlg;
mydlg.DoModal();

}
一名程序员 2010-05-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hzy694358 的回复:]
你单独调用这条语句试试
mydlg1.DoModal();
如果还不可以那应该是ManageDLG 这个类的问题,
设个断点跟进去
[/Quote]同意!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧