mfc程序读取access数据库的问题

leemao2 2017-07-02 05:04:23
对着“Visual.C++.2008入门经典(中文版) Ivor Horton著”。在学习第20章的20.6节时遇到不少问题,希望有经验的朋友不吝赐教。
Debug了一天一夜,自己已经焦头烂额了.....

编译正常,执行时一加载“订单”就出错。“订单”是自己另加的第二个记录集对象(第一个记录集“产品”是向导生成的,没问题)。
先是出图1的错误对话框,然后重试,中断。
堆栈信息如图2
出错的局部变量如图3.
可能出错的源代码如图4
数据库的相应表如图5

图1

图2

图3

图4

图5
...全文
155 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-07-03
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
战在春秋 2017-07-03
  • 打赏
  • 举报
回复
当View得到焦点时,会触发OnActivateView消息。 详细可参考: https://msdn.microsoft.com/en-us/library/aa248067(v=vs.60).aspx 分步调试的话,应该看到上面的代码都会再次执行,直到停到AfxMessagebox。 不是完全清楚你代码的逻辑,可以在合适的地方定义一个逻辑变量bShowMessage = true;
if(m_pSet ->IsEOF() && bShowMessage )
{
     AfxMesssbox(".....");..
     bShowMessage  = false;
}
大概是这个思路,具体怎么写你再试试。
leemao2 2017-07-02
  • 打赏
  • 举报
回复
完整的该函数
leemao2 2017-07-02
  • 打赏
  • 举报
回复
谢谢两位的解答!
程序可以向下执行了,不过又出现个新问题。网上也没找到答案,感觉很奇怪。
下图本来是正常弹出的一个消息框,但点击确定后,还是不断弹出。

我设置了断点,逐句,逐过程的调试,发现点击消息框的确定后,程序的执行语句回到AfxMessageBox的前一句了,如下图

我觉得,正常应该是执行下一句吧?
战在春秋 2017-07-02
  • 打赏
  • 举报
回复
以个人的经验,翻译过来的文章或多或少都有一些不靠谱的地方,以前还遇到根本就翻译错的。 关于这个问题,当然最权威的是MSDN,找了这几个函数的说明,没有题目中这样的描述。 如果要深入研究这个问题,最好是找到这本书的英文版本。
leemao2 2017-07-02
  • 打赏
  • 举报
回复
引用 1 楼 homesos 的回复:
szName为NULL?

从调用堆栈上看,应该检查一下DoFieldExchange() 92行调用RFX_Long的第二个参数。


确实是,第二个参数是“NULL”。源代码如下图

其实书中给出的示例第二个参数是注释掉的“_T("ProductIDParam")”,如下图的代码。不过如下图中文字所述,书中也说到这个参数可以设为“NULL”,而且我感觉"ProductIDParam"这个字符串很奇怪,因为数据库没这个名称的表或字段,所以后来就给改成NULL了。

是不是我对书中意思理解错了?望指教,谢谢!
homesos 2017-07-02
  • 打赏
  • 举报
回复
szName为NULL? 从调用堆栈上看,应该检查一下DoFieldExchange() 92行调用RFX_Long的第二个参数。

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧