Delphi IBX到Firebird的Firedac迁移

问题描述 投票:-1回答:1

我将具有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] [物理学] [FB] -338。 Param [XXX]类型从[ftVariant]更改为[ftInteger]。必须重新查询查询。可能的原因:对TFDParam.AsXXX属性的赋值隐式更改了参数数据类型。提示:使用TFDParam.Value或适当的TFDParam.AsXXX属性

我该如何解决这个问题?谢谢你的一切。

delphi firebird firedac
1个回答
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;

之后,我构建我的应用程序并测试它。结果对我来说没问题。

© www.soinside.com 2019 - 2024. All rights reserved.