我在窗体的一个按钮里写:adotable1.UpdateBatch(); 点饥该按钮后,查看数据库,表里没有新记录,我关闭窗体后再去查看数据库,表里有数据了,不解啊还有,我第一次updatebatch以后,把dbgrid里的记录全部改了,然后再updatebatch, 结果报错:无法为更新定位行,一些记录可能在最后一次读取后更改,文字我也看的懂,就是不知道什么原因

解决方案 »

  1.   

    哦,我在按钮里写了“adotable1.UpdateBatch();  
                        adotable1.close;
                        adotable1.open;
     点饥该按钮后,查看数据库,表里没有新记录,我关闭窗体后再去查看数据库,表里有数据了,不解啊  
      

  2.   

    adotable1是设定为缓存更新了么
    如果不是,调用UpdateBatch();  也是不科学的
      

  3.   

    >>无法为更新定位行,一些记录可能在最后一次读取后更改
    一般是没有主键造成的吧!
      

  4.   

    缓存更新? 是不是locktype设置为ltBatchOptimistic啊? 我设置了啊。
      

  5.   

    updatebatch以后 你把你的query,dbgrid  refresh看看有新的记录的增加吗?
      

  6.   

    我估计也是这个问题,可怎么在access里设置通常所说的id字段呢? 
    大侠帮忙啊
      

  7.   

    哦,我用:adotable1.UpdateBatch();  
                        adotable1.close;
                        adotable1.open;
    第一次在dbgrid里输入数据,提交后,数据库里有新记录!
    然后我把adotable1里的几个字段给:
    dbgrid1.DataSource.DataSet.FieldByName('upshuju').Clear;  了,
    然后我再dbgrid输入新数据,再一次提交,这时数据库里上一次提交的记录被覆盖了!
    出现的是第二次提交的记录! 可我要两次提交的数据都进入数据库啊。
    主要是不太懂updatebatch()的原理。
      

  8.   

    非常感谢angle097113(抵制日货,人人有责!) ,
    我设置了id 字段了,用adotable1.UpdateBatch();  
    还是报错:无法为更新定位行,一些记录可能在最后一次读取后更改的错误了只有用adotable1.UpdateBatch();  
                        adotable1.close;
                        adotable1.open;
    但是又会覆盖记录,哎,
    看来一定要在updatebatch()上解决问题,可惜我不懂他的原理啊,
      

  9.   

    你在输入数据以前先query1.append;
    clear后也要updatebatch的 
    追加新的记录