FireDAC FDBatchMoveTextReader 在运行时更改归档数据类型

FireDAC FDBatchMoveTextReader change filed data type at runtime

我正在尝试使用 FDBatchMoveTextReader 解析不同的文本文件。我仅使用 GuessFormat 程序来确定字段数。因此,我将 AnalyzeSample 设置为 10 行。我试图在 GuessFormat 运行s 之后手动将每个字段的数据类型设置为字符串。当我 运行 执行时,我收到错误提示

[FireDAC][Comp][DM]-607. Bad text value [17,5] format for mapping item [->B]. '17,5' is not a valid integer value.

以上 B 是我在 SQL Server Express 中的列名,它也是 nvarchar(60).

如何将数据类型实际设置为字符串?

我的代码如下

FDBatchMoveTextReader1.FileName := Edit1.Text;
FDBatchMove1.GuessFormat([taDelimSep, taFields]);

case ComboBox1.ItemIndex of
  0: FDBatchMoveTextReader1.Encoding := ecANSI;
  1: FDBatchMoveTextReader1.Encoding := ecDefault;
  2: FDBatchMoveTextReader1.Encoding := ecUTF16;
  3: FDBatchMoveTextReader1.Encoding := ecUTF8;
end;

for i := 0 to FDBatchMoveTextReader1.DataDef.Fields.Count-1 do begin
  // Set all field data type as string
  FDBatchMoveTextReader1.DataDef.Fields[i].DataType := atString;
end;

FDBatchMove1.Execute;

下面解决了问题:

FDBatchMoveTextReader1.FileName := Edit1.Text;
FDBatchMove1.GuessFormat([taDelimSep, taFields]);

case ComboBox1.ItemIndex of
  0: FDBatchMoveTextReader1.Encoding := ecANSI;
  1: FDBatchMoveTextReader1.Encoding := ecDefault;
  2: FDBatchMoveTextReader1.Encoding := ecUTF16;
  3: FDBatchMoveTextReader1.Encoding := ecUTF8;
end;

for i := 0 to FDBatchMoveTextReader1.DataDef.Fields.Count-1 do begin
  // Set all field data type as string
  FDBatchMoveTextReader1.DataDef.Fields[i].DataType := atString;
end;

FDBatchMove1.Analyze := [];

FDBatchMove1.Execute;

谢谢你让我在正确的方向做软件。