1 - Создать тестовую таблицу в SQL Server:
CREATE TABLE dbo.TESTCAL
(
TT_CALENDAR_ID INTEGER NOT NULL,
TT_START DATETIME NULL,
TT_FINISH DATETIME NULL,
TT_EMP_ID INTEGER NULL,
TT_CAPTION VARCHAR(50) NULL
)
2 - Поместите TFDQuery
в форму с помощью команды SQL:
INSERT INTO TESTCAL
(TT_CALENDAR_ID
,TT_START
,TT_FINISH
,TT_EMP_ID
)
VALUES
(:ID
, :TTX_DATUM
, :TTX_DATUM2 + 1
, :TTX_EMP_ID
)
3 - Определить 4 параметра ptInput типа ftInteger
, ftdateTime
, ftdateTime
и ftInteger
.
4 - выполнить запрос:
with FDQuery1 do
begin
Params[0].AsInteger := Random(100);
Params[1].AsDateTime := Now;
Params[2].AsDateTime := Now;
Params[3].AsInteger := Random(100)+100;
ExecSQL;
end;
Это похоже на преобразование параметра # 2 в тип datetime2 и выдает ошибку Operand type clash: datetime2 is incompatible with int
. Это здесь не неизвестная ошибка ;-). Я могу исправить это, например,
INSERT INTO TESTCAL
(TT_CALENDAR_ID
,TT_START
,TT_FINISH
,TT_EMP_ID
)
VALUES
(:ID
, :TTX_DATUM
, DATEADD(dd,1,:TTX_DATUM2)
, :TTX_EMP_ID
)
Но: Можно ли предотвратить ошибку, не изменяя саму команду SQL ?
Потому что: Этот вид кода находится в различных (пользовательских) скриптах, работающих на компьютерах многих клиентов. Ошибка начинает возникать после переключения на FireDAC.