Buenas estimados Colegas.
Recién estos días he tenido tiempo de estudiar el tema, y probar con Delphi Community.
Por lo visto el componente TDATAMOVE ha sido discontinuado desde la versión XE7, aunque por cuestiones de compatibilidad lo siguieron incluyendo hasta XE8, por eso no noté errores cuando compilé el ejemplo en XE8.
En su lugar se recomienda usar TBatchMove, He visto que en XE8 y Community se incluye un ejemplo en la carpeta de SAMPLES
C:\Users\Public\Documents\Embarcadero\Studio\19.0\Samples\Object Pascal\Database\FireDAC\Samples\Comp Layer\TFDBatchMove\Main
Tomando como base el ejemplo antes mencionado he adaptado el proyecto de ejemplo .
Por lo que vi el proceso puede reducirse a 5 lineas de codigo, que son simple ejecucion del Batch y asignaciones de reader y writer. Pero da errores con campos float. Por lo que requiere al igual que con el viejo DataMove un poco de personalización.
aquí tienen el codigo adaptado. Igualmente se adjunta el ejemplo
Código Delphi
[-]procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
opendialog1.InitialDir := GetCurrentDir;
if opendialog1.Execute
then
begin
fdmemtable1.free; FDBatchMove1.Free; fdmemtable1 := TFDMemTable.create(Form1); FDBatchMove1:= TFDBatchMove.Create(Form1);
dataSource1.DataSet := fdmemtable1; with TFDBatchMoveTextReader.Create(FDBatchMove1)
do begin
FileName := opendialog1.FileName;
DataDef.Separator := edsepara.Text[1]; DataDef.Delimiter := #0; Datadef.RecordFormat := rfCustom; for i := 0 to Datadef.Fields.Count-1 do Datadef.Fields[i].DataType := atString;
for i := 0 to Datadef.Fields.Count-1 do fdmemtable1.FieldDefs.Add(Datadef.Fields[i].FieldName,ftString, 20, False);
DataDef.WithFieldNames := True; end;
with TFDBatchMoveDataSetWriter.Create(FDBatchMove1) do begin
DataSet := FDMemtable1;
Optimise := False;
end;
FDBatchMove1.GuessFormat;
FDBatchMove1.Analyze := ([ taDelimSep,taHeader,taFields]); FDBatchMove1.AnalyzeSample := 50;
FDBatchMove1.Execute; end;
end;