Ver Mensaje Individual
  #8  
Antiguo 23-08-2016
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Reputación: 16
orodriguezca Va por buen camino
El problema que veo con la solución propuesta es que en el archivo binario a entregar al cliente no solo se debe incluir la información del Grid sino otros campos del formulario; no va a ser fácil desarrollar un "lector" que entienda toda esa información. Es por eso que propuse considerar un archivo de texto XML y no un archivo binario en el que se estaría guardando una estructura fija de tipo Record.

Aunque pensándolo un poco más quizas podría definirse una estructura de registro con parte variante, a la antigua, y seguir usando un archivo binario, por ejemplo:

Código Delphi [-]
type
  Tmis_datos = record
     case EsGrid: boolean of 
       false: begin
                   //Definimos los  datos del formulario a guardar
                   Dato1: string[10];  //Solo son ejemplos
                   Dato2: integer;
                   Dato3: double; 
                end;
       true: begin
                   // definimos las columas del grid a guardar
                   Col1: string[20];
                   Col2: string[3];
                   Col3: Currency;
                   Col4: strin[5];
                end;
     end;  
  end;

var
   mis_datos: TMis_Datos;

En el código:

Código Delphi [-]
begin
   .
   .
   .
  //Guardamos los datos del formulario
  mis_datos.EsGrid := False;
  Mis_datos.Dato1 := 'Prueba';
  Mis_datos.Dato2 := 1;
  Mis_datos.Dato3 := 7.2;
  Write(ArchivoBinario, Mis_datos);

  //Ahora guardamos el grid
  Grid.DataSource.DataSet.first;
  While not Grid.DataSource.DataSet.Eof do
  begin
     Mis_Datos.EsGrid := True;
     Mis_Datos.Col1 := Grid.DataSource.DataSet.Fields[0].Value;
     Mis_Datos.Col2 := Grid.DataSource.DataSet.Fields[1].Value;
     Mis_Datos.Col3 := Grid.DataSource.DataSet.Fields[2].Value;
     Mis_Datos.Col4 := Grid.DataSource.DataSet.Fields[3].Value;
 
     //Guardamos este registro del grid
     Write(Archivobinario, Mis_Datos);

     Grid.DataSource.DataSet.Next;
  end;

Bueno, la idea es esa. No tengo IDE a la mano para probarlo.
Responder Con Cita