EDIT问题?(100分)

  • 主题发起人 主题发起人 ch_100755
  • 开始时间 开始时间
C

ch_100755

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个有很多条记录的表中执行修改作业,依次修改每一个记录,会出现'Debugger Exception Notification
Project tableprint.exe raised exception class EOleException with message
'缺少更新或刷新的键列信息。'. Process stopped. Use Step or Run to continue.'
的错误提示,如何解决代码如下
var
ye:real;
begin
data.kj_table.first;
ye:=1000;
while not data.kj_table.eof do
begin
data.edit;
ye:=ye-data.fieldbyname('je').asfloat;
data.fieldbyname('ye').asfloat:=ye;
data.post;
end;

 
对不起代码写的不对
with data.kj_query
begin
first;
while not eof do
begin
edit;
ye:=ye-fieldbyname('je').asfloat;
fieldbyname('ye').asfloat:=ye;
post;
end;
 
query1: update tablename
set ye=ye-je
query1.close;
query1.execsql;
就可以了
 
你的data是不是dataset啊,而且,如果你查询的数据是从两个以上的数据库查询的话,就
不能直接post的。
 
设data.kj_query.requestlive:=true 试试,如不行,用ugvanxk说的比较合适,现行的做法会存在很多潜在的问题
 
你的记录一直都停在第一条纪录上(first),怎么能匹配呢?
with data.kj_query
begin
first;
while not eof do
begin
edit;
ye:=ye-fieldbyname('je').asfloat;
fieldbyname('ye').asfloat:=ye;
post;
next; ==>加上此句
end;
 
我的代码有NEXT这句,这样一样有问题,我是计算余额的,有一个期初余额然后一个个减去
中间的金额,把所得到余额的作业写进每条记录中。如果用SQL的UPDATE不是把所有的余额都改
成一个值了吗?
 
你的问题很可能是表没有设主键。
用SQL的Update要加where子句以限定修改的记录,对于没设主键的表来说,这是唯一的办法。
 
后退
顶部