Ver Mensaje Individual
  #5  
Antiguo 25-01-2005
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Reputación: 21
salvica Va por buen camino
Dependerá del componente que utilices para crear la tabla, en todo caso solo tienes que hacer un bucle que te lea las columnas de la primera fila (para crear la tabla) y luego otro (esta vez doble) para que recorra las filas y de cada una pase los datos de cada columa a los distintos campos.

El "donde" los pones dependerá del uso de la nueva tabla, si es en la misma aplicación lo suyo será cuando acabes de rellenar el grid, si solo quieres tenerla como resultado lo puedes poner antes de cerrar el form/aplicación (en el "OnClose" del form)

Con un componente TDbf (búscalo en sourceforge.net)
Código Delphi [-]
  procedure CrearNuevaTabla( Grid:TStringGrid; Path, Fichero:string);
  var
    Tabla:TDbf; 
    i, j : integer;
    strCampo : string;
  begin
  { crear la tabla de bases, en caso de que no exista }
      if FileExists( Path+'\'+fichero+'.dbf' ) then exit;
    Tabla :=TDbf.Create( nil ); 
  { configurar el objeto "Tabla" }
    with Table do begin
       { no abrirla en modo EXLUSIVO }
         Active       := false;
         Exclusive    := false;
         FilePathFull := Path;
         TableLevel   := 4;
         TableName    := fichero+'.dbf';
    end;
  { eliminar campos anteriores, si los hubiera }
    Tabla.FieldDefs.Clear;
    for i:=1 to 4 do begin
       { leer el nombre del campo }
         strCampo : =  Grid.Cells[i, 0];
      { definir los campos, el tipo depende de su posición en el grid }
         with Tabla.FieldDefs do
             { definir los campos }
                case i of
                       1:{ suponemos que es "string" }
                            Add( strCampo, ftString,     10, false );
                       2:{ suponemos que es "float" }
                            Add( strCampo, ftFloat,     0, false );
                       3:{ suponemos que es "integer" }
                            Add( strCampo, ftInteger,     0, false );
                       4:{ suponemos que es "boolean" }
                            Add( strCampo, ftBoolean,     0, false );
                end; { del case }
    end; { del for }
    with Tabla do begin
       { eliminar el fichero de índices que hubiese anteriormente }
         IndexDefs.Clear;
       { crear la tabla nueva }
         CreateTable;
       { 
         definir el nuevo fichero de índices, 
         suponemos que es por el primer campo del grid 
       }
         Exclusive := true;
         Open;
         AddIndex( fichero, Grid.Cells[i, 0], [ixPrimary, ixUnique] );
         Close;
         Exclusive := false;
       { eliminar el objeto "Tabla" }
         Free;
  end;
Luego llamarías al procedimiento (donde creas necesario) tal que así
Código Delphi [-]
    CrearNuevaTabla( miGrid, 'C:\copias', 'copia');
Espero no haberme equivocado con el código y que te sirva de algo.
Saludos:
Salvica

Última edición por salvica fecha: 25-01-2005 a las 14:38:03.
Responder Con Cita