使用_RecordsetPtr指针打开数据库后
如果数据库不为空,_RecordsetPtr完全正确.
可是一旦数据库表为空
pPtr->MoveFirst();便报错.郁闷之极,求教(_RecordsetPtr pPtr;)
什么BOF,EOF都不行,pPtr->RecordCount也读不出来,一读就错.
try catch 也捉不到.
郁闷中
如果数据库不为空,_RecordsetPtr完全正确.
可是一旦数据库表为空
pPtr->MoveFirst();便报错.郁闷之极,求教(_RecordsetPtr pPtr;)
什么BOF,EOF都不行,pPtr->RecordCount也读不出来,一读就错.
try catch 也捉不到.
郁闷中
我一般是这样子:
#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");
}
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)
{...
我解决了
(!pPtr->BOF)
pPtr->MoveFirst();
else
{
delete DS;
pPtr->Close();
pPtr.Release();
return;
}
是对的我之前的写法用eof是错的
改成这个以后还报错其实是其他地方的错误
刚才又跟了一遍
搞定了
结贴!!