delphi前台进行插入表数据的时候,因为做了一些相应的设置提示了正常的错误,然后修改错误进行正常存储后adoquery自动把insert变成了update而且update是修改insert的那行数据,请问有没有什么好的方法解决这种 (无法为更新定位行,一些值可能已在最后一次读取后已更改。)

解决方案 »

  1.   

    嗯你没有懂我的意思,我是在delphi插入的时候,因为某些关系,没有插入,进行事物回滚,然后再插入的时候,adoquery把insert变成了update,而且还是修改的那个没有插入成功的那行,所以出现了这样的提示
      

  2.   

    http://www.cnblogs.com/carcode/archive/2009/02/11/1387855.html
      

  3.   

    这样吧我举一个详细的例子,我用delphi+sqlserver做一个进销存的系统比如销售单子,这样我在开俏售单子的时候,一般都是insert这个销售单开的数据存到数据库里面相应的表里面,所以我会加一些限制比如库存,我销售的东西大于库存我就会提示一个相应的错误,然后我更改错误再存储的时候adoquery就会把insert变成了update因为我己经存在数据集了,对里面的修改了,可这时候,我的数据没有存到表上,这样的话,他就会提示无法更新定位行~
      

  4.   

    我的应用,dbgrid只用来浏览,增删改都是通过sql来执行
      

  5.   

    使用数据库时,在提交前,将文本字段=’’字段的IsNull=True,
      

  6.   

    换一种方法试试,比如说用 adocommand来更新
      

  7.   

    做成事务RollBack就好了,为什么还要去更改错误呢?完全没必要再去执行Update更改回去,直接就让数据库自动回到没改动之前的状态。
      

  8.   

    1、记录已被其他人修改;
    2、存在相同记录的行。
    输入的数据最好在提交前验证,无误后再一次INSERT。
      

  9.   

    这种情况是,前台数据和后台数据不一致造成的,
    我一般的处理方法是,添加完后,记录一下主键,然后重新requery一下数据集,再locat一下。
      

  10.   

    回滚-----------------------------------------------------------------------
    Auto Email Sender 自动邮件发送器
      

  11.   

    看的有点糊涂,估计是一条记录,在一个事物中更改了2次。
    如果是那样的话,sql2000的话 打好sp4补丁
    “你没有懂我的意思,我是在delphi插入的时候,因为某些关系,没有插入,进行事物回滚”
    怎么会有这种情况,数据不完整,就不允许操作了(保存前,检查一下数据)。
      

  12.   

    ADO BUG之'无法为更新定位行....' 解决之道 
    http://www.cnblogs.com/carcode/archive/2009/02/11/1387855.html
      

  13.   

    如果使用adoquery.post的方式,关键是有缺省值得字段一定要赋值,不能为空。
    回滚是不影响的,还是post