Delphi IBX将Firedac迁移到Firebird

时间:2019-02-26 08:22:22

标签: delphi firebird firedac

我将具有500多种表单的IBX应用程序迁移到Firedac。我使用Delphi帮助映射了数据类型。这是我的数据映射:

  with ADB.FormatOptions do
  begin
    OwnMapRules := True;
    DefaultParamDataType := ftVariant;

    MapRules.Clear;
    with MapRules.Add do
    begin
      PrecMax        := 4;
      PrecMin        := 0;
      ScaleMax       := 0;
      ScaleMin       := 0;
      SourceDataType := dtFmtBCD;
      TargetDataType := dtInt16;
    end;

    with MapRules.Add do
    begin
      PrecMax        := 10;
      PrecMin        := 5;
      ScaleMax       := 0;
      ScaleMin       := 0;
      SourceDataType := dtFmtBCD;
      TargetDataType := dtInt32;
    end;

    with MapRules.Add do
    begin
      PrecMax        := 18;
      PrecMin        := 11;
      ScaleMax       := 0;
      ScaleMin       := 0;
      SourceDataType := dtFmtBCD;
      TargetDataType := dtInt64;
    end;

    with MapRules.Add do
    begin
      SourceDataType := dtFmtBCD;
      TargetDataType := dtDouble;
    end;

    with MapRules.Add do
    begin
      SourceDataType := dtDateTimeStamp;
      TargetDataType := dtDateTime;
    end;
  end;

此映射是否正确?如果为假,我该怎么做?

当FDQuery具有参数并且参数在执行查询时没有值时,发生异常:

  

[FireDAC] [Phys] [FB] -338。参数[XXX]的类型从[ftVariant]更改为[ftInteger]。查询必须重新准备。可能的原因:分配给TFDParam.AsXXX属性会隐式更改参数数据类型。提示:使用TFDParam.Value或适当的TFDParam.AsXXX属性

如何解决此问题?谢谢你。

1 个答案:

答案 0 :(得分:0)

我通过以下映射解决了我的问题:

with ADB.FormatOptions do
begin
  OwnMapRules := True;

  with MapRules.Add do
  begin
    SourceDataType := dtDateTimeStamp;
    TargetDataType := dtDateTime;
  end;

  with MapRules.Add do
  begin
    SourceDataType := dtDateTime;
    TargetDataType := dtDateTimeStamp;
  end;
end;

然后,我构建我的应用程序并对其进行测试。结果对我来说还可以。