转载自〈Compubin的空间〉Debug Assertion Failed! dbcore.cpp line:2979问题解决(VC++用ODBC访问SQLServer)


觉得以后暂时不会再在VC++中使用数据库访问技术(ODBC和ADO),所以想分别作两个程序,来总结一下。没想到,竟
出了很多问题。这个问题差不多折磨了我一上午的时间,哎,我容易嘛,我!我郁闷啊,我!
不过现在问题终于解决了。哈哈 Very Well.
首先,要感谢CSDN上tanwei1002的回答,真是一语惊醒梦中人啊 !
他的回答精炼之致,如下:
那就是m_nFields m_nFieldsBound不相等 你调试看看他们的值

问题分析:
    我在VC中用ODBC访问SQL Server数据库,除了用单文档建立一个应用程序框架,添加了ODBC数据源,其他的什
都没有添加。
    在建好应用程序初始框架之后,我习惯性的先浏览一下这个应用程序的Class View,我发现比原来的单文档模式多
来一个CXXXSet类,里面声明了 具体的数据库表中的各列 的对象,比如m_name。然而,这些列对象却引起了我
的疑
问,我数了数,我总共在数据库表中建立了20列,而这里只加载了19列,缺少一项telephone的列对象m_telephone。
大惑不解!(其实缺少这一项,加上很容易,在.h和.cpp文件里加上exchange和声明即可)

    然后直接运行之,出现了如下的错误提示:
    Debug Assertion Failed! 
    File:dbcore.cpp 
    line:2979
    …………

问题解决:
    dbcore.cpp是VC自带的MFC SRC文件(位于C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC下),代码不可
能出错。就看看着2979行,是什么情况导致的错误。
    定位到2979行,代码如下:ASSERT((int)m_nFields == m_nFieldsBound);
    ASSERT断言函数用于在代码中捕捉我们的一些假设,具有更好的异常处理特性。如果假设的参数返回值为真,不
做处理;返回值为假,中断程序执行,做出提示。
    ASSERT函数介绍具体参考: http://baike.baidu.com/view/653925.htm

    开始我并没有认识ASSERT((int)m_nFields == m_nFieldsBound)到底怎么回事,直到看到tanwei1002兄的回答,并
结合自己刚才的疑问,才如梦初醒。
    我先在dbcore.cpp的2979行加入断点,然后运行到此处后,分别查看m_nFields和m_nFieldsBound的值,结果正
如疑惑中的那样,m_nFields=19,而m_nFieldsBound=20。问题就变得很清晰,很简单了。于是我在CXXSet头文
件和.CPP文件里加入Telephone的数据交换定义和变量声明,问题迎刃而解!
void COilManageSet::DoFieldExchange(CFieldExchange* pFX)
{RFX_Text(pFX, _T("[Telephone]"), m_Telephone);}
CString m_Telephone;

总结:

关于Debug Assertion Failed! 错误,还有很多其他的问题,比如野指针导致的内存错误之类的,我这只是一例。和其

他的基本没有什么联系,因为错误所在的文件是不同的,解决办法也各有差异。如果不能解决你的问题,深表遗憾!

另附tanwei1002兄的回答地址,以表感谢!

http://topic.csdn.net/u/20100427/17/c7c1af48-ba32-46b6-9216-bc7e394edeb2.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值