Delphi IBX в Firedac Миграция для Firebird - PullRequest
0 голосов
/ 26 февраля 2019

Я перенес приложение IBX с 500+ формами в Firedac.Я сопоставил типы данных с помощью Delphi Help.Вот мое отображение данных:

  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;

Это отображение верно?Если это false, как мне это сделать?

Когда FDQuery имеет параметры и параметр не имеет значения при выполнении запроса, возникла исключительная ситуация:

[FireDAC] [Phys] [FB] -338.Тип параметра [XXX] изменен с [ftVariant] на [ftInteger].Запрос должен быть переоценен.Возможная причина: присвоение свойству TFDParam.AsXXX неявно изменило тип данных параметра.Подсказка: используйте TFDParam.Value или соответствующее свойство TFDParam.AsXXX

Как мне решить эту проблему?Спасибо за все.

1 Ответ

0 голосов
/ 27 февраля 2019

Я решил свою проблему, используя приведенное ниже отображение:

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;

После этого я создаю свое приложение и тестирую его.Результат мне подходит.

...