调用MoveNext出现S1010:函数序列错误,怎么解决?
在调用MoveNext出现S1010:函数序列错误。但我看不出在调用时有什么错,这个错误是由什么引起的,请各位指教,非常感谢!
请看下面:
A。程序说明:
1。COutcallSet是一个CRecordset类。
2。OpenRecordSet:为自定义打开记录集函数,成功返回0
GetNextRecordInfo:为自定义读出下一个符合条件的记录函数,成功返回1
3。调用次序为:
先用OpenRecordSet打开记录集,如记录集已经打开,直接返回0;
再调用GetNextRecordInfo读取记录。
4。出现的问题是:
在GetNextRecordInfo中用MoveNext读下一记录时,第一次是成功的,第
二次就返回S1010:函数序列错误。
5。数据库始终打开着。
B。程序片段:
1、OpenRecordSet:打开记录集
short COutcallSet::OpenRecordSet(int& Devicetype)
{
char strSqlCmd[201];
short nResult ;
nResult = 0;
sprintf( strSqlCmd, "select * from user_task_record where T ASKSTATION!=198 and TASKSTATION!=197 and TRY_TIMES >0 and
ucDevicetype=%d",Devicetype);
TRY
{
if( IsOpen( ) )
{
return 0 ;
}
if( Open( CRecordset::snapshot, strSqlCmd,
CRecordset::none ))
{
if( IsBOF( ))
{
}
else
{
MovePrev( );
}
nResult = 0;
}
else
{
nResult = 1;
}
}
CATCH_ALL( e )
{ //第二次在此接收到S1010的错误
TRACE("\nOpen faile , database close");
pMainFrm ->m_DBOpenFlag = false;
e->GetErrorMessage(strSqlCmd,200);
AfxMessageBox(strSqlCmd);
e->Delete();
nResult = -2;
}
END_CATCH_ALL ;
return nResult;
}
2。GetNextRecordInfo:读出下一个符合条件的记录
short COutcallSet::GetNextRecordInfo( )
{
char strSqlCmd[201];
......
while( 1)
{
if( IsEOF( ))
{
return 0;
}
TRY
{
MoveNext( );
}
CATCH_ALL( e )
{
TRACE("\nOpen failed , database close");
pMainFrm ->m_DBOpenFlag = false;
e->GetErrorMessage(strSqlCmd,200);
e->Delete();
AfxMessageBox(strSqlCmd);
return -2;
}
END_CATCH_ALL
if( IsEOF( ))
{
continue ;
}
.......
}
return 1;
}