我也曾经遇到过这个问题,通过下面的办法解决了:
for i:= 0 to Query.Parameters.Count-1 do
begin
case TVarData(pams).Vtype of
varSmallint : Parameters.Items.DataType := FtSmallint;
varInteger : Parameters.Items.DataType := FtInteger;
varSingle : Parameters.Items.DataType := FtFloat;
varDouble : Parameters.Items.DataType := FtFloat;
varCurrency : Parameters.Items.DataType := FtCurrency;
varDate : Parameters.Items.DataType := FtDateTime;
varOleStr : Parameters.Items.DataType := FtWideString;
varDispatch : Parameters.Items.DataType := FtIDispatch;
varBoolean : Parameters.Items.DataType := FtBoolean;
varVariant : Parameters.Items.DataType := FtVariant;
varUnknown : Parameters.Items.DataType := FtUnknown;
varString : Parameters.Items.DataType := FtMemo;
varArray : Parameters.Items.DataType := FtArray;
end;
if TVarData(pams).Vtype= varOleStr then
begin
TmpStr:= pams;
if TmpStr='' then Tmpstr:=' ';
Query.Parameters.Items.Size := Length(tmpStr);
Query.Parameters.Items.Value := TmpStr;
end;
end;
其中pams是OleVariant类型,原先是没有if TVarData(pams).Vtype= varOleStr 的判断的,但为了解决中文会传递错误加上的。