我将具有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] [物理学] [FB] -338。 Param [XXX]类型从[ftVariant]更改为[ftInteger]。必须重新查询查询。可能的原因:对TFDParam.AsXXX属性的赋值隐式更改了参数数据类型。提示:使用TFDParam.Value或适当的TFDParam.AsXXX属性
我该如何解决这个问题?谢谢你的一切。
我使用下面的映射解决了我的问题:
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;
之后,我构建我的应用程序并测试它。结果对我来说没问题。