各位高手请解答“数据库DBGird的取值问题”。(100分)

  • 主题发起人 主题发起人 aidren
  • 开始时间 开始时间
A

aidren

Unregistered / Unconfirmed
GUEST, unregistred user!
本人想要实现如下的功能:
单价 数量 金额
11 2 22
12 2 24
只要我在“单价”和“数量”字段里输入“11”和“2”当焦点移到“金额”字段的时候
就会自动显示“单价”和“数量”的乘积“22”;
还有我想用label来接收两列“数量”的总和怎样实现?
比如: label1.caption:=ADOtable1.fieldbyname('数量').asstring;//这样label1.caption等于“2”
我要显示两列之和“4”;
有待各位大佬帮我解答了。
 
第一个问题:用计算字段试试
第二个问题:label1.caption:=IntToStr(Sum(ADOTable1.FieldByName('数量').AsInteger));
 
to YNTW
SUM是怎么定义阿?如果不定义的话编译不通过阿。[8D][8D]
 
sum
不需要定义吧 .
 
to 孤雪
不定义的话我真的编译不通过。还有更好的方法吗?
 
在数据库中定义一个SUM字段,
在ADOTABLE1.ONCALCFIELDS中指定
ADOTABLE1['SUM'] := ADOTABLE1['UNIT_PRICE'] * ADOTABLE1['AMOUNT'];
即可。
 
各位!第一个问题本人已经解决了,现在主要讨论第二个问题。
呵呵!!各位高手加油啊,100分等着你们了。
 
增加一个query1
在ADOTable1.AfterPost事件中用SQL统计.
with quier1 do
Close;
Sql.Clear;
Sql.Add(select sum(数量) from ADOTAble1(这里应该是数据库的名称));
Prepare;
Open;
label1.caption:=Query1.Fields[0].AsString;
End;
 
TO;netatom,
老兄的提议不错,还有没有更简单一点的呢?请各位继续讨论阿!
 
TO aidren:
不好意思呀,第二个问题不对,偶再想想
 
每次都重新统计:
var
sum:Integer;
begin
sum:=0;
with ADOTable1 do
begin
DisableControls;
First;
while Not eof do
begin
sum:=sum+FieldByName('sl').AsInteger;
Next;
end;
EnableControls;
end;
Label1.Caption:=IntToStr(sum);
end;

更新当前显示:
var
sum,OldSl:Integer;//定义为全局变量,sum在ADOTable1.AfterOpen中得到,OldSl在ADOTable1.BeforeScroll中得到
begin
with ADOTable1 do
begin
if 增加 then
sum:=sum+FieldByName('sl').AsInteger;
if 删除 then
sum:=sum-FieldByName('sl').AsInteger;
if 修改 then
sum:=Sum-OldSl+FieldByName('sl').AsInteger;
end;
Label1.Caption:=IntToStr(sum);
end;

目前只想到这样处理。
 
我看还是用netatom的方法,也不是很复杂!
 
如果想用第三方控件的话推荐用DevExpress的dxdbgrid
你要的功能都能实现而且,还有好多更好的功能
 
netatom的方法最有效率。
YNTW的方法效率较低
 
不同意楼上的观点,
YNTW兄的方法麻烦,但还是有效率的。
netatom兄的方法虽然不错,但对于CacheUpdate的表(BDE,ADO都一样)
计算会有问题。因为此时数据还在缓存中,没有写到数据库里,用其它的
Dataset控件(Query,ADOQuery)都是查不到数据的。
如果数据量不大的话,用个循环来计算一遍就是了。
就响应的事件来说,除了AfterPost,AfterDelete也要重算。
 
谢谢各位老兄的帮助,小弟我已经全部搞好了。第一个问题是利用了ADOtable 的 fields Edits的
新添字段(此字段为虚拟字段在表里面没有的)然后with adotable1 do
FieldByName('ADDall').value:=FieldByName('number').value+FieldByName('photo').value;
就可以搞定了。
第二个问题也很简单,出来用到netatom所说的两个控件外还用了一个ADOConnection1 然后写死查询
语句,最后就是赋值。代码比netatom的更少。
各位还有什么更好的方法吗?说出来一起参考怎么样啊?
 
robertcool 2
netatom35
YNTW 40
zh_2001 2
白海森 3
杜宝 10
孤雪 3
徐凤华 5

 
多谢各位老兄的帮忙,我这样分配分数不知道公不公平阿?这就叫做见者有份阿!!!哈哈
希望以后还有机会跟你们一起讨论问题ok?

我的邮箱地址是shiqinglangzi@163.net QQ号码是5150379 希望大家来做客。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
922
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部