Grabar una database a un fichero de texto con delimitadores  

Enviado Por: Radikal (Q3 Team)
Web : http://www.q3.nu
Email: radikal@q3.nu
Fecha: 20/01/00

Truco accedido 81 veces

 


A petición de un usuario, que me pedia algo así para tablas Paradox:
Ya puestos, gracias a un DataSource... sirve para cualquier dataset al que esté asociado.

La función genera un fichero de texto, en el que graba todos los registros de la base de datos asociada al DataSource, generando una linea por cada registro, y separando los campos con un delimitador dado.


NOTA: La función se salta los campos binarios (memo, imágenes, blobs, etc).


 procedure TForm1.Button1Click(Sender: TObject);

   procedure GrabaDelimitado( Datos:TDatasource;
                              Fichero: string;
                              Delimitador:char);
   var
      f      : textfile;
      n      : integer;
      Linea  : string;
   begin
     AssignFile(f,Fichero);
     Rewrite(f);

     With Datos.DataSet do
     begin
       DisableControls;
       {Vamos al primer registro}
       {First record}
       First;
       {Vamos registro a registro, hasta el final}
       {From first to last, one by one}
       While Not Eof do
       begin
         Linea:='';
         {Recorremos todos los campos del registro}
         {all field of the record}
         for n:=0 to FieldCount-1 do
         begin
           If (Fields[n] is TBlobField) or
              (Fields[n] is TGraphicField) or
              (Fields[n] is TMemoField) or
              (Fields[n].IsNull)
           then
             Linea:=Linea+Delimitador
           else
             Linea:=Linea+Delimitador+Fields[n].AsString;
         end; {Del For}
         Linea:=Copy(Linea,2,Length(Linea)-1);
         Memo1.Lines.Add(Linea);
         writeln(f,Linea);
         Next;
       end; {Del While}
       EnableControls;
     end; {Del With}
     CloseFile(f);
   end;

 begin
   GrabaDelimitado(DataSource1,'c:\kk\Texto.txt',',');
 end;




Cosas a tener en cuenta: si en un campo de texto, tienes algun caracter igual que el delimitador que has elegido...tendrás problemas.
Por ejemplo, si como delimitador usas una coma ',' y en algun campo de texto tienes algún registro que tenga alguna coma en el texto... pues el resultado estará masl delimitado.
Aunque supongo que no te será problema usar otro delimitador... o usar un delimitador de varios caracteres, cambiando el parámetro char de la función por string.