TAggregateField疑难问题—十万火急!!!(120分)

  • 主题发起人 主题发起人 lshiren
  • 开始时间 开始时间
L

lshiren

Unregistered / Unconfirmed
GUEST, unregistred user!
本人正在开发一个小的MIDAS,其中有一个表要用到合计。因此
我使用了TAggregateField,我一共用了8个TAggregateField,可是,
除了第一个以外,其它的都不能做正确的统计。
首先,我用SQL语句选择了本年度的三条记录,统计时,把
GroupingLeve设为0,可是只有第一列的统计值是正确的,其它的统
计值是第二和第三条记录对应字段的相加。有时候,统计值还会发生
溢出的现象。
不知哪位高人曾经用过ClientDataSet的Aggregate,请问上述问题
该如何解决啊?另外,ClientDataSet的TAggregate的值如何转换成
String型?
 
发现TAggregateField的下述表达式不等价(?):
sum(FieldA)+sum(FieldB)<>sum(FieldA+FieldB)
我发现这种情况发生在FieldA或FieldB中的值为空时,即NULL时,统计
就会出错。但是我不知道该怎样解决。我想应该有办法解决啊,因为这种
情况在实际应用中很常见的。再次请求高手相助!
注:FieldA和FieldB都是Float型。
 

用sum(FieldA.asfloat)+sum(FieldB.asfloat)
 
sum(FieldA)+sum(FieldB)=sum(isnull(FieldA,0)+isnull(FieldB,0))
 
Liu JZX和cytown的方法我试过了。在TAggregateField的Expression
属性不支持这两种用法,系统提示找不到字段,原因在于TAggregateField不支持运算符的嵌套。
有没有别的方法啊?还是自己编一段程序来实现统计的功能?
 
建议你用tquery返回fielda和fieldb时用isnull(fielda,0)as fielda, isnull(
fieldb,0) as fieldb代替就没有问题了.
taggregatefield.expression='sum(fielda+fieldb)';
 
cytown,你好,我理解了你的方法,不过具体的实现方法(Sql语句该怎样写啊?我只知道Sql的一些最基本的语法)。另外,我所操作的数据表的字段有40多个,用这种方法,Sql语句显得太长了,会不会有问题?
有没有别的方法?
 
sql:='select id,name,isnull(fielda,0)as fielda, isnull(fieldb,0) as fieldb from table where id>100';
sql语句长绝对不会影响效率, 没有任何问题.
其实这种方法最好了.
 
cytown我用Sql Explorer执行了一下,发现有错啊?
提示信息为:Invalid use of keyword。
 
呵呵, 你用的数据库不是sqlserver吗?
 
 我现在在单机上做,使用的是Paradox7.0。正准备移植到Sql Server7.0下。
难道paradox不完全支持Sql语言?我试了别的Sql语句都可以正常执行的,惟独
cyown你写的这句执行不了。
  另外,我发现直接用语句
select sum(fieldA)+sum(fieldB) from table1 也可以得到正确的结果。
可是我不知道怎样把这个结果赋值给程序中的float变量。请问该如何用程序语句
来实现啊?
 
我已经解决了这个问题,感谢各位的回答!
 
多人接受答案了。
 
后退
顶部