(1)先做了一个基于对话框的应用程序
(2)在不用ado连接数据库时,可以实现登录到主对话框
(3)连接数据库后, 出现 应用程序错误是怎么回事"ox004778f3"指令引用的0x00000000内存错误。该内存不能为"read"

解决方案 »

  1.   

    //判断指定用户名是否存在
    int CUser::HaveName(CString cUserName)
    {
       CADORecordset *pRs=new CADORecordset(((CSMMISDlg*)AfxGetApp())->pDB);
       CString strSQL;
        int m;
    strSQL.Format("select * from User where UserName='%s'",cUserName);
    pRs->Open(strSQL,CADORecordset::openQuery);
    if(pRs->GetRecordCount()==1) //判断记录集个数
    m=1;
    else m=-1; pRs->Close();
    delete pRs;
    return m;
    }
    void CUser::GetData(CString cUserName)
    {
    CADORecordset *pRs=new CADORecordset(((CSMMISDlg*)AfxGetApp())->pDB);
        CString strSQL;
    strSQL.Format("select * from User where UserName='%s'",cUserName);
    pRs->Open(strSQL,CADORecordset::openQuery);
    if(pRs->GetRecordCount()==1)
    {
    pRs->GetFieldValue("UserName",m_userName);
    pRs->GetFieldValue("Password",m_Pwd);
    pRs->GetFieldValue("TypeID",m_type);
    }
    pRs->Close();
    delete pRs;
    }
    void CLoginDialog::OnOK() 
    {
    // TODO: Add extra validation here
        UpdateData(true);
    //使用CUser类
    CUser user;
    //判断EditBox中输入的密码是否和数据库中的密码相同
    if(user.HaveName(m_UserName)<0)
    {
       MessageBox("该用户名不存在");
       return ;
    }
    user.GetData(m_UserName);
    if (m_Password!=user.GetPwd())
    {
         MessageBox("密码不正确");
     return;
    }
    /* */
    CDialog::OnOK();  
    CSMMISDlg dlg;
    dlg.DoModal();
      

  2.   

    加异常捕获看是什么错误
    try
    {
    //你的ADO代码
    }
    catch (_com_error& e)
    {
    AfxMessageBox(e.Description());
    }
      

  3.   

    1、try...catch
    2、单步调试,定位出错代码
      

  4.   

    CADORecordset(((CSMMISDlg*)AfxGetApp())->pDB);pDB是什么意思