The reason of the error is 'dbx' does not know the data type of the parameter. Since it is never assigned a value, it's data type is ftUnknown
in execute time, hence the error. Same for 'ParamType', but 'ptInput' is assumed by default, so no problem with that.
Query.ParamByName('ThisValue').DataType := ftString;
You definitely don't need to Clear
the parameter because it is already NULL
. How do we know it? IsNull
is returning true...
From TParam.Clear Method:
Use Clear to assign a NULL value to a parameter.
From TParam.IsNull Property:
Indicates whether the value assigned to the parameter is NULL (blank).
You definitely don't need to Bound
the parameter as it is completely irrelevant. When 'Bound' is false, the dataset will attempt to provide a default value from its datasource for the parameter. But your dataset is not even linked to a data source. From the documentation:
[...] Datasets that represent queries and stored procedures use the value of Bound to determine whether to assign a default value for the parameter. If Bound is false, datasets that represent queries attempt to assign a value from the dataset indicated by their DataSource property. [...]
If the documentation is not enough, refer to the code in TCustomSQLDataSet.SetParamsFromCursor
in 'sqlexpr.pas'. It is the only place where the 'Bound' of a parameter is referred in dbx framework.