Delphi -使用FireDac将CSV加载到数据集中(字段大小问题...)

8fq7wneg  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(211)

我正在使用TFDBatchMove、TFDBatchMoveTextReader、TFDBatchMoveDataSetWriter和TFDMemTable将数据从csv文件加载到memTable数据集中。它工作得很好,除了我有一个字段有很多文本(400-500个字符),并且由于某种原因,memTable组件将字段大小限制在233个字符...字段都是由批处理组件加载的,我找不到一个选项来扩展字段大小限制,memTable也是如此。我该怎么办?

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param,
  FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf,
  FMX.Edit, FMX.Controls.Presentation, FMX.StdCtrls, Data.DB,
  FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.Comp.BatchMove.DataSet,
  FireDAC.Comp.BatchMove, FireDAC.Comp.BatchMove.Text, System.Rtti,
  FMX.Grid.Style, FMX.ScrollBox, FMX.Grid, FireDAC.UI.Intf, FireDAC.FMXUI.Wait,
  FireDAC.Comp.UI, Data.Bind.EngExt, Fmx.Bind.DBEngExt, Fmx.Bind.Grid,
  System.Bindings.Outputs, Fmx.Bind.Editors, Data.Bind.Components,
  Data.Bind.Grid, Data.Bind.DBScope;

type
  TForm1 = class(TForm)
    BatchMove: TFDBatchMove;
    csvReader: TFDBatchMoveTextReader;
    datasetWriter: TFDBatchMoveDataSetWriter;
    memTable: TFDMemTable;
    btnConvert: TButton;
    FilePath: TEdit;
    StringGrid1: TStringGrid;
    FDGUIxWaitCursor1: TFDGUIxWaitCursor;
    BindSourceDB1: TBindSourceDB;
    BindingsList1: TBindingsList;
    LinkGridToDataSourceBindSourceDB1: TLinkGridToDataSource;
    procedure btnConvertClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.btnConvertClick(Sender: TObject);
begin
  csvReader.FileName := FilePath.Text;
  BatchMove.Execute;
end;

字符串

ryoqjall

ryoqjall1#

想了个办法。即使我将AnalyzeSample大小设置为包含整个数据集,由于某种原因,TFDBatchMove无法计算出适合数据集中每个记录的正确字段大小,并且将其设置得太低。我无法让这个工作。但是,通过手动创建TFDMemTable中的所有FieldDefs(在运行时),我可以将字段大小定义为我想要的任何大小。然后,通过取消选中“poCreateDest”选项,TFDBatchMove将不再尝试根据自己的分析格式化字段,而是将数据写入我已经创建的字段。因为场参数是固定的,所以这种方式的动态性较低,但对于我需要它做的事情来说,它工作得很好。

相关问题