Si y en efecto creo que es buena idea "tomarse la molestia" de especificar en cada parametro el tipo; mas alla de que el codigo funcione bien sin hacerlo, ayuda a transmitir que intencion se tenia al momento de desarrollar y documentar el codigo
Código Delphi
[-]
procedure TParameter.SetValue(const Value: Variant);
const
SizedDataTypes = [ftUnknown, ftString, ftFixedChar, ftWideString, ftFixedWideChar,
ftMemo, ftWideMemo, ftBlob, ftBytes, ftVarBytes];
var
NewSize: Integer;
NewValue: OleVariant;
begin
if VarIsClear(Value) or VarIsNull(Value) then
NewValue := Null
else
begin
if DataType = ftUnknown then
SetDataType(VarTypeToDataType(VarType(Value)));
if (DataType = ftBlob) and (VarType(Value) = varString) then
NewValue := StringToVarArray(Value) else
NewValue := Value;
end;
if DataType in SizedDataTypes then
begin
NewSize := VarDataSize(NewValue);
if (Size = 0) or (NewSize > Size) then
Size := NewSize;
end;
ParameterObject.Value := NewValue;
end;
En SetValue se encarga de, si esta en ftUnknown que es el valor por defecto como mencionas, intentar asignarle el correcto de acuerdo al tipo de dato