Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   EXPORTAR/IMPORTAR en archivo de TEXTO TXT (https://www.clubdelphi.com/foros/showthread.php?t=66133)

Rogersito Plus 03-02-2010 18:05:33

EXPORTAR/IMPORTAR en archivo de TEXTO TXT
 
Gracias anticipadamente amigos foristas por responder...

Lo que quiero hacer es EXPORTAR/IMPORTAR mis datos de tablas en archivos de TEXTO TXT; desde luego que los datos a EXPORTAR/IMPORTAR estan datos con SELECT

Por cierto trabajo con DELPHI 2007 + IBX y FIREBIRD

coso 03-02-2010 19:54:05

Hola,
echale un vistazo a debajo de este mensaje y veras temas con la misma cuestion resuelta. Un saludo.

guillotmarc 04-02-2010 12:19:43

¿ Te sirve esta utilidad ?

http://fbexport.sourceforge.net/

Son utilidades de linea de comandos, por lo que las puedes ejecutar desde tu propia aplicación Delphi (función ShellExecute), con los parámetros correspondientes.

Saludos.

Rogersito Plus 09-02-2010 02:13:22

LEER - archivo separado por comas
 
Gracias por responder amigos, despues de haber leido un poco,,, encontré un código, lo he implementado asi:
Código Delphi [-]
procedure TForm1.ExportClick(Sender: TObject);
var F : TextFile;
begin
  Qprov.Open;
  Qprov.First;
  AssignFile(F,'D:\EXPORT\PROVEE.TXT');
  Rewrite(F);
  while not Qprov.Eof do
    begin
      WriteLn(F, Qprov.FieldByName('ID_PROVEEDOR').AsString + ',' +
              Qprov.FieldByName('RUC').AsString + ',' +
              Qprov.FieldByName('RAZON').AsString + ',' +
              Qprov.FieldByName('DIRECCION').AsString);
      Qprov.Next;
    end;
  CloseFile(F);
  Qprov.Close;
end;

Bueno, eso me sirve muy bien pa' EXPORTAR
ahora para LEER el archivo(SEPARADO POR COMAS) como hago ?

guillotmarc 09-02-2010 11:58:44

Hola.

¿ Con la utilidad que te sugerí anteriormente ?, ¿ la has mirado ?.

Saludos.

Casimiro Notevi 09-02-2010 17:17:09

Estoy a favor de usar una utilidad o componente como el sugerido por guillotmarc, te lo dan hecho, te facilita el trabajo y te evita errores y dolores de cabeza, por ejemplo, en el código que has puesto, si la dirección tiene una coma... pierdes datos!!!
Código:

WriteLn(F, Qprov.FieldByName('ID_PROVEEDOR').AsString + ',' +
Qprov.FieldByName('RUC').AsString + ',' +
Qprov.FieldByName('RAZON').AsString + ','+
Qprov.FieldByName('DIRECCION').AsString);

Imagina que tienes un registro:
Cita:

ID_PROVEEDOR: 55
RUC: 12345678S
RAZON: HOLAQUETAL
DIRECCION: C/ LAS AMAPOLAS VERDES, 25 - PORTAL 2, IZQUIERDA
Te quedarías con "C/ LAS AMAPOLAS VERDES" y el resto ¿?
Tal vez sea mejor separar por tabuladores, también puedes meter todos los datos entre comillas: "C/ LAS AMAPOLAS VERDES, 25 - PORTAL 2, IZQUIERDA", y buscar comillas en lugar de comas, aunque fallaría si alguien pone: "LLAVE INGLESA DE 2" PULGADAS" ¡¡¡otro error!!!, te quedarías sin " PULGADAS":)

lbuelvas 09-02-2010 17:55:51

Utiliza esta rutina que elabore hace años para exportar un dataset a un archivo texto.

Código Delphi [-]
//Dado un Dataset exporta el resultado de la consulta a un archivo plano,
//normalmente separado por comas.  El formato de las fechas depende de la
//definicion del parametro global ShortDateFormat que se encuentra en el
//evento DataModuleCreate de FrmDataModulo
function _exportar_datos (var Consulta: TIBDataSet; const nombre_archivo: string; const separador: string; encabezado:boolean) : boolean;
var
  DelimOutput : TIBOutputDelimitedFile;
  F:  TextFile;  //para manejar el archivo y convertir mayusculas a minusculas
  Archivo: File;
  cadena: string;
  Buffer: array[0..1023] of Char;
  funciono: boolean;
begin
  funciono := true;

  if (Consulta.IsEmpty) or (nombre_archivo = '') then
    funciono := false
  else begin
    try
      DelimOutput := TIBOutputDelimitedFile.Create;
      DelimOutput.OutputTitles := encabezado; //true si necesita el archivo plano encabezado
      // Estos son delimitadores de Columna y de fila
      DelimOutput.ColDelimiter := separador;
      // DelimOutput.RowDelimiter := chr(13) + chr(10);
      DelimOutput.Filename := nombre_archivo;
      Screen.Cursor := crHourglass;
      Consulta.DisableControls;
      try
        Consulta.BatchOutput(DelimOutput);
      except
        funciono := false;
      end;
      Consulta.EnableControls;
      Screen.Cursor := crDefault;
    finally
      DelimOutput.Free;
    end;  //try

    //Excel genera un error 'File SYLK error' cuando un archivo empieza por 'ID' mayusculas
    //para solucionarlo, reescribir la linea de encabezado en minusculas
    //ejecutar esta opcion solamente si se indica que se genere encabezado para el archivo
    if encabezado then
      try
        AssignFile(F, nombre_archivo);
        Reset(F);
        Readln(F,cadena);
        CloseFile(F);
        cadena := LowerCase(cadena);
        StrPcopy(buffer,cadena); //permite copiar de un string a un arreglo char (buffer)
        //
        AssignFile(Archivo, nombre_archivo);
        Reset(Archivo,1);
        Seek(Archivo,0);
        BlockWrite(Archivo, buffer,  length(cadena));
        CloseFile(Archivo);
        //Fin arreglo para excel
      except
        funciono := false;
      end;
  end; //del else
  //si no hubo error logro generarse exitosamente la creacion del archivo
  _exportar_datos := funciono;
end;

Forma de uso:

Código Delphi [-]
procedure TFrmExplorador_Tablas.ExportarDatos1Click(Sender: TObject);
begin
 SaveDialog1.Filename :=  'Resultado.txt';
 if SaveDialog1.Execute then begin
      Refresh;
      try
        _exportar_datos(DSConsulta,SaveDialog1.FileName,';',true);
      except
        MessageDlg('No fue posible Exportar los datos', mtWarning, [mbOK], 0);
      end;
   end;
end;

Espero que sea de utilidad.

dalsim 12-04-2010 03:37:57

HOla hay que poner algo en uses
 
trato de hacer funcionar tu rutina pero me marca error no

DelimOutput : TIBOutputDelimitedFile
podrias decirme si hay que poner mas componentes en el form o en las uses del progecto y si hay manera de pasarlo directamente a excell con las rutinas que dice el compañero mas arriba las que son comandos FBExport como lo utilizo podrias poner un ejemplo estoy tratando de utilizar un cxgrid de las devExpress gracias

lbuelvas 12-04-2010 06:20:50

Debes en la clausula uses adicionar IBSQL, en esta biblioteca esta definida la clase TIBOutputDelimitedFile.

Prueba y si tienes dificultad nos comentas.

dalsim 12-04-2010 16:03:56

siguen te error
 
indeclarado identificador
SaveDialog1.Filename := 'Resultado.txt';

lbuelvas 12-04-2010 20:38:53

La linea SaveDialog1.Filename := 'Resultado.txt'; asigna por defecto el nombre Resultado.txt a la salida despues de escoger un archivo por medio del objeto SaveDialog1.

Debes colocar en tu formulario un objeto de clase TSaveDialog con nombre TSaveDialog1

Si lo que quieres es exportar a diferentes formatos puedes usar los maxconponents u otra familia de componentes. Lamentablemente la pagina de los maxcomponents el autor la retiró y no tiene soporte para las versiones Delpi 2010 y posteriores.

Puedes revisar los componentes DevExpress, tal vez ellos tenga componentes para lo que necesites, echate una pasada por www.board4all.com, te registras, y revisa el foro Delphi , puedes ver componentes gratis y otros con crack para que hagas tus pruebas.

Cordialmente,

Luis Fernando Buelvas Tovar

dalsim 12-04-2010 20:42:40

Hola
 
hola te agradesco hare ese movimento los molestare con alguna duda gracias lbuelvas estare en contacto las debv si tienen pero no encuentro ejemplos pero que utilicen las ib o las Firevbird

lbuelvas 12-04-2010 20:54:11

Pero tu puedes conectar desde DevExpress con un objeto de la clase TDataSource (pestaña Data Access) que son genericos y a su vez el TDataSource lo conectas a tu objeto contenedor de datos ya sea DBExpress, IBX, etc

dalsim 12-04-2010 23:23:08

Hoal sigo con el problema de las variables
 
_exportar_datos(dsConsulta,SaveDialog1.FileName,';',true);

dsConsulta variable no identificada

dalsim 13-04-2010 16:28:20

Hola bien a corrido la rutina
 
pero no me arroja nada ni me graba ningun archivo he cambiado el Clientedataset por otros componetes en la grilla si me pararecen entiempo de diseño puedo verlos pero a mandar exportar solo me pide el nombre y hace coo que graba pero no manda nada

lbuelvas 14-04-2010 08:39:11

Cambia la ruta del archivo, o revisa en que carpeta está posiblemente grabando el archivo. Puedes colocarle un nombre poco comun y buscas con F3 en el explorador de windows.

Jasan_Records 01-02-2015 23:31:13

Problemas con las Variables
 
Cita:

Empezado por dalsim (Mensaje 360203)
_exportar_datos(dsConsulta,SaveDialog1.FileName,';',true);

dsConsulta variable no identificada

Hola, amigo lbuelvas, con respecto al codigo que compartiste aqui, tengo problema con la variable DSConsulta, me podrias explicar por favor, como solucionarlo??? Gracias, Soy nuevo en esto

Casimiro Notevi 02-02-2015 00:35:11

Bienvenido a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo, gracias por tu colaboración :)

ecfisa 02-02-2015 12:03:59

Cita:

Empezado por Jasan_Records (Mensaje 488362)
Cita:

_exportar_datos(dsConsulta,SaveDialog1.FileName,';',true);

dsConsulta variable no identificada

Hola Jasan_Records.

Si miras con atención la declaración de la función en el mensaje de ibuelvas, podrás ver que el primer parámetro es de tipo TIBDataSet y su paso es por referencia:
Código Delphi [-]
function _exportar_datos (var Consulta: TIBDataSet; const nombre_archivo: string; 
  const separador: string; encabezado:boolean) : boolean;
Por lo tanto deberás enviar como argumento el nombre de un componente TIBDataSet, que ibuelvas llamó DSConsulta a fines del ejemplo.

Saludos :)


La franja horaria es GMT +2. Ahora son las 14:52:56.

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