因为dbgrid是dataware control,其中有代码在你输入数据前,自动调用了dataset.edit;所以才你觉得不用写什么代码。

解决方案 »

  1.   

    楼上的:我在更改语句前有一条ADOQUERY.EDIT语句。
      

  2.   

    是啊,自己写程序必须加adoquery.edit;
    但是如果用诸如dbgrid,dbedit的时候,这条语句它们替你做了,你就不要做了。
      

  3.   

    我自己写程序已经加了adoquery.edit,但是我用语句更改数据时,还老是提示DATA SET 不是EDIT或INSERT状态。
      

  4.   

    当你修改dbrid中的数据时,数据集会自动进入edit状态,当记录指针移动到其它记录时,数据集会自动post。
    当你ADOQUERY.EDIT后,修改内容后不移到其记录,进行post动作不会出错,移动到其他记录后,再进行post动作。就会提示DATA SET 不是EDIT或INSERT状态了。因为已经进行了post动作了.
      

  5.   

    因为如果更改数据,数据表的状态必须是dsEdit,dsInsert,dsAppend中之一。adoquery.edit是将表的状态改为dsEdit。但是如果此后,adoquery执行了诸如first,post,last等语句,adoquery的状态又变成了dsBrowse。这样再修改就要出错。
    比较安全的代码是这样,在修改数据时,加如下代码:
    if adoquery.State in dsEditModes then
      adoquery.edit;
      

  6.   

    我还没运行到了post动作,就已经出错了,而且我采用的是批更新。
      

  7.   

    不一定非要post. cancel,first,next,last,prior等都会引起状态改变。