Delphi XE中的数字超出范围错误



我使用的是一个旧的Paradox数据库和我继承的一个旧Delphi程序,当我遇到以下语句时,它一直给我一个数字超出范围的错误:

POE_Data.OrdersTaxRate.AsFloat:= StrToFloat(Copy(TaxRateLabel.Caption, 1,1));

TaxRateLabel.Caption等于7%,因此StrToFloat只传递7个字符。TaxRate字段在数据库中定义为BCD字段,小数点后两位。我在数据库中没有看到任何最小值或最大值设置,那么为什么这会产生数字超出范围的错误呢?

我在更新旧的C++Builder项目时遇到了类似的问题。解决方案是将Source\data\data.DB.pas文件复制到项目的代码文件夹中,然后进行以下代码更改:

procedure TBCDField.SetAsCurrency(Value: Currency);
begin
  if FCheckRange and ((Value < FMinValue) or (Value > FMaxValue)) then
    RangeError(Value, FMinValue, FMaxValue);
//  if FIOBuffer <> nil then
//    TDBBitConverter.UnsafeFrom<System.Currency>(Value, FIOBuffer);
//  SetData(FIOBuffer, False);
  SetData(@Value, False);    // replaces the lines above
end;                         // so can TField.AsBCD

然后将修改后的Data.DB.pas文件添加到您的项目&重建您的项目。

在Delphi XE中有一个AsBcd属性。您可以将它与StrToBcd函数一起使用,该函数将字符串转换为TBcd:

POE_Data.OrdersTaxRate.AsBcd:= StrToBcd(Copy(TaxRateLabel.Caption, 1,1));

相关内容

  • 没有找到相关文章

最新更新