关于数据库的计算(急!!!在线等待)(200分)

  • 主题发起人 主题发起人 xiehong
  • 开始时间 开始时间
X

xiehong

Unregistered / Unconfirmed
GUEST, unregistred user!
一个数据库,有四个数值字段,其中一个字段的结果是其它三个字段的和,当前三个字段
输入数值后,最后一个字段自动地根据前三个字段求和,我的问题是:当三个字段中的数值
有变化的时候,求和字段也能正确无误地重新计算更新.
 
需要对某字段的所有记录求和,使用如下代码:
var i:double;
{$R *.DFM}
procedure TForm1.Table1CalcFields(dataset: Tdataset);
var
Goodsgold:double;
begin
Goodsgold:=table1.fieldbyname('金额').asfloat;
i:=i+Goodsgold;
label1.caption:=formatfloat('0.00',i);
end;
其中的i是求得的总和,在必要时才将他复位为0,要不他总是有增无减。

 
1、用触发器,在AfterUpdate的时候更改第四个字段的值
2、删除第四个字段,在要使用的时候直接从前三个字段中得到值
建议用第2个方法。
 
同意樓上的!
 
在每个字段的OnChange事件中写
with TableName do
begin
字段4:= 字段1+字段2+字段3;
end;
 
ty_unix和xianjun两位的方法都有一些问题.
xianjun的第二种方法也不太适用,第四个字段必须是数据库中的物理字段,必须能物理地
写到数据库中,所以不能是计算字段,我的方法是这样:在每一个DBEdit控件中设计exit过程,如下:
procedure TForm1.DBEdit2Exit(Sender: TObject);
begin
table1.first;
while not table1.eof do
begin
table1.edit;
table1A4.value:=table1A1.value;
table1.next;
end;
end;

procedure TForm1.DBEdit3Exit(Sender: TObject);
begin
table1.first;
while not table1.eof do
begin
table1.edit;
table1A4.value:=table1A4.value+TABLE1A2.value;
table1.next;
end;
end;

procedure TForm1.DBEdit4Exit(Sender: TObject);
begin
table1.first;
while not table1.eof do
begin
table1.edit;
table1A4.value:=table1A4.value+table1A3.value;
table1.next;
end;
end;
这样做的问题是当前三个字段都正确无误的时候,计算没有问题,可是一旦有一个字段有错误,
需要改动,那么第四个字段计算就有问题了,不知道应该如何解决。
 
1:其实只是针对一条记录,没必要全部更新记录吧!
2:用edit来作为数据记录显示,在onchange事件中来处理计算并检查数据是否正确
其实用edit,memo等来显示数据要灵活很多,只是要多写一些代码
 
用SQL Command就可以實現啦,
UPDATE <TableName> SET <需要統計的Field>=<需要相加的三個Field> WHERE <你需要的條件>
 
alextsui的方法最好
 
>>第四个字段必须是数据库中的物理字段,
很少见到这么设计数据库的!

如果你用客户端代码这样实现的话,恭喜你,多用户并发的时候你就准备重写代码吧 [:)]
 
alextsui或yanghai04037请说详细些:
要在什么过程中使用"update" sql命令?如何使用?请给出代码。
 
xianjun大侠,讨教了,第四个字段是否应该是“虚拟的”计算字段,另外,依你看,我的
这个问题应该如何处理?
 
就是在你會改變前三個Field的過程中使用這個SQL Command, 至於如何編寫, 你只要按照
我給出的語法就可以實現了.
UPDATE <TableName> SET <SumField>=<aField>+<bField>+<cField> WHERE <你需要的條件>
詳細可以查閱SQL Server的 Books Online.
 
计算字段呀,必要时触发
 
在每个字段的OnChange事件中写
with TableName do
begin
字段4:= 字段1+字段2+字段3;
end;
 
To xiehong :
問題解決了沒有, 如果還不行的話把問題直接Email給好了, 我這段時間有點空.
 
第四个字段根本就不应该在数据库中出现,因为它是由前三个字段的值求和得到的
只在显示给用户看的时候才会出现,用Delphi支持的计算字段能很好实现
如果要保存的话,这样就存在同步更新的问题
这个在客户端做无论从效率还是其他方面来说都是不可取的(除非你的是单用户版)
 
用觸發器,應該比較簡單吧!
 
后退
顶部