@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 также будут следовать правилам отображения типов данных, что сделало бы все это проще.