Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

 
 
Herramientas Buscar en Tema Desplegado
  #9  
Antiguo 09-10-2018
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 322
Poder: 22
amadis Va por buen camino
Lightbulb Usar TBatchMove en lugar de TDatamove (Importar CSV Xe8, Tokio, Berlin, Community)

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;    //  destruimos componentes para eliminar datos default y cargados anteriormente
          FDBatchMove1.Free;    //   idem anterior
          fdmemtable1 := TFDMemTable.create(Form1); // creamos
          FDBatchMove1:= TFDBatchMove.Create(Form1);
          dataSource1.DataSet := fdmemtable1;   // vinculamos la tabla al datasource
      //Create text reader and set FDBatchMode as owner. Then
  // FDBatchMove will automatically manage the reader instance.
  with TFDBatchMoveTextReader.Create(FDBatchMove1)
  do begin
    // Set text data file name
    FileName := opendialog1.FileName;
    // Setup file format
    DataDef.Separator := edsepara.Text[1]; // ** indicamos separador de campos en este caso ';'
    DataDef.Delimiter := #0;  //** opcional, para campos sin QUOTED VALUES "valor" que es la opción default del componente
    Datadef.RecordFormat := rfCustom; //**
     for i := 0 to Datadef.Fields.Count-1         //  ** para evitar problemas con campos FLOAT paso todos los campos a String.
            do  Datadef.Fields[i].DataType := atString;    // ** De no hacerlo he tenido errores [FireDAC][Comp][DM]-607. Bad text value [17,5] format for mapping item [->B]. '10,24' is not a valid integer value.

    for i := 0 to Datadef.Fields.Count-1         //  debemos antes agregar los campos el FDMentable sino obtenemos un error de que no puede crear el dataset.
            do  fdmemtable1.FieldDefs.Add(Datadef.Fields[i].FieldName,ftString, 20, False);
    DataDef.WithFieldNames := True; // setear si tiene los nombres de campo en primera linea
  end;

  // Create dataset writer and set FDBatchMode as owner. Then
  // FDBatchMove will automatically manage the writer instance.
  with TFDBatchMoveDataSetWriter.Create(FDBatchMove1) do begin
    // Set destination dataset
    DataSet := FDMemtable1;
    // Do not set Optimise to True, if dataset is attached to UI
    Optimise := False;
  end;
  // Analyze source text file structure
  FDBatchMove1.GuessFormat;
  FDBatchMove1.Analyze := ([ taDelimSep,taHeader,taFields]); // este comando crea la estructura de datos según adivina leyendo los primeros registros
  FDBatchMove1.AnalyzeSample := 50;  // El default es 10, con esto profundizamos el analisis para adivinar estructura de tabla y campos

          FDBatchMove1.Execute;   // y Eureka!   Tenemos los datos en la tabla y visibles en el Dbgrid
    end;

end;
Archivos Adjuntos
Tipo de Archivo: rar FDCSV.rar (53,9 KB, 26 visitas)

Última edición por amadis fecha: 09-10-2018 a las 14:34:01. Razón: orreccion de título
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
FireDac y archivos sch oscjae Conexión con bases de datos 2 23-05-2016 20:27:03
¿cómo conectar base de datos access con un ado en delphi pasos? Master23 Conexión con bases de datos 16 24-10-2010 03:39:22
pasos para abrir una tabla db jhcaboverde Conexión con bases de datos 2 29-09-2010 20:25:59
Como desvirgar al Windows vista en pocos minutos ArdiIIa Seguridad 13 04-06-2008 21:26:03
Archivos .D . D01 . DIR .I .T ¿como los puedo abrir? Delphitest Tablas planas 4 28-01-2008 22:27:55


La franja horaria es GMT +2. Ahora son las 04:03:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi