我将具有500多种表单的IBX应用程序迁移到Firedac。我使用Delphi帮助映射了数据类型。这是我的数据映射:
with ADB.FormatOptions do
begin
OwnMapRules := True;
DefaultParamDataType := ftVariant;
MapRules.Clear;
with MapRules.Add do
begin
PrecMax := 4;
PrecMin := 0;
ScaleMax := 0;
ScaleMin := 0;
SourceDataType := dtFmtBCD;
TargetDataType := dtInt16;
end;
with MapRules.Add do
begin
PrecMax := 10;
PrecMin := 5;
ScaleMax := 0;
ScaleMin := 0;
SourceDataType := dtFmtBCD;
TargetDataType := dtInt32;
end;
with MapRules.Add do
begin
PrecMax := 18;
PrecMin := 11;
ScaleMax := 0;
ScaleMin := 0;
SourceDataType := dtFmtBCD;
TargetDataType := dtInt64;
end;
with MapRules.Add do
begin
SourceDataType := dtFmtBCD;
TargetDataType := dtDouble;
end;
with MapRules.Add do
begin
SourceDataType := dtDateTimeStamp;
TargetDataType := dtDateTime;
end;
end;
此映射是否正确?如果为假,我该怎么做?
当FDQuery具有参数并且参数在执行查询时没有值时,发生异常:
[FireDAC] [Phys] [FB] -338。参数[XXX]的类型从[ftVariant]更改为[ftInteger]。查询必须重新准备。可能的原因:分配给TFDParam.AsXXX属性会隐式更改参数数据类型。提示:使用TFDParam.Value或适当的TFDParam.AsXXX属性
如何解决此问题?谢谢你。
答案 0 :(得分:0)
我通过以下映射解决了我的问题:
with ADB.FormatOptions do
begin
OwnMapRules := True;
with MapRules.Add do
begin
SourceDataType := dtDateTimeStamp;
TargetDataType := dtDateTime;
end;
with MapRules.Add do
begin
SourceDataType := dtDateTime;
TargetDataType := dtDateTimeStamp;
end;
end;
然后,我构建我的应用程序并对其进行测试。结果对我来说还可以。