当我尝试访问聚合字段(SUM_TOTAL) 的值时,如下行:
DM.cdsTOTAL.AsCurrency := DM.cdsItemSUM_TOTAL.AsCurrency;
出现以下错误:
无法以浮点类型访问字段“SUM_TOTAL”。
我的临时解决方案是这样的:
DM.cdsTOTAL.AsCurrency := StrToCurrDef(DM.cdsItemSUM_TOTAL.AsString, 0);
还有其他建议吗?
当我尝试访问聚合字段(SUM_TOTAL) 的值时,如下行:
DM.cdsTOTAL.AsCurrency := DM.cdsItemSUM_TOTAL.AsCurrency;
出现以下错误:
无法以浮点类型访问字段“SUM_TOTAL”。
我的临时解决方案是这样的:
DM.cdsTOTAL.AsCurrency := StrToCurrDef(DM.cdsItemSUM_TOTAL.AsString, 0);
还有其他建议吗?
这就是 TAggregateField 设计不足的原因。请参阅 db.pas 中的实现细节以了解它不会覆盖引发上述 AccessError 的基本 TField.GetAs... 系列
只是在黑暗中拍摄:
begin
If DM.cdsItemSUM_TOTAL.IsNull then
begin
DM.cdsTOTAL.AsCurrency := 0;
end
else
begin
DM.cdsTOTAL.AsCurrency := Currency(DM.cdsItemSUM_TOTAL.Value);
end;
end;
由于该值是浮点数(可能是双精度),我相信它可以转换为货币变量。
您可以为 TAggregateField 实现类助手,如果需要,可以为 TAggregate
type
TAggregateHelper=Class Helper for TAggregate
private
function GetCurrency: Currency;
published
Property asCurrency:Currency read GetCurrency;
End;
TAggregateFieldHelper=Class Helper for TAggregateField
private
function GetCurrency: Currency;
published
Property asCurrency:Currency read GetCurrency;
End;
implementation
{ TAggregateHelper }
function TAggregateHelper.GetCurrency: Currency;
begin
if not VarIsNull(Value) then
Result := Value
else Result := Value;
end;
{ TAggregateFieldHelper }
function TAggregateFieldHelper.GetCurrency: Currency;
begin
if not VarIsNull(Value) then
Result := Value
else Result := Value;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Showmessage(FloatToStr(CDSTotal.AsCurrency) + '-' + FloatToStr(CDS.Aggregat[0].asCurrency));
end;