C++ 如果MFC+;中存在字段,则为CDaoRecordset+;

C++ 如果MFC+;中存在字段,则为CDaoRecordset+;,c++,mfc,dao,C++,Mfc,Dao,如何使用VC++记录集检查Access数据库表中是否已经存在给定的字段名。我尝试了谷歌和MSDN文档,但发现了任何有用的东西 我尝试了以下代码: BOOL IsFieldExixts(CDaoRecordset *rs, CString Fieldname) { COleVariant OV; try { rs->GetFieldValue(FieldName,OV); } catch(CDaoException e) { ret

如何使用VC++记录集检查Access数据库表中是否已经存在给定的字段名。我尝试了谷歌和MSDN文档,但发现了任何有用的东西

我尝试了以下代码:

BOOL IsFieldExixts(CDaoRecordset *rs, CString Fieldname)
{
   COleVariant OV;
   try
   {
      rs->GetFieldValue(FieldName,OV);
   }
   catch(CDaoException e)
   {
      return FALSE;
   }

   return TRUE
}
但当未找到时,它不会引发异常,而是显示一个消息框,说明未找到项


<我需要一个C++解决方案,我在谷歌上可以找到的是VB解决方案< /P> < P> <代码> GETFieldValue<代码>不显示任何消息框。您的
catch
块不正确,需要

catch(CDaoException *e) {
    e->Delete();
    return FALSE;
}
因此,在程序中,异常不会在代码中处理。因此,在MFC顶级函数中,将调用异常的默认处理程序,并且显示messagebox


顺便说一句,要检查记录集中是否存在条目,可以调用可调用IsEOF()方法的记录集


这是什么<代码>捕获无
(异常声明)
!?您确定GetFieldValue正在显示messagebox吗?您是否在调试器中单步执行代码?是的,GetFieldValue显示messagebox,它调用wincore.cpp中的某些函数,在CATCH_ALL(e)中显示messagebox不,您没有在调试器中单步执行代码。您只需假设GetFieldValue正在显示messagebox。@Wener Henze现在正在执行catch块,但在return FALSE语句中,它显示的是jet engine错误消息,而不是Returning FALSE。调试时,代码在返回FALSE语句后跳转到visual studio中的反汇编
while(rs.IsEOF())
        {
            rs.Delete();
            rs.MovePrev();
        }
        rs.Close();//every time you should close the recordset connection