在Delphi XE中,Number超出范围错误

时间:2014-10-07 15:47:00

标签: delphi delphi-xe6 paradox

我正在使用一个旧的Paradox数据库以及我继承的旧Delphi程序,当我点击此声明时,它一直给我一个数字超出范围错误:

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

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

2 个答案:

答案 0 :(得分:1)

更新旧的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文件添加到您的项目&amp;重建你的项目。

答案 1 :(得分:0)

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

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