C++ 如果MFC+;中存在字段,则为CDaoRecordset+;
如何使用VC++记录集检查Access数据库表中是否已经存在给定的字段名。我尝试了谷歌和MSDN文档,但发现了任何有用的东西 我尝试了以下代码: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
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