@AplikmUj, правильно. Либо вы готовите запрос для определения типов данных параметров (где применяется сопоставление), либо присваиваете значения, с помощью которых вы явно настраиваете типы данных параметров самостоятельно. Я рекомендовал последнее. Конечные преобразования значений (при выполнении команды) не работают с правилами отображения (как и следовало ожидать). Они используются для отображения типов данных параметров, а не для преобразования значений. А параметр типа данных вы можете определить только при подготовке команды.

я естьTFDConnection к базе данных FireBird, для которой я применяюОтображение типа данных для обратной совместимости с предыдущей технологией доступа к данным (SQLDirect):

with FormatOptions.MapRules.Add do     // TIMESTAMP will be ftDateTime instead of ftTimeStamp
begin
   SourceDataType := dtDateTimeStamp;
   TargetDataType := dtDateTime;
end;
with FormatOptions.MapRules.Add do     // FLOAT will be ftFloat instead of ftSingle
begin
   SourceDataType := dtSingle;
   TargetDataType := dtDouble;
end;
FormatOptions.OwnMapRules := true;

Во время выполнения я создаю TFDQuery, который я связываю с этим TFDConnection.
Я вижу, что он наследует правила отображения:FormatOptions.MapRules.count=2

Я назначаю INSERT-запрос к его SQL.Text:

insert into TT_ACT (TT_ACT_ID,TT_PARENT_ID,TT_FROMDATE,TT_TODATE,TT_NAME,TT_NR,TT_CODE,TT_GROUP...)
values (:TT_ACT_ID,:TT_PARENT_ID,:TT_FROMDATE,:TT_TODATE,:TT_NAME,:TT_NR,:TT_CODE,:TT_GROUP,...)

Это дает мнеparams.count=42 с параметрами с типом данных ftUnknown (конечно).

Я тогда называю Приготовиться к запросу.

Если я сейчас проверю известный параметр datetime, я увижуparams[x].datatype = ftTimeStampнеftDateTime, Поэтому, когда запрос возвращается в базу данных для просмотра полей, онпохоже не слушает правила отображения данных при настройке параметров.

Это ошибка?

На более позднем этапе в моем коде у меня возникли проблемы, что привело к известной ошибке 338:

[FireDac][Phys][IB]-338 Param [TT_FROMDATE] type changed from [ftSQLTimeStamp] to [ftDateTime]. Query must be reprepared. 

Мне удалось обойти эту ошибку, так что это не является частью вопроса. Но я ожидаю, что Params также будут следовать правилам отображения типов данных, что сделало бы все это проще.

Ответы на вопрос(1)

Ваш ответ на вопрос