1

当我尝试访问聚合字段(SU​​M_TOTAL) 的值时,如下行:

DM.cdsTOTAL.AsCurrency := DM.cdsItemSUM_TOTAL.AsCurrency;

出现以下错误:

无法以浮点类型访问字段“SUM_TOTAL”。

我的临时解决方案是这样的:

DM.cdsTOTAL.AsCurrency := StrToCurrDef(DM.cdsItemSUM_TOTAL.AsString, 0);

还有其他建议吗?

4

3 回答 3

2

这就是 TAggregateField 设计不足的原因。请参阅 db.pas 中的实现细节以了解它不会覆盖引发上述 AccessError 的基本 TField.GetAs... 系列

于 2013-01-09T06:37:24.647 回答
1

只是在黑暗中拍摄:

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;

由于该值是浮点数(可能是双精度),我相信它可以转换为货币变量。

于 2013-01-18T17:05:59.633 回答
1

您可以为 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;
于 2013-01-19T21:00:42.833 回答