Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Como puedo guardar campos de un DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=17668)

JCarlos 17-01-2005 17:38:54

Como puedo guardar campos de un DBGrid
 
Hola,
Tengo una duda respecto al componente DBGrid, me gustaria saber si desde este componente yo puedo por medio de un boton aceptar guardar campos del DBGrid en una tabla..
Explicando mejor para que me puedan entender, yo tengo un DBGrid con tres campos de una tabla, que son: Id, Nombre y Apellido.
Entonces a el DBGrid le adicione dos columnas mas, que serian Hora de entrada y Hora de salida.
Y me gustaria de este DBGrid guardar los campos Id, Hora de Ent y Hora de Salida en otra tabla..
Y me gustaria saber si esto es posible, de ser posible, agradeceria que me explicaran como.
Gracias de Antemano..

Gydba 17-01-2005 18:34:59

Hola,

La verdad es que no entiendo cuál es tu complicación. Los valores de un DBGrid es sólo el reflejo de un DataSource conectado a un DataSet. En todo caso deberías obtener los valores del DataSet y asignarlo donde quieras con algún evento On[Before/After]Post del mismo, ya sea con las propiedades FieldByName, Fields o componentes DBAware directamente.

Info sobre los DataSet hay bastante en el Help de Delphi.

Pero repito, no comprendí del todo tu problema.

JCarlos 17-01-2005 18:47:34

Bueno te explico mejor..
Lo que quisiera en guardar los campos que no estan en el dataset, pues al dar doble click sobre el dbgrid te pone una ventana donde estan todos los campos de la tabla como tal, pero el dbgrid le adicione otras columnas, que no necesito en esa tabla especificamente, pero que quiero guardar en otra, entonces mi problema radica en que no se si puedo guardar estas columnas desde el mismo dbgrid mediante un boton guardar para una tabla nueva..
Bueno espero que me entiendas, pues no se de que manera puediera explicartelo.

Muchas gracias por tu ayuda, y disculpa las molestias.

JCarlos 24-01-2005 18:02:00

Buenas a todos..
Tratare de explicar nuevamente cual es mi problema, pues realmente necesito una solución por que creo que me voy a volver loco...
El caso es que en un dbgrid estoy mostrando tres campos de una tabla, dando doble click sobre el dbgrid, en la ventanita que aparece le agregue otra columna nueva para un dato de si ó no...
Necesito guardar en una tabla nueva los campos del dbgrid, los tres campos y la columna adicional..
Por favor si esto se puede hacer, agradeceria cualquier ayuda o recomendacion.. Y en caso de que alguien tenga otra idea de como mostrar campos de una tabla existente, adicionarle otro campo y luego guardarlo en una tabla nuevo.. Tambien me serviria, el caso es poder guardar los 4 campos, no importa con que componentes......
Ya he tratado con la ayuda, pero en realidad no he conseguido nada, quizas es por que ya estoy algo frustrado...
Gracias de antemano...

salvica 25-01-2005 14:35:49

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

JCarlos 26-01-2005 13:14:31

Gracias Salvica..
No lo use exactamente asi, pero me fue de muchisima ayuda...


La franja horaria es GMT +2. Ahora son las 21:21:21.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi