程序写完了,但还有只BUG没抓到。

仙侣步惊云 2003-08-25 12:51:05


用BC做了一个数据库程序,有许多ADOQuery、DataSource是动态创建的,采用了MDI和BPL包方式,运行一切正常,但有一个出错已耗去了我一个星期:
在BC6+updata4中编译通过,但关闭窗口结束程序运行时,偶有弹出CPU窗口,提示出现AV错误,出错地址绝大部份是固定的。程序编译后,在win2000下运行无任何问题,在win98下退出程序时偶有无法消除的“非法操作”。反复检查源程序,未发现使用未经初始化的指针和已删除的指针,真是遇见鬼了。
另:字段在定义数据库时规定了不能为空,但在DBEdit中如果不录数据,则无法提交数据,但如果录了数据后再清空,却能保存,保存结果是空字符串。怎样才能把空字符串当成空而让数据库拒绝保存?
...全文
43 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunmedia 2003-08-26
  • 打赏
  • 举报
回复
遇到这样的问题真是痛苦,我也有过相似的经历,不过最后还是解决了,还是自己的程序中,判断不够严谨造成的,望你静下心来,好好找找,会解决的。
TR@SOE 2003-08-25
  • 打赏
  • 举报
回复
第二个问题可以判断是否是空字符串。是的话,就拒绝提交。

第一个问题比较难回答。一般情况下,有可能是程序在退出时,对象进行析构,但是同时如TADOTable这样的连接还没有关闭,程序又去尝试关闭引起的(因为此时对象已经析构了),所以就引起了AV错误。

netsys2 2003-08-25
  • 打赏
  • 举报
回复
写程序时打开CODEGUARD,可以帮你查错

project->Options->CodeGuard
ljianq 2003-08-25
  • 打赏
  • 举报
回复
2、将数据集中的Constraints属性中的约束去掉。
lvjack 2003-08-25
  • 打赏
  • 举报
回复
2、在数据库中写触发器,拒绝空串 试试
netsys2 2003-08-25
  • 打赏
  • 举报
回复
你用DBEDIT没法拒绝提交,

它的OnChange,OnExit事件都没有取消的设置。

你干脆别用它,用Edit,这样自己提交,自己判断
仙侣步惊云 2003-08-25
  • 打赏
  • 举报
回复
打开CodeGuard,运行出错后再打开View CodeGuard Log,发现没有任何出错记载。
我在程序中用了大约40个DBEdit和65个DBComboBox,而且分散在3个BPL文件中,如果每个都判断一下,工作量太大了,即使写一个共用的事件句柄也很费事,有没有一次性搞定的方法?

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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