关于DBGrideh出现Dataset not in edit or insert mode

      前两天一直在对DBGrideh 进行操作,我是做一个checkbox 的选择框,对没勾选的记录点击进行添加数据,对有勾选的记录点击进行是否删除数据。我是在选择框的数据改变是事件onupdatedata的事件中对数进行修改,但有时候可以修改,有时候就会出现adoquery1: dataset not in edit or insert mode 的错误,我百思不得其解。

        在网上找了好久,有人说是把DBGrideh 关连的adoquery 的locktype的值设为ltBatchOptimistic,但这只能在正确的操作时才不会出错。但可想而知道,你做的软件是给别人用的,不是给自己用的,你必须考虑到别人有可能出现在错误操作,从而对这个错误操作进行处理。

        经过我好长时间的测试,我发现在DBGrideh 的事件或是在DBGrideh 的colouns 的事件中对DBGrideh 的值和对DBGrideh 关连的adoquery的值进行修改就会产生adoquery1: dataset not in edit or insert mode 的错误,我之前有的没有出错的原因是因为我是在事件里新创建一个窗体,然后在这个窗体的某一个事件或某一个控件的事件里对DBGrideh 的值和对DBGrideh 关连的adoquery的值进行修改。也就是说不用要在DBGrideh 的事件或是DBGrideh 的colouns 的事件中对其数据进行修改就不会出错了。

      但是我在想,你不可能每次都要跳出一个窗体,再对这个窗体进行操作之后才会对DBGrideh 的数据进行修改。只要在DBGrideh 的事件或是在DBGrideh 的colouns 的事件中要修改时,跳到另一个窗体或控件,然后让这个窗体或控件自动执行代码,而没有显示什么东西出来不就可以了!想通了之后我第一个想到的就是Timer控件。只要把Timer的Enabled默认值设为false,把Timer的Interval的值设得小一点(可以在10左右),把要修改数据的代码放在Timer的ontimer事件里,但是在这些代码前要先放上Timer1.Enabled:=false;  之后只要在需要执行修改数据的代码时把Timer1.Enable:=true;就可以了。

      我想到的目前就是用新窗体各Timer来解决,希望名位看者能想出更好的解决办法,到时也给我留下言,让我也能多学点东西!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
玩delphi,学pascal那么久了,很多知识也都是互联网上搜索,也是依靠很多网友提供的资料去学习的,在此感谢互联网, 感谢那些技术分享的朋友们,近来打算在鄙人这年纪最后完成一个二次开发框架的软件(全凭自己的兴趣,因本人就一IT宅男,搞完后 估计本人也没有精力学习其它了),此软件想尽量少用第三方控件,但里面的DBTree功能不可避免,本以为网上找个DBTree是个手到擒来 的事情,没想到百度了一整天,居然没有一个好的DBTree,也许有人会说Ehlib的dbgridEH+Memtableeh可以,但这第三方软件包还需要带 有其它的东西,有点大,前面说过了,本软件想尽量少用第三方,除此外,国内的DBTree控件居然没有几个行的,看来delphi真的落寞了, 只能祝福delphi借xe5跨平台再次崛起吧!其实也不是说国产的DBTree没有,有那么两三个人做过,但我测试后很多问题,有些还把SQL做 到控件里,而且关联死TADOQuery,这样的控件让人以后如何用,国外的DBTree目前就发现一个还可以的是Dxdbtree, 公司也是大名顶顶的Developer Express Inc ,但不知道为何,网上找的只有1.3.1版本,而且只是For D7的,装上后, 发现还是要引用自己的内存数据(MemData)表才行,看了下源码,写得很复杂,晕啊,我只想找个简简单单功能的DBTree控件,怎么那么难呢, 要求也不高,只需要继承于TTreeView,载入数据表树结构,展示出一个TreeView,能简单的拖动,删除树结构的操作就行, 求人不如求自,既然简单的就自己来做一个控件吧!经过三天参看源码和网络技术资料搜索,基本学会了delphi控件开发了, 因鄙人之前并没有真正做过什么控件,最后做出来的结果感觉还是不错的,鄙人在此公布源码并对源码关键地方用中文详细注释, 目的是希望给以后有类似像我这样的找DBTree的朋友一点帮助!同时也是给初学delphi控件编程的朋友是一个好教材!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值