Ver Mensaje Individual
  #7  
Antiguo 09-02-2010
lbuelvas lbuelvas is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 377
Reputación: 22
lbuelvas Va por buen camino
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.
__________________
Luis Fernando Buelvas T.
Responder Con Cita