键列信息不足,更新影响到更多的行。问题主要出在哪里阿?(10分)

  • 主题发起人 主题发起人 狼牙
  • 开始时间 开始时间

狼牙

Unregistered / Unconfirmed
GUEST, unregistred user!
这句问题主要出在哪里阿?
 
分太少了,加点分吧。
 
先回答问题吧。其实,我是总分太少了。。
//很奇怪的,如果把下面的adotable1.edit 改为adotable1.append就不会出错。
而如果用下面的语句,form1.dbgrid处于编辑状态,然后一旦移到其他记录上面,就
弹出错误。why?
with Form1 do
begin
ADOTable1.Edit;
adotable1.FieldByName('商品号').AsString:=adoquery1.fieldbyname('商品号').AsString;
adotable1.FieldByName('商品名').AsString:=adoquery1.fieldbyname('商品名').AsString;
adotable1.FieldByName('单价').AsString:=adoquery1.fieldbyname('单价').AsString;
adotable1.FieldByName('数量').Asinteger:=1;
end;
close;
 
begin
ADOTable1.Edit;
adotable1.FieldByName('商品号').AsString:=adoquery1.fieldbyname('商品号').AsString;
adotable1.FieldByName('商品名').AsString:=adoquery1.fieldbyname('商品名').AsString;
adotable1.FieldByName('单价').AsString:=adoquery1.fieldbyname('单价').AsString;
adotable1.FieldByName('数量').Asinteger:=1;
[red]ADOTable1.post;[/red]
end;
 
to cooler168:
呵呵,我试过了。post后,移动指针同样会出错。我整个的操作步骤是这样的:
一个dbgird,在editbuttonclick事件中form2.show,form2中含一个dbgrid,双击
form2的dbgrid中的任一项数据,都将在form1的dbgrid中显示出来,但这时dbgrid
的状态为改写,这时无错,但移动指针后,立刻报错。
如果把adotable1.edit改为adotable1.append,就不会有错了。所以就搞不懂什么问
题了。呵呵。帮我看看。
 
“键列信息不足,更新影响到更多的行”
含义是:数据库不知道应该更新哪一(或几)条记录。即,记录条件不充分。
从数据库记录更新的直接的原理上讲,是存在不允许存在的或重复的记录。这话说起来简单,
但是造成的原因较多,不好简单分析,有时直接面对程序,可能不知在哪一次调试中就解决
了,(说白了,还是不明白具体原因)。
请狼牙先生,慢慢用您的狼牙啃吧。
 
to chiu:
给我你的地址,我给你发个邮件,你帮我看看程序。ok?
 
给你的数据表加上一个自动递增字段就可以解决了!
 
thdelphi说的有道理,不一定是程序的问题,有可能是数据表设计的问题,你先增加一个
自动增量字段看看。
 
a..............有道理,.我试试.........................靠。
thdelphi你怎么知道?说说原理?呵呵。呵呵。终于解决了这个小问题。呵呵。
说说吧。大侠。
 
因为记录如果没有一个可唯一识别的标志,将不知道更新哪个,所以需要加上一个可区分
分的标志,如自动增加字段,设定其不能重复,此自动递增字段不影响你其他的操作,也
不用为其赋值。
 
后退
顶部