计算字段(50分)

  • 主题发起人 主题发起人 Haha...
  • 开始时间 开始时间
H

Haha...

Unregistered / Unconfirmed
GUEST, unregistred user!
下列字段:
ismr:boolean
lb :integer
Ej :integer 计算字段 其oncalfields事件
var
temp :integer;
begin
temp:=0;
while not table1.Eof do begin
if table1.fieldbyname('ismr').asboolean then
temp:=table1.fieldbyname('lb').asinteger;
table1.fieldbyname('Ej').asinteger:=temp+table1.fieldbyname('lb').asinteger;
next;
end;
end;
//?mainform运行时不出现
 
1。究竟是要对每条记录计算‘Ej',还是对所有记录计算一'Ej'
2。假设第一种,则不应加进while,用if就可了.
 
>>while not table1.Eof do begin
>>next;
>>end;

去掉试试.
 
没实现功能:
如下字段
pos :integer
ismr:boolean
LB :integer
Ej :integer (计算字段)
要实现 Ej 的值为对应记录的pos值与
它上面最近的ismr为真的记录的LB值
之和.
 
you must delete the following:
>>while not table1.Eof do begin
>>next;
>>end;

如果要实现你的功能,use Tquery
 
oncalfields事件在记录发生变化就会除法,在你的循环中相当于又出发了oncalfields事件,
所以会死掉
所以必须曲调循环语句
 
同意lidong!
解决:
用tquery,sql语句: select ismr, lb,0 as Ej,其它字段 from 表
使用缓存,在afteropen中加入:
var temp:integer;
begin
temp:=0;
query1.first;
while not query1.eof do
begin
if query1.fieldbyname('ismr').asboolean
then temp:=table1.fieldbyname('lb').asinteger;
query1.edit;
query1.fieldbyname('Ej').asinteger:=temp+query1.fieldbyname('lb').asinteger;
query1.post;
query1.next;
end;
end;
 
多人接受答案了。
 
后退
顶部