Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Pasar datos de un DBGrid a Txt Tabulado (https://www.clubdelphi.com/foros/showthread.php?t=83156)

daragor 17-05-2013 00:32:04

Pasar datos de un DBGrid a Txt Tabulado
 
Hola compañeros como puedo pasar los datos de un dbgrid a un archivo txt tabulado por columnas en lazarus?
he visto este hilo del maestro ecfisa AQUI

Pero necesito la "traduccion" de la sintaxis a lazarus.. por ej.

DBGrid1.FieldCount no existe en lazarus, pero se reemplazaria con DBGrid1.Columns.Count

Luego...

Muchas gracias!

ecfisa 17-05-2013 00:49:24

Hola daragor.

Eso de maestro ... :o Digamos que apenas si llego a aprendiz avanzado...

El problema que veo con usar DBGrid1.Columns.Count, es que se podrían crear menos columnas que las que existen en la tabla...

Modifiqué un poco el código que mencionas, lo probé en Lazarus y creo que funciona como se espera.
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  BM: TBookMarkStr;
  i: Integer;
  s: string;
  ArchTexto: TextFile;
begin
  // Asociar un nombre de archivo a una variable de tipo File
  AssignFile(ArchTexto,'C:\A_LA_DERECHA.TXT');
  // Crear un archivo, abrirlo
  Rewrite(ArchTexto);
  // Guardar posición actual del DataSet
  BM:= DBGrid1.DataSource.DataSet.Bookmark;
  // Desactivar el mostrado en los controles data-aware asociados al DataSet
  DBGrid1.DataSource.DataSet.DisableControls;
  // Posicionarnos en el primer registro del DataSet
  DBGrid1.DataSource.DataSet.First;
  // Mientras el DataSet tenga registros...
  while not DBGrid1.DataSource.DataSet.Eof do
  begin
    s:= ''; // Inicializar cadena a vacío
    for i:= 0 to DBGrid1.DataSource.DataSet.FieldCount - 1 do  // desde el 1er al último campo
    begin
      // Concatenar en 's' cada campo con tantos espacios a la izquierda
      // como le falten al largo actual del campo para llegar al largo declarado
      s:= s + StringOfChar(' ', DBGrid1.DataSource.DataSet.Fields[i].DisplayWidth -
                           Length(DBGrid1.DataSource.DataSet.Fields[i].AsString)) +
                           DBGrid1.DataSource.DataSet.Fields[i].AsString;
    end;
    // Guardar el campo ajustado en el archivo de texto
    Writeln(ArchTexto, s);
    // Desplazarnos al próximo registro del DataSet
    DBGrid1.DataSource.DataSet.Next;
  end;
  // Cerrar archivo.
  CloseFile(ArchTexto);
  // Volver a posición previamente guardada del DataSet
  DBGrid1.DataSource.DataSet.Bookmark:= BM;
  // Activar el mostrado en los controles data-aware asociados al DataSet
  DBGrid1.DataSource.DataSet.EnableControls;
end;

Saludos. :)

daragor 17-05-2013 18:05:38

Compañero ecfisa.. tengo este error al compilar

xxx Error: Identifier not found "TBookmarkStr"

Evidentemente, no es usado en lazarus como tal.. creo q puede reemplazarse por string
Lo que si, el archivo txt se logra, pero el diseño es un lio de palabras salteadas por toda la hoja.. no creo q este funcionando lo de la tabulacion... :confused:

ecfisa 17-05-2013 22:39:27

Hola daragor.

No puedo explicar lo que te sucede, claro que eso pasa por no ser experto en Lazarus ;).

¿ Será la versión o alguna actualización que hayas echo? (Yo lo tengo tal cuál lo descargué)

Mira:


Con este resultado:


Saludos. :)

daragor 20-05-2013 17:07:01

Quizas no se, se debe a la fuenta usada en el bloc de notas..

rretamar 23-05-2013 01:12:49

Existe el componente CSVExporter (viene preinstalado en Lazarus Codetyphon) y es muy simple de usar:

Código Delphi [-]
procedure TFExportar.BitBtn1Click(Sender: TObject); // Iniciar exportación
begin
  With CSVExporter1 Do
    Begin
      DataSet := Mi_dataset;
      FileName := 'archivo.txt';
      // Opciones avanzadas
      FromCurrent := CheckBox1.Checked;                    // Desde la posición actual
      FormatSettings.FieldDelimiter := LabeledEdit1.Text;  // Delimitador de campos
      FormatSettings.StringQuoteChar := LabeledEdit2.Text; // Cadenas
      //
      Execute;
      ShowMessage('Finalizó la exportación a un archivo de texto.');
    end;
end;


La franja horaria es GMT +2. Ahora son las 16:58:08.

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