gpt4 book ai didi

delphi - 如何强制客户端数据集重新计算计算字段和内部计算字段?

转载 作者:行者123 更新时间:2023-12-03 14:42:10 24 4
gpt4 key购买 nike

我有一个 ClientDatSet ,其中包含一些 fkInternalCalc 字段。 CDS 不与任何提供商关联;相反,它是动态填充的。如何强制 CDS 重新计算所有“可计算”字段?我无法调用 Refresh() 因为没有提供者可以刷新数据。到目前为止,我所采用的唯一方法是浏览所有记录,这不是最好的方法。

PS:我已阅读this questionthis post ,但我希望有一种更优雅的方式。

最佳答案

我通过一个帮助程序(这里删除了必要的部分)实现了这一点,它允许调用 protected 方法而无需任何黑客攻击。确保在 OnCalcFields 中检查 fkInternalCalc 字段中的 DataSet.State = dsInternalCalc

type
TClientDataSetHelper = class helper for TClientDataSet
public
function AssureEditing: Boolean;
procedure InternalCalc;
end;

function TClientDataSetHelper.AssureEditing: Boolean;
begin
result := not (State in [dsEdit, dsInsert]);
if result then
Edit;
end;

procedure TClientDataSetHelper.InternalCalc;
var
needsPost: Boolean;
saveState: TDataSetState;
begin
needsPost := AssureEditing;
saveState := setTempState(dsInternalCalc);
try
RefreshInternalCalcFields(ActiveBuffer);
finally
RestoreState(saveState);
end;
if needsPost then
Post;
end;

可以使用CalculateFields轻松地将其扩展为普通计算字段。尽管这不是必需的,因为每当任何其他数据字段发生更改时,都会重新计算计算字段。

关于delphi - 如何强制客户端数据集重新计算计算字段和内部计算字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17907505/

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