Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-11-2011
lucas05 lucas05 is offline
Miembro
 
Registrado: ago 2010
Posts: 116
Poder: 14
lucas05 Va por buen camino
Pasar datos de un DBGrid a otro DBGrid

Hola, estoy usando Delphi y MySQL. Queria saber como puedo pasar los datos de un DBGrid a otro DBGrid.
Esta es la situación, tengo un form con: Edit1, Button1, Button2, DBGrid1, DBGrid2.
El funcionamiento es el siguiente, en el Edit1 escribo una palabra presiono el Button1 y me trae todos los registros de la base de datos que están relacionados con esa palabra y los muestra en el DBGrid1(para esto uso DataSource1, ADOQuery1, ADOConnection1). Hasta aquí todo bien.
El problema es como pasar los datos del DBGrid1 al DBGrid2, no quiero pasar todos, sino que el usuario seleccione un registro del DBGrid1 presione Button2 y el registro seleccionado pase al DBGrid2.

Espero que puedan ayudarme, desde ya muchas gracias por su atención.
Responder Con Cita
  #2  
Antiguo 25-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola lucas05.

¿ La tabla referenciada por ADOQuery1 es igual a la que se mostrará en DBGrid2 ? Es decir, ¿ A que TDataSource y TDataSet está conectado el DBGrid2 ?

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 25-11-2011
lucas05 lucas05 is offline
Miembro
 
Registrado: ago 2010
Posts: 116
Poder: 14
lucas05 Va por buen camino
Hola ecfisa, el DBGrid2 no lo conecte a ningun DataSource y tampoco a ningun ADOQuery.

Gracias por responder.
Responder Con Cita
  #4  
Antiguo 25-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Lucas.

Es que así no funciona la cosa... Simplificando mucho el concepto, un TDBGrid es la representacíón visual del valor de los campos de una tabla o consulta, no trabaja por sí sólo.

No sé que deseas hacer con los campos del registro seleccionado en DBGrid1, en gran medida de eso depende que camino seguir.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 25-11-2011
lucas05 lucas05 is offline
Miembro
 
Registrado: ago 2010
Posts: 116
Poder: 14
lucas05 Va por buen camino
Hola ecfisa, nuevamente gracias. En otros temas del foro vi que hacían algo parecido, seleccionaban un registro de una grilla presionaban un button y pasaban los datos de ese registro a varios Edit.
Lo que intento hacer es lo mismo, pero en vez de pasar los datos a los Edit quiero pasar los datos a otra grilla.
Osea volver a mostrar el mismo registro de la primera grilla en la segunda grilla, pero no todos los registros sino los que selecciono de la primera grilla

Gracias por tu atención.
Responder Con Cita
  #6  
Antiguo 25-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
En otros temas del foro vi que hacían algo parecido, seleccionaban un registro de una grilla presionaban un button y pasaban los datos de ese registro a varios Edit.
Hola Lucas.
Lamentablemente no es el mismo caso, pero una forma que se me ocurre es:
  1. Pone un TClientDataSet (ClientDataSet1) y otro TDataSource (DataSouce2) asociado a él, por último asociá el DBGrid2 a DataSource2
  2. Con el mouse posicionado en el componente ClientDataSet1 doble click sobre él. Se abrirá el Field Editor.
  3. Ya abierto el Field Editor, botón derecho del mouse sobre él y elegí New Field.
  4. En Name poné el (*)mismo nombre que el 1° campo del ADOQuery, en Type el mismo tipo que el 1° campo del ADOQuery. Y si requiere valor, en Size dale el mismo que el 1° campo del ADOQuery.
  5. Repetí los pasos del punto 4 para todos los campos que haya en el ADOQuery.
(*) puede ser el que gustes pero para simplificar te aconsejo el mismo.

Es decir que ClientDataSet1 tiene que tener una copia de todos los campos del ADOQuery1.

Luego el código:
Código Delphi [-]
...
implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  ClientDataSet1.CreateDataSet;
  ClientDataSet1.Open;
end;

procedure TForm1.btnPasarRegistroClick(Sender: TObject);
var
  i: Integer;
begin
  ClientDataSet1.Append;
  with DBGrid1.DataSource.DataSet do
   for i:= 0 to FieldCount-1 do
     ClientDataSet1.Fields[i].Value := Fields[i].Value;
  ClientDataSet1.Post;
end;
...
Haciendo click sobre el TButton se irá copiando a DBGrid2 el registro que esté seleccionado en DBGrid1.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 25-11-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.269
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por ecfisa Ver Mensaje
Es que así no funciona la cosa... Simplificando mucho el concepto, un TDBGrid es la representacíón visual del valor de los campos de una tabla o consulta, no trabaja por sí sólo.
+1.
Creo que esta es la clave.

Cita:
Empezado por lucas05 Ver Mensaje
Osea volver a mostrar el mismo registro de la primera grilla en la segunda grilla, pero no todos los registros sino los que selecciono de la primera grilla
Sigues sin responder a la pregunta importante.
¿Y una vez que has pasado el registro al segundo DBGrid, qué vas a hacer con él?
¿Cerrarás el formulario y ya está?
¿Debe quedar constancia en algún sitio?
¿El usuario va a modificarlo y debe quedar guardado en Base de Datos?
¿Vas a generar un listado?
.... ¿Qué pasa después cuando el usuario vea ese registro en el segundo DBGrid?

Creo que eso es lo que estaba intentando preguntar ecfisa. Lo que vayas a hacer con esos datos es lo que determina la solución óptima.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 25-11-2011
lucas05 lucas05 is offline
Miembro
 
Registrado: ago 2010
Posts: 116
Poder: 14
lucas05 Va por buen camino
Hola Neftali, gracias por sumarte. Una vez que paso el o los registros a la segunda grilla (pueden ser uno o varios) lo que quiero hacer es sumar el campo "precio" (este campo tiene un valor numérico) de todos los registros que están en la segunda grilla. Y el valor de la suma guardarla en la base de datos.

Muchas Gracias.
Responder Con Cita
  #9  
Antiguo 25-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Si hiciste el código anterior, basta con que agregues esta función:
Código Delphi [-]
function SumarPrecio(CDS: TClientDataSet): Currency;
begin
  Result:= 0;
  with CDS do
  begin
    First;
    while not Eof do
    begin
      Result:= Result + CDS.FieldBYName('PRECIO').AsCurrency;
      Next;
    end
  end
end;
Y cuando desees calcular los precios que estan en DBGrid2 solo tenés que llamarla.

Ejemplo donde se muestra la sumatoria:
Código Delphi [-]
procedure TForm1.btnSumarPrecioClick(Sender: TObject);
begin
  ShowMessage(CurrToStr(SumarPrecio(ClientDataSet1)))
end;

Del mismo modo podrías asignarlo a un campo de una tabla de tu bd, como por ejemplo:
Código Delphi [-]
procedure TForm1.btnSumarPrecioClick(Sender: TObject);
begin
  with DataModule1.TablaDondeSeSumanLosPrecios do
  begin
    Edit;
    FieldByName('SUMA').AsCurrency:= SumarPrecio(ClientDataSet1);
    Post
  end
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 26-11-2011
lucas05 lucas05 is offline
Miembro
 
Registrado: ago 2010
Posts: 116
Poder: 14
lucas05 Va por buen camino
Hola ecfisa, gracias por tu aporte. Aplique tu código y funciona bien.
El único problemita es que cuando guardo el resultado de la suma en la base de datos lo guarda siempre en el mismo registro.
Ejemplo: hago una suma y lo guarda en el registro 1, vuelvo a realizar otra suma y en vez de guardarlo en el registro 2, lo vuelve a guardar en el registro 1, o sea lo sobreescribe.
Como puedo resolverlo.

Nuevamente Gracias.
Responder Con Cita
  #11  
Antiguo 26-11-2011
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
¿Pero donde guardas la suma?, ¿en cual de los DBGrid's?, en el 1º DBGrid o en el 2º DBGrid?, ¿Y porque quieres guardar la suma en la base de datos?, los más lógico es realizar una SQL y mostrarla, ¿Cuantas base de datos están implicadas?

Un saludo.

Última edición por olbeup fecha: 26-11-2011 a las 22:32:09. Razón: Restificar
Responder Con Cita
  #12  
Antiguo 26-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por lucas05 Ver Mensaje
Hola ecfisa, gracias por tu aporte. Aplique tu código y funciona bien.
El único problemita es que cuando guardo el resultado de la suma en la base de datos lo guarda siempre en el mismo registro.
Ejemplo: hago una suma y lo guarda en el registro 1, vuelvo a realizar otra suma y en vez de guardarlo en el registro 2, lo vuelve a guardar en el registro 1, o sea lo sobreescribe.
Como puedo resolverlo.
Hola lucas.

Si no seleccionas previamente el registro donde se guardará la sumatoria, al usar Edit sin haber camibiado previamente el posicionamiento en la tabla, el último valor siempre sobreescribirá al anterior.
Si lo que buscas es ir añadiendo nuevos registros con las sucesivas sumatrorias tendrías que usar el método Append o Insert.

Reemplazando en el código anterior sería:
Código Delphi [-]
...
  with DataModule1.TablaDondeSeSumanLosPrecios do
  begin
    Append;
  ...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 27-11-2011 a las 00:03:38.
Responder Con Cita
  #13  
Antiguo 28-11-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.269
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por lucas05 Ver Mensaje
Hola Neftali, gracias por sumarte. Una vez que paso el o los registros a la segunda grilla (pueden ser uno o varios) lo que quiero hacer es sumar el campo "precio" (este campo tiene un valor numérico) de todos los registros que están en la segunda grilla. Y el valor de la suma guardarla en la base de datos.
OK, a esto me refería.
Ves, yo en este caso, si los registros del segundo DBGrid no se van a guardar, sino que sólo vas a guardar la suma resultante, tal vez hubiera utilizado en el segundo un TStringGrid, con 1 o 2 campos significativos y el PRECIO.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #14  
Antiguo 29-01-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Jasan_Records Ver Mensaje
...
Bienvenido a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo, gracias por tu colaboración
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Pasar registros desde un dbgrid a otro dbgrid con botones.. Vales08 Varios 17 21-11-2011 19:27:50
Pasar Datos De Dbgrid A Otro Helg17 Tablas planas 7 27-03-2009 10:16:37
Pasar informacion de un dbgrid a otro schaka Conexión con bases de datos 3 11-02-2008 10:15:32
Pasar lineas de in dbgrid a otro dbgrid look OOP 3 21-09-2007 23:16:29
Como extraer datos de un DBgrid a otro DBgrid mickey Conexión con bases de datos 13 29-01-2004 05:05:30


La franja horaria es GMT +2. Ahora son las 04:46:48.


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
Copyright 1996-2007 Club Delphi