Well, that's pretty much what Aurelius does when using ADO, in unit Aurelius.Drivers.dbGo
.
You can try to check it yourself, putting a breakpoint in line 148:
Parameter.DataType := P.ParamType;
if P.ParamType = ftDateTime then
Parameter.ParameterObject.Type_ := adDBTimeStamp;
Parameter.Value := P.ParamValue;
Parameter.Direction := pdInput;
if (Parameter.DataType in [ftString, ftFixedChar, ftWideString, ftFixedWideChar]) and (Parameter.Size <= 0) then
Parameter.Size := 1;
And check the values there (P.ParamType and P.ParamValue). Other than this, we should check and debug to better see what's going on. If after debugging you can't find out what's going on (if maybe it's some configuration in ADO, or database), please send us a minimal project and steps to reproduce the issue, so we can check it at our side. Thank you.