PDA

Ver la Versión Completa : pasar un registro completo a un archivo txt


pmtzg
16-08-2011, 07:14:42
una vez consultando a los grandes gurus de este sitio

si yo quisiera grabar en un archivo de texto una consulta de registros

como los podria pasar

table2.Fields[i].Value := query2.Fields[i].Value;


y el resultado lo deseo guardar en un archivo de texto

table2.Fields[i].Value


es posible ????


gracias por toda su ayuda !!!

ecfisa
16-08-2011, 08:50:13
Hola pmtzg.

Espero no haber supuesto mal en que buscas copiar todos los registros de la tabla a un archivo de texto y no uno sólo...

Este código lo va a realizar con cualquier descendiente de TDataSet (TIBDataSet, TIBQuery,TIBTable,TADOQuery,...,TTable), lo comenté lo mejor que pude:

procedure PasarATexto(ADataSet: TDataSet; const Destino: string);
var
BM: TBookMarkStr;
TF: TextFile;
i: Integer;
r,s: string;
begin
AssignFile(TF, Destino); // Asociar variable con nombre de arhivo
try
Rewrite(TF); // Crear archivo y abrir
try
BM:= ADataSet.Bookmark; // Salvar posición actual en TDataSet
AdataSet.DisableControls; // Desactivar presentación en controles
ADataSet.First; // Al primer dato
while not ADataSet.Eof do
begin
s:= '';
for i:= 0 to ADataSet.FieldCount -1 do
begin
// Llenar con espacios a la derecha y concatenar en s
s:= s + ADataSet.Fields[i].AsString +
StringOfChar(' ',ADataSet.Fields[i].DisplayWidth -
Length(ADataSet.Fields[i].AsString));
end;
Writeln(TF, s); // Guardar línea de texto
ADataSet.Next; // Siguiente registro
end;
finally
CloseFile(TF);
ADataSet.Bookmark:= BM; // Regresar a posición salvada
AdataSet.EnableControls; // Restaurar presentacion en controles
end;
except
raise Exception.Create(SysErrorMessage(GetLastError));
end;
end;

El argumento Destino deberá ser la suma de Ruta + Nombre_Archivo.
Usé BookmarkStr, DisableControls/EnableControls, por si estás mostrando los datos en algún control data-aware en ese momento. Pero si no es así podés quitar toda referencia a esas líneas.

Ejemplos de uso:

PasarATexto(IBDataSet1, 'C:\Desde_IBDataSet.txt');
PasarATexto(IBQuery1, 'C:\Desde_IBQuery.txt');
...


Un saludo.