定义了主键,主键为自动id号,用adoquery.post时出现以上错误。把cusrolocation改为cluseserver,没有错误提示(检查数据库,数据也正常填写进数据库中),但dbgrid被清空,没有一条记录显示出来。要close/open之后才正常显示。有没有什么解决方法。

解决方案 »

  1.   

    最笨的方法在adoquery.post后边,对dbgrid进行操作就可以了。我关键没太明白dbgrid被清空,除非你关闭了结果集等操作才会出现,只是添加记录,应该对他进行刷新就可以了*个人意见,仅供参考*
      

  2.   

    也许我对cusrolocation理解不深,(事实上是没有任何理解),反正现在的结果和“关闭了结果集等操作才会出现”的结果一样
      

  3.   

    只有自己是自己的上帝,问题自己解决了:把cusrolocation改回clUseClient修改触发器:在触发器的开始加上SET NOCOUNT ON,结束加上SET NOCOUNT OFF
      

  4.   

    由于所修改的记录与数据库所存在的记录冲突,导致更改失败(如其他用户已将记录删除),如果没有触发器,其实程序发生警告信息给Errors集合,但不终止程序运行,也不会出实时错误提示。如果你加上触发器,你所进行批更新包括从Deleted表中记录,即所有删除的记录,所有的更新请求都不存在(或已被其它用户删除),所以出现实时运行错误。 
        建议:用Ado对象Update方法代替UpdataBath试一试
      

  5.   

    这个问题是老问题问题关键是在数据表中出现重复记录当Delphi6.0刚刚推出来的时候,很多宣传资料说解决了这个问题,但是在最残酷的测试下,依然出现此问题!最容易出现的地方是:当新增记录的时候,表里面添加了默认值,然后保存。因为Delphi默认不添加空的重复记录(当年FoxPro程序员转Delphi的时候被这个限制搞的头晕脑胀),但是只要有值就可以添加(大量出现在主从关系的从表中,关联字段默认添加),然后就死掉了!所以你的触发器有点是在“FOR UPDATE”上,只有更新时触发,那么INSERT时如何处理,其实这个问题最容易出现在这里!据我的使用及测试经验,一般解决方案有如下几点:1、及时升级你的MDAC(目前是2.7 Refresh 2)及开发工具补丁,通过ADO方式连接数据库这是没有办法的办法,当然不会很彻底;2、给数据库建立唯一索引,这种方法根据实际情况而定,因为很多情况下必须要添加自动递增字段,象有些基础资料数据库根本就不可取3、比较好的办法,全部用手工控制不出现重复记录一般情况下,控制方法主要有:1、尽量不使用DB控件,尤其是DBNavigate控件,通过ADO的时候那玩意实在太弱智;2、多数数据控制可以通过键值控制或者通过触发器控制!