PDA

Ver la Versión Completa : Pasar datos de un DBGrid a Txt Tabulado


daragor
17-05-2013, 00:32:04
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 (http://www.clubdelphi.com/foros/showpost.php?p=402297&postcount=15)

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.

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:
http://imageshack.us/a/img17/6523/lazaruse.jpg

Con este resultado:
http://imageshack.us/a/img197/4913/lazarus2.jpg

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:

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;