请教一个关于数据库中数据显示和存储的三层结构问题(100分)

  • 主题发起人 fillstyle
  • 开始时间
F

fillstyle

Unregistered / Unconfirmed
GUEST, unregistred user!
不知道怎么回事就起了一个怪名字
先说一下我最初的设想吧
是这样的,有一个数据库,里面有若干张表
比如我想显示其中一张表,这张表是这样的

月份 商品A 商品B 商品C 合计
1 10 14 16 40
2 20 0 12 32
3 8 12 8 28

总计 38 26 36 100
数据库里面只有最基本的数据,没有合计和总计的
而显示页面的时候要把总计也做为一条记录,和其他记录一同显示在Grid里面
和同学讨论了一下
不知这么想是否正确

数据库,表 数据层
| |
DataSet(RecordSet) 逻辑层
| |
DBGrid(只用于显示) 表现层

这里逻辑层的目的就是为了对数据库内取出的数据进行再次组织,以便于表现层的显示
大家讨论了一下,同室一个是搞.NET的,说DataSet底层上用的是XML(这个我不懂的说,他
只是就.NET里的DataSet提出的,我不知道是否和Delphi的DataSet一回事)
因此,可以很方便的增加组合型的合计字段(这个明白怎么做),也可以很方便的增加一条
总计记录,当然这一切操作都是对于DataSet这个缓冲区的操作,不会涉及到数据库的变
化,可惜,我刚学Delphi才4天,不知道具体应该如何操作,sigh

有人说可以如下解决问题:
一样的,合计用calculated字段,在oncalcfields事件中写代码(加起来)
而总计用clientdataset的aggregate,在aggregate中定义
expression属性为sum(字段名),就可以了

但如果我有如下BT要求呢?
比如
现在是3月份,每月只有一条记录
现在我进DBGrid,不想看到只有3条记录
而想这样显示
月份 商品A 商品B 商品C 合计
1 10 14 16 40
2 20 0 12 32
3 8 12 8 28
4 0 0 0 0
5 0 0 0 0
....
而实际数据库内并没有4 5 等月份的记录
这样又该怎么办啊
直接编程针对Grid的显示做吗??估计应该可以这样做,但不知如何做
DataSet支持任意添加一条记录而不是单纯的总计吗?

上面的理解不知是否有错,还请告知.另外,具体应该怎么解决这个问题
DataSet能否如上面所说的是一个数据缓冲区,我可以自由的添加/删除 字段和记录呢??
还请各位指点.
谢过先
 
没有人知道吗??
可以加分的说
 
首先,用DBGrid可以实现你所介绍的合计(用新增计算字段实现)但不能实现总计(即新增一条记录).
总计可以这样解决:
1.如果你的数据表本身就是从后台表直接获得,而不是sql语句或者存储过程的结果,
你可以对数据源操作,新增一条统计记录,但注意不要保存.
2.如果不是上述情况,则你必须在后台select 语句中使用union语法先执行统计.
3.用第三方控件,比如:ExpressQuantumGrid,它有行统计功能.
 
ClientDataSet中的数据你可以进行任意的增删,只要你不进行ApplyUpdates就行了
ClientDataSet的好处就是具有很好灵活性,当然你可以插入N条空记录(为了显示)
也可以在最后插入总计行...只要你不ApplyUpdates,如果你只是为了显示,在数据
Open后可以将Connection断掉的,也就是说你对ClientdataSet的任何变化都不会
反应到数据库的本身上,除非你调用了ApplyUpdates...
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
655
SUNSTONE的Delphi笔记
S
顶部