问题: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?
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?
...全文
相关推荐
MFC通过ADO操作Access数据库
使用`try...catch`块来处理可能出现的`_com_error`异常是很好的实践。通过以上步骤,你可以使用MFC和ADO实现对Access数据库的读写操作。
VC连接ACCESS数据库的代码
本文将详细介绍如何使用Visual C++(VC)通过ODBC和ADO技术来连接Microsoft Access数据库,并实现基本的数据操作。对于初学者而言,掌握这些基本的技术是非常重要的。
VC++下使用ADO访问Access数据库完整篇
在 VC++ 中,通过 ADO 可以轻松地连接到 Access 数据库,并执行各种数据库操作,如查询、插入、更新和删除等。
VC中使用ADO操作数据库的方法
下面是如何打开一个结果集的例子:```cpp_RecordsetPtr m_pRecordset;m_pRecordset.CreateInstance(__uuidof(Recordset));try
ado连接access数据库.pdf
通过以上步骤,我们可以有效地使用ADO来访问和操作Access数据库,构建功能丰富且性能良好的数据库应用程序。


数据库
