使用_RecordsetPtr指针打开数据库后
如果数据库不为空,_RecordsetPtr完全正确.
可是一旦数据库表为空
pPtr->MoveFirst();便报错.郁闷之极,求教(_RecordsetPtr pPtr;)
什么BOF,EOF都不行,pPtr->RecordCount也读不出来,一读就错.
try catch 也捉不到.
郁闷中

解决方案 »

  1.   

    不妨把你的代码贴出来看看
    我一般是这样子:
    #import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "EndOfFile") _RecordsetPtr piRecordset = GetRecordset(sSqlStr);
    if(piRecordset == NULL)
    return FALSE;
    if(!piRecordset->EndOfFile)
    {
    spsInfo.fHeading = RsITEM_DECIMAL(piRecordset,"HEADING");
    spsInfo.fROT = RsITEM_DECIMAL(piRecordset,"RATEOFTURN");
    spsInfo.tReptTime = RsITEM_DATE(piRecordset,"T_LOG");
    }
      

  2.   

    _RecordsetPtr pPtr;//_RecordsetPtr 指针
    if (FAILED(pPtr.CreateInstance("ADODB.Recordset")))
    {
    AfxMessageBox("Create Instance failed!");
    pPtr.Release();
    return;
    }
    //创建字符串并转换格式
    CString strSQL = "SELECT * FROM XWOption ORDER BY ID";
            CDataSave *DS=new CDataSave;
    _variant_t varSRC(DS->ConStr());//数据库连接字符串,绝对正确的
    _variant_t varSQL(strSQL);//sql字符串
    //打开数据库
    if(FAILED(pPtr->Open(varSQL,varSRC,adOpenDynamic,adLockOptimistic,adCmdText)))
    {
    AfxMessageBox("Open table failed!");
    pPtr.Release();
    return;
    }//若XWOption 表不为空则一切正常,一旦为空 每次必死.
    if(!pPtr->BOF)
    pPtr->MoveFirst();
    else
    {
    delete DS;
    pPtr->Close();
    pPtr.Release();
    return;
    }
    while(!pPtr->EndOfFile)
    {...
      

  3.   

    死在if(!pPtr->BOF) 这一句吗?此时pPtr指针值是否异常?
      

  4.   

    哈哈
    我解决了
    (!pPtr->BOF) 
    pPtr->MoveFirst(); 
    else 

    delete DS; 
    pPtr->Close(); 
    pPtr.Release(); 
    return; 

    是对的我之前的写法用eof是错的
    改成这个以后还报错其实是其他地方的错误
    刚才又跟了一遍
    搞定了
    结贴!!