【问题标题】:Ideas to replace Stored Procedure in Cash Flow report [closed]在现金流报告中替换存储过程的想法[关闭]
【发布时间】:2008-09-29 18:36:52
【问题描述】:
我们有一个基本上是这种结构的现金流量报告:
Date |Credit|Debit|balance|
09/29| 20 | 10 | 10 |
09/30| 0 | 10 | 0 |
主要问题是余额,由于我们使用DataSet作为Data,计算DataSet上的余额有点困难,因为我们总是需要前一天的余额。
此外,这些数据来自多个表,并且很难维护此过程,因为数据库元数据经常更改。
谁能给我一些可能的不同解决方案?解决问题?
此报告正在 DataGrid 上显示。
【问题讨论】:
标签:
delphi
stored-procedures
report
【解决方案1】:
这对您来说可能变化太大或不合时宜,但现金流量报告向我表明,您可能正在正式或非正式地维持某种总账安排。如果您是,那么也许我对此很幼稚,但我认为您应该将总分类帐详细信息保留为单个表格,其中包含最少数量的列,例如 ID、日期、帐户、来源和金额。
来自不同表格的所有数据表明,有几种不同类型的事件会影响您的现金。对我来说,在他们自己的表中表示这些不同类型的事件(如应收账款或应付账款或库存等)是有意义的,但诀窍是在这些其他表中没有任何货币列。相反,让他们参考总账明细中记录该数据的行。如果您强制执行此操作,那么无论对其他表进行更改,现金流将始终保持不变。
余额远期问题仍需解决,您必须考虑所涉及的交易数量和系统所需的响应能力,但至少您可以一次性决定如何处理,而不必随着系统其他部分的发展进行更改。
【解决方案2】:
在代码方面,您有两个相对简单的选项,但它们都涉及遍历数据集。
选项 1:数据绑定之前的 For 循环。
对于数据表中的每一行,将贷方/借方添加/减去前一行的余额并将其分配到数据表的相应单元格。
选项 2:在数据绑定期间计算。
首先,您将有一个全局变量,您可以在其中保存您的值。在数据绑定之前将其设置为零。对于每个项目或替代项目,将贷方/借方添加/减去全局变量并将其分配给数据网格的适当单元格。
【解决方案3】:
请注意,这通常意味着网络流量的大幅增加,这会降低整个应用程序的性能(因为您必须获取所有这些数据才能在客户端上进行处理)。
另一种方法是创建一个(在您喜欢的实现中) 中间层应用程序,您可以发送请求并在数据库服务器或单独的网段中执行此处理。
如果有SP做这个计算,通常是因为它涉及大量数据,目的是避免这种在网络中的循环。