关于报表的排序问题(100分)

P

plwei

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在这里问题成堆了, 真要感谢大富翁论坛。
在打印报表时我想让按计算字段的降序排列, 我办不到。
再次献上百分.为了解决问题我是不惜血本的.
 
用个TList(或TStringList)记录各记录记录号(或者bookmark), 然后对该TList进行排序.
打印时根据该TList顺序到数据库中取相应记录字段值.
 
select a,sum(x) as s from table
group by a
order by s desc
then
PRINT
 
记录少时Another_eyes方法还可以,多时建议用SQL,SQL功能很强,完全可以按你的计算条件排序,如:
Select C1,c2,c1+c2 as c3 from table order by c3 desc
 
好长时间不用SQL了,快要忘光了.
silly 与wangyongkai的方法一样.
那顺便问一下,用视图不知可否?
 
如果计算条件非常复杂呢(其实不必非常复杂, 只要带几个if..else
用sql就让你头晕)?
 
以wangyongkai所说的为例c3为计算字段,还需要在oncalcfields事件中为其处理吗?
我是这样做的放在Quickrep上query1的SQL语句如wangyongkai所说。在query1的字段编辑器中c3为计算字段,在oncalcfields 事件中我对其进行了c3=c1+c2的处理.
但报表预览结果显示,并未进行排序。
 
> 以wangyongkai所说的为例c3为计算字段,还需要在oncalcfields事件中为其处理吗?
不需要, 直接用C3字段就行了.
Select C1, C2, C1+C2 C3 from table1 order by 3 desc
用取得的数据集直接QuickRep吧.
 
可是如果这样的话,在预览报表时该字段没有数据显示。
 
CREATE VIEW tmp_view
AS
select a,sum(x) as s from table
group by a
order by s desc
然后直接使用tmp_view就可以了。
 
我还是在表中建立一个物理字段c3吧?
使c3=c1+c2.
不过我不知道c3的值在什么时候插入合适?
也就是说我想在c1,c2字段改变时c3能自动更新,就象计算字段一样。
 
如果非要在表中建立一个物理字段c3,可以在query前先使用update语句:
UPDATE TABLE1 SET C3=C1+C2
不过,还是使用VIEW好一些:
CREATE VIEW tmp_view
AS
select *,c1+c2 as c3 from table1
order by c3 desc
 
Cytown说的没错,用视图view, 但是我想不通, 你在Quickrep中怎么会C3 没有值?
你是不是在Query.Fielddef中定义了一个计算字段C3 , 不需要这么做, 删除它.

select *,c1+c2 as c3 from table1
order by c3 desc
得到的C3字段, 在Delphi 中已经是一个物理字段了. C3 是在Server端产生的.
 
你这样应该可以呀,如果你用TABLE
做一个计算字段不就成了?
 
不能显示? 我想应是SeaSky所说的原因!
 
多人接受答案了。
 
顶部