一个函数内容如下:
CString str;
str.Format("SELECT * FROM StudentTable WHERE Name='%s",m_searchName);
BSTR sql=str.AllocSysString();
m_pRecordset->Close();
m_pRecordset->Open((_variant_t)str,_variant_t((IDispatch*)                 m__pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);
_variant_t var;
var = m_pRecordset->GetCollect("Index");
if(var.vt != VT_NULL)
m_index = (LPCSTR)_bstr_t(var);
为什么执行到OPEN函数就执行不下去?错误是:runtime error!
abnormal programe termination

解决方案 »

  1.   

    ADO 出错会抛出异常,如果你不处理,异常会一层层往上传,最后默认的处理就是runtime error!
    这样用:try
    {
    CString str;
    str.Format("SELECT * FROM StudentTable WHERE Name='%s",m_searchName);
    BSTR sql=str.AllocSysString();
    m_pRecordset->Close();
    m_pRecordset->Open((_variant_t)str,_variant_t((IDispatch*)                 m__pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);
    _variant_t var;
    var = m_pRecordset->GetCollect("Index");
    if(var.vt != VT_NULL)
    m_index = (LPCSTR)_bstr_t(var);}
    catch(_com_error& e)
    {
    AfxMessage(e.Description()) ;
    }
      

  2.   

    这个问题已经解决.使用
    m_pRecordset->Close();
    m_pRecordset->Open((_variant_t)str,_variant_t((IDispatch *)m_pConnection,true),    adOpenDynamic,adLockOptimistic,adCmdText);
    这些语句查询完数据库后,1.怎样获得查询结果的位置,为了获得查询结果的记录.
    3.查询前后应该做什么事情?要不要CLOSE(),OPEN()? Open()函数怎么写?
      

  3.   

    str.Format("SELECT * FROM StudentTable WHERE Name='%s",m_searchName);
    -〉str.Format("SELECT * FROM StudentTable WHERE Name='%s'",m_searchName);
    少了半个单引号建议楼主try{}catch{},要不然数据库操作的错误真不好找。
      

  4.   

    m_pRecordset->Open((_variant_t)str,_variant_t((IDispatch *)m_pConnection,true), adOpenDynamic,adLockOptimistic,adCmdText);
    这个就是open。
    先判断结果集是否为空,然后可以用MoveNext,MoveLast(先判断isEOF()),MoveFisrt, MovePreView(先判断isBOF(),只向前游标不可用)就可以移动记录指针。
    结果集用完后Close()