我自己写程序已经加了adoquery.edit,但是我用语句更改数据时,还老是提示DATA SET 不是EDIT或INSERT状态。
当你修改dbrid中的数据时,数据集会自动进入edit状态,当记录指针移动到其它记录时,数据集会自动post。 当你ADOQUERY.EDIT后,修改内容后不移到其记录,进行post动作不会出错,移动到其他记录后,再进行post动作。就会提示DATA SET 不是EDIT或INSERT状态了。因为已经进行了post动作了.
因为如果更改数据,数据表的状态必须是dsEdit,dsInsert,dsAppend中之一。adoquery.edit是将表的状态改为dsEdit。但是如果此后,adoquery执行了诸如first,post,last等语句,adoquery的状态又变成了dsBrowse。这样再修改就要出错。 比较安全的代码是这样,在修改数据时,加如下代码: if adoquery.State in dsEditModes then adoquery.edit;
但是如果用诸如dbgrid,dbedit的时候,这条语句它们替你做了,你就不要做了。
当你ADOQUERY.EDIT后,修改内容后不移到其记录,进行post动作不会出错,移动到其他记录后,再进行post动作。就会提示DATA SET 不是EDIT或INSERT状态了。因为已经进行了post动作了.
比较安全的代码是这样,在修改数据时,加如下代码:
if adoquery.State in dsEditModes then
adoquery.edit;