void CDlgLogin::OnOK() 
{
CString c_user,c_password;
m_UserName.GetWindowText(c_user);
m_PassWord.GetWindowText(c_password);
if (c_user.IsEmpty() || c_password.IsEmpty())
{
MessageBox("用户名称或密码不能为空", "用户登录信息");
return;
}
CString sql;
try
{

sql.Format("select * from tb_operator where name = '%s' and password = '%s'",c_user,c_password);
m_pRs->raw_Close();
    m_pRs->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);
}
catch (_com_error e)
{
// e.Description();
// e.ErrorInfo();
//e.ErrorMessage();
     CString str;
     str.Format("数据库信息错误%s",e.ErrorMessage());
MessageBox(str,"提示信息",NULL);

}
if (m_pRs->RecordCount>0)
{
Flag = true;
user = m_pRs->GetCollect("name").bstrVal;
password = m_pRs->GetCollect("password").bstrVal;
EndDialog(0);
}
else
{
user = "";
password = "";
MessageBox("用户名或密码不正确.","提示",64);
return;
}
}
调式时  出现 “IDispatch error 3127”错误 MSVCRTD! _CxxThrowException@8 + 57 bytes
_com_raise_error(long -2146824584, IErrorInfo * 0x01f19018) + 35 bytes
_com_issue_errorex(long -2146824584, IUnknown * 0x01f19360, const _GUID & {IID_Recordset15}) + 93 bytes
ADOBS::Recordset15::GetRecordCount() line 680
CDlgLogin::OnOK() line 99 + 24 bytes
哪位高手帮我看看 找了两天还是找不到哪错了

解决方案 »

  1.   

    1.dlgdata.cpp文件出错 ——工程中出现了异常的变量2.IDispatch error #3092 ——SQL语句格式不当3.VC向数据库中插入数据只能插入单个字符 ——应该是'%s'而不是'%S',前者代表字符串,后者代表单个字符。4.IDispatch error #3127 ——检查表名是否写错5.Unknown error 0x800A0E78 ——记录集指针的赋值出现问题,最好在遍历记录集之前对其重新赋值6.表达式中的数据类型不匹配 ——SQL语句中的数字及null是不需要用单引号包含的,而字符串则是必不可少的,检查是否未遵循规则。7.IDispatch error #3088 ——检查字段是否写错
      

  2.   

    http://www.diybl.com/course/3_program/c/c_js/20100710/397470.html
      

  3.   

    sql.Format("select * from tb_operator where name = '%s' and password = '%s'",c_user,c_password);
    m_pRs->raw_Close();//如果能肯定在这之前没打开过,就把这句去掉
      m_pRs->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText); 
    另外,你先得看数据库是否打开,就是数据库是否连接,如果数据库没打开,那表肯定打不开.
    sql的连接字符串用的是's',这没错,我还没发现有的语法用的是"s".
    字符串里的表名和实际的表名否则一致.
    单步调试:先看数据库是否连接成功.再看sql的字符串是否正确.
      

  4.   

    数据库有边上 ,sql的表名没有错啊 
      

  5.   

    AfxOleInit()是否加上.数据库里的密码字段是否是字符型,如果数据库里密码字段是数字型,查询语句和数据库就得有一个改成一致
      

  6.   

    数据库连上说明AfxOleInit()已加上了.你看看字段类型是不是一致
    另外,OFFICE2010的连接语句和以前的版本不一样,你的OFFICE是哪个版本的.不过数据库连上就说明连接字符串没问题
    hr = m_pConnection->Open( "Provider=Microsoft.Ace.Oledb.12.0;Data Source=D:\\bagayalu.accdb;Jet OLEDB:Database Password=BayAlu良心大大的坏了的111001","", "", adModeUnknown);//这是OFFICE2010版本的
    如果是低版本就改成:
    hr = m_pConnection->Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\NW.mdb","", "", adModeUnknown);
      

  7.   

    看看这篇文章会不会对你有帮助
    http://blog.csdn.net/xianglitian/article/details/5617173
      

  8.   

    lz,我也遇到这个问题了,教教我吧,
    还有提示:cannot find PDB file,请教下......