用ADO+VC,MOVEFIRST 出错???
try
{
hr = Conn.CreateInstance(__uuidof(Connection));
if(FAILED(hr))
goto ErrorProcess;
sprintf(pBuffer,"Driver={SQL Server};UID=SA;PWD=;DATABASE=AkumaDB;SERVER=ABC;");
hr = Conn->Open(pBuffer,"","",-1);
if(FAILED(hr))
goto ErrorProcess;
hr = WorkRecord.CreateInstance(__uuidof(Recordset));
if(FAILED(hr))
goto ErrorProcess;
sprintf(pBuffer,"SELECT * FROM [WORK]");
hr = WorkRecord->Open(_variant_t(pBuffer),Conn.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);
if(FAILED(hr))
goto ErrorProcess;
hr = WorkRecord->MoveFirst();//this line cause error??
if(FAILED(hr))
goto ErrorProcess;
if(WorkRecord->adoEOF)
MessageBox("ADO EOF");
WorkRecord->Close();
hr = WorkerRecord.CreateInstance(__uuidof(Recordset));
if(FAILED(hr))
goto ErrorProcess;
sprintf(pBuffer,"SELECT * FROM [WORKER] ORDER BY People_ID");
hr = WorkerRecord->Open(pBuffer,Conn.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);
if(FAILED(hr))
goto ErrorProcess;
if(WorkerRecord->adoEOF)
MessageBox("adoEOF");
i = 0;
while(!WorkerRecord->adoEOF)
{
for(int j = 0; j < WorkerRecord->Fields->GetCount(); j++)
{
_variant_t vIndex((long)j);
value = WorkerRecord->GetCollect(vIndex);
if(CrackStrVariant(value,pBuffer,1024))
{
if(j==0)
m_ListCtrl2.InsertItem(i,pBuffer,0);
else
m_ListCtrl2.SetItemText(i,j,pBuffer);
}
}
i++;
hr = WorkerRecord->MoveNext();
if(FAILED(hr))
goto ErrorProcess;
}
ErrorProcess:
if(WorkRecord->State == adStateOpen )
WorkRecord->Close();
if(WorkerRecord->State == adStateOpen )
WorkerRecord->Close();
if(Conn->State == adStateOpen )
Conn->Close();
return;
}
catch(...)
{
MessageBox("Error Occru UnDeterminable!!!");
return;
}
问题点数:50、回复次数:3Top
1 楼ashanm()回复于 2002-11-29 16:05:50 得分 50
在调用MoveFirst和MoveLast,还是其他几个移动接口函数时,你要先判断IsEof(),IsBof(),如果本来已经到头了,还要往前移动,当然会触发异常错误。Top
2 楼fingerfox(狐狸【人不要脸,天下无敌】)回复于 2002-11-29 16:50:19 得分 0
MoveFirst
要判断?Top
3 楼Drate(小虫(好好学习,天天向上))回复于 2002-12-02 13:21:27 得分 0
是呀,在VC就是这样,需要自己去判断Top




