问题:VC/MFC ADO ACCESS数据库:m_pRecordset->BOF和m_pRecordset->EndOfFile是不是不可靠?
遇到了一个非常让我头疼的问题,下面是在一个对话框中一个“查看历史”按钮的程序,点击该按钮是要弹出历史记录对话框的:
void CRegion1Dlg::OnBnClickedHistory()
{
// TODO: 在此添加控件通知处理程序代码
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息
// 因为它有时会经常出现一些意想不到的错误
try
{
m_pRecordset->Open("SELECT * FROM 区域1温湿度历史记录",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
try
{
if((m_pRecordset->BOF)&&(m_pRecordset->EndOfFile)) //就是这个地方,有时候历史记录明明清空了,但是却不进入if,而去执行else,将else里的对话框打开了,所以可能是括号内的条件不满足,所以我就感觉可能是用这种方法判断数据表是否为空不可靠
{
AfxMessageBox(_T("提示:无历史记录!"));
return ;
}
else
{
CRegion1HistoryDlg dlg;
if(!dlg.DoModal())
{
return;
}
}
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
}
现在我具体描述一下这个让我非常头疼的问题:当数据表内有历史记录的时候,我点击“历史记录”按钮,肯定是会弹出历史记录对话框的,然后在历史记录对话框里面点击“清除历史记录按钮”将历史记录全部清除,然后关闭对话框回到原来的对话框,这时再点击“历史记录”按钮肯定是不会弹出历史记录对话框的,而是提示“无历史记录”,因为历史记录已经清除了,到目前为止是没有什么问题的;
然后问题就来了,就是我发现在数据表内有历史记录的时候,我第一次点击“历史记录”按钮,打开历史记录对话框,这个时候我不点击“清除历史记录按钮”,而是点击“关闭按钮”回到原对话框,然后再点击“历史记录按钮”再次弹出历史记录对话框,这个时候我再点击“清除历史记录按钮”将历史记录清除,然后点击“关闭按钮”回到原对话框,问题这就来了,再点击“历史记录按钮”没有提示“无历史记录”,而是打开了历史记录对话框!但是很显然,历史记录对话框里肯定是空空如也!后面再点击关闭,再点击“历史记录”,就正常提示,不会再弹出历史记录对话框了
请大神们指点迷津啊!头快炸了,也没想出来,我都在怀疑会不会是VS2010的Bug?