gpt4 book ai didi

DELPHI:使用 ClientDataSet 和 CalcFields 的主从细节

转载 作者:行者123 更新时间:2023-12-02 06:40:11 29 4
gpt4 key购买 nike

我有一个主/详细信息 ClientDataSet,如下所示(这些是在运行时创建/填充的,并填充有从 API 调用返回的数据,没有数据库连接):

Services:
ID
Name
BasePrice
etc.

AddOns:
Selected
ID
ServiceID
Name
Quantity
UnitCost
TotalCost
etc.

我将服务显示为下拉字段,然后使用该服务的可用加载项填充网格。 “TotalCost”字段是一个计算字段,显示在网格中其自己的列中。 “选定”字段用于跟踪网格中显示的复选框,以指示客户想要该特定附加组件。

这一切都按预期工作。我现在需要计算服务加上任何附加服务的总成本。我可以使用以下方式检索服务的成本:

ClientDataSetServices.FieldByName('BasePrice').Value

但是,我无法从每个选定的附加组件中检索 TotalCost。我以为我可以使用聚合字段,但在我的搜索中,我发现使用主/详细信息设置这是不可能的。我还尝试简单地迭代 ClientsDataSet 的详细信息,如下所示:

  (within the CalcFields method of the details ClientDataSet)
// Add parts to parts cost
grdMain.DataSource.DataSet.First;
while not grdMain.DataSource.DataSet.Eof do begin

if (grdMain.DataSource.DataSet.FieldByName('Selected').Value) then begin
FPartsCost := FPartsCost +
grdMain.DataSource.DataSet.FieldByName('TotalPrice').Value;
end;

grdMain.DataSource.DataSet.Next;
end;

但这会导致无限循环。当我调试这部分代码时,我发现 ...DataSet.First 正在调用 CalcFields(或其他调用 CalcFields 的东西)。

如何迭代所选附加组件的数据集以动态计算总成本(每当选择或数量发生变化时)?

--编辑--

我尝试在详细信息表上设置聚合,如下所示:

  • 添加了 TAggregate“AggregatePrice”
  • 按如下方式设置字段: 事件 - 真实 名称 - 总价' 表达式 - SUM(总价格) 分组级别 - 1 索引名称 - 服务 ID 可见 - 真实

当我运行此命令时,我收到错误消息“字段‘TotalPrice’不是聚合中使用的计算字段的正确类型,请使用内部计算”

最佳答案

编辑后,答案似乎很明显:使用 InternalCalc 字段而不是简单的 CalcField!

计算仍然在 OnCalcField 内完成,但您必须检查 dsInternalCalc 的 TDataset.State。

这是必要的,因为聚合是在 dsInternalCalc 之后、dsCalcFields 状态之前计算的。

顺便说一句,InternalCalc 字段可用于索引,但简单的 CalcField 则不能。

关于DELPHI:使用 ClientDataSet 和 CalcFields 的主从细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10318715/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com