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;
谢谢你让我在正确的方向做软件。
我正在尝试使用 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;
谢谢你让我在正确的方向做软件。