刚开始学习数据库编程void CUser::GetData(CString name)
{
ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();

_bstr_t vSQL;
vSQL="SELECT * FROM zhanghao WHERE name='"+name+"'";

_RecordsetPtr m_pRecordset;
m_pRecordset=m_AdoConn.GetRecordSet(vSQL);

if(m_pRecordset->adoEOF==1)
CUser();
else
{
_variant_t var;
var=m_pRecordset->GetCollect("name");
UserName=(LPCTSTR)(_bstr_t )var;// UserName=(LPCTSTR)(_bstr_t )(m_pRecordset->GetCollect("name"));
// Pwd=(LPCTSTR)(_bstr_t )m_pRecordset->GetCollect("pwd"); }

m_AdoConn.ExitConnect();
}本函数是想通过 访问数据库 获得一组数据 并存在一个 CUser 对象 user中
结果  运行时 出现 runtime error
我跟踪了 下  问题在于   
运行到  var=m_pRecordset->GetCollect("name");   这一句时发生错误
MSDN中 也没有 GetCollect  的 解释
小弟真是 没办法 了   高手们帮小弟个忙啊 !!!还有就是  后面从 _variant_t  到 CString 数据类型的转换中 也不是很明白
希望大家 能指引我一下啊

解决方案 »

  1.   

    有可能是name字段在表中不存在,检查拼写是否正确。
      

  2.   

    if(m_pRecordset->adoEOF==1)
    应该是
    if(m_pRecordset->adoEOF==-1)
      

  3.   

    adoEOF  好像是判断  是否超过了最后一行吧 
    所以==1时 用构造函数初始化应该 没错吧
      

  4.   

    任何情况下 adoEOF 不会等于1,要么是0,要么是-1.
    所以
    if(m_pRecordset->adoEOF==1)
    CUser();//该句不可能被执行
    你的代码的else块中的语句始终会被执行,若此时m_pRecordset中没有当前记录(adoEOF等于-1),就会出现你所说的错误.
      

  5.   

    改了
    还是有问题
    不过 还是要谢谢 luohongming(lhm)兄
      

  6.   

    如果name字段的值是个空串,在处理时要注意判断一下。
      

  7.   

    问题 已经解决  是RedAngel001()  的 方法  但是我自己想出来的
    给你分吧