Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-03-2012
dmartinezn dmartinezn is offline
Miembro
 
Registrado: ene 2012
Ubicación: Cuba - Venezuela
Posts: 38
Poder: 0
dmartinezn Va por buen camino
Pasar datos de un DBGrid a otro DBGrid c++ Builder 6

Saludos Amigos
Se que este tema ya se ha tratado en este foro, pero las soluciones la han dado en Delphi y me resulta difícil entenderlo.
Lo que quiero hacer es pasar una o varias filas de un DBGrid a otro DBGrid.
Para mostrar los datos en el DBGrid1 utilizo un ADOConnection,DataSource1, ADOQuery1.
En DBGrid2 inicialmente también lo había conectado al DataSource1 y en él se me mostraban tambien los datos del DBGrid1, pero no es esa la idea.
Todos los datos que están mostrados en la fila seleccionada del DBGrid1 son los que pasare al DBGrid2.
La finalidad de pasar las filas seleccionadas del DBGrid1 al DBGrid2 es para luego almacenarlo en la BD.
Un saludo.
Responder Con Cita
  #2  
Antiguo 04-03-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No tiene sentido

Un dbgrid muestra los registros que te has traido de la base de datos mediante un sql.
Si quieres guardarlos en la BD, ¡¡¡ están guardados ya !!!, de ahí han salido para mostrarlos.
Además que pasarlo a otro dbgrid no sirve para nada

Creo que no se ha entendido lo que quieres, no tiene lógica ninguna, mejor te explicas con más detalle
Responder Con Cita
  #3  
Antiguo 04-03-2012
dmartinezn dmartinezn is offline
Miembro
 
Registrado: ene 2012
Ubicación: Cuba - Venezuela
Posts: 38
Poder: 0
dmartinezn Va por buen camino
Saludos Casimiro Notevi
Usted tiene razon en cuando a que el DBGrid muestra unos datos que ya estan guardados en la BD, pero explico el por qué quiero hacer esto.

El DBGrid1 me muestra los siguientes datos
Nombre
Sexo
Edad

y quiero pasar para el DBGrid2 solo aquellos que me interesan, para formar un equipo y luego poder decir, el equipo 1 esta formado por:
Pedro M 29
Juan M 28
D F 20


y así sucesivamente...
esa es la idea que se me ocurrió, de primero pasarlo para el DbGrid2 y luego guardar ese equipo, si existe una forma mas optima de hacer esto será bienvenida.
Responder Con Cita
  #4  
Antiguo 04-03-2012
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.

Antes que nada, te comento que opino exáctamente como Casimiro.

Pero sólo a modo de guía de como pasar los datos seleccionados de un TDBGrid a otro en Builder C++, te pongo un ejemplo:
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TDBGrid *G1 = static_cast<TDBGrid*>(DBGrid1);
TDBGrid *G2 = static_cast<TDBGrid*>(DBGrid2);

  for(int i=0; i < G1->SelectedRows->Count; i++){
    G1->DataSource->DataSet->GotoBookmark(G1->SelectedRows->Items[i].c_str());
    G2->DataSource->DataSet->Append();
    for(int j=0; j < G1->DataSource->DataSet->FieldCount; j++)
       G2->DataSource->DataSet->Fields->Fields[j]->Value =
         G1->DataSource->DataSet->Fields->Fields[j]->Value;
    G2->DataSource->DataSet->Post();
  }
}
Por supuesto que en el el ejemplo los DBGrids se encuentran relacionados a distintos TDataSet (aunque con los mismos campos).

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 05-03-2012
dmartinezn dmartinezn is offline
Miembro
 
Registrado: ene 2012
Ubicación: Cuba - Venezuela
Posts: 38
Poder: 0
dmartinezn Va por buen camino
Gracias ecfisa
En el ejemplo que usted me puso
Código:
G1->SelectedRows->Count
siempre me devuelve 0, a pesar de que el DBGrid1 tiene datos mostrados y selecciono una de sus filas.
Responder Con Cita
  #6  
Antiguo 05-03-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Habilita en el dbgrid la propiedad... vaya, no me acuerdo del nombre, "multiselected" o algo así
Mira esto.
Responder Con Cita
  #7  
Antiguo 05-03-2012
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.

Nuevamente coincido con la respuesta de Casimiro.

Como expresaste anteriormente que te cuesta entender el código Delphi, en el enlace dice:
Código Delphi [-]
  DBGrid1.Options:= DBGrid1.Options + [dgMultiSelect];

En Builder C++ sería:
Código:
  DBGrid1->Options = TDBGridOptions(DBGrid1->Options) << dgMultiSelect;
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 07-03-2012
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 204
Poder: 16
lmpadron Va por buen camino
en mas de una ocasión he necesitado hacer lo mismo pero lo he resuelto usando los IDs, sin necesidad de mover toda la información, de todas formas muy útil el post, también lo agradezco.
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código.


Cuando miras fijamente al abismo, este te devuelve la mirada


oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_
oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_
oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_
oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_
oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_
ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_
________________________________________________________________________________
Responder Con Cita
  #9  
Antiguo 09-03-2012
LuisMiguel LuisMiguel is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 33
Poder: 0
LuisMiguel Va por buen camino
De ser posible si pudiera explicar la forma que ha resuelto el problema usando los IDs seria muy bueno.
Un saludo
Responder Con Cita
  #10  
Antiguo 12-03-2012
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 204
Poder: 16
lmpadron Va por buen camino
Cita:
Empezado por LuisMiguel Ver Mensaje
De ser posible si pudiera explicar la forma que ha resuelto el problema usando los IDs seria muy bueno.
Un saludo
Es solo una forma distinta de hacerlo, dmartinezn tiene en un DBGrid datos que ya están guardados en la BD entonces porque mover toda la información si lo podemos hacer solo con los Ids? Asi movemos menos datos y es mas ligero el proceso.

Cita:
Empezado por dmartinezn Ver Mensaje
si existe una forma mas optima de hacer esto será bienvenida.
Tienes un DBGrid1 que te muestra la información que tienes en la BD o sea: Nombre, Sexo, Edad, y quieres pasar para el DBGrid2 solo aquellos que te interesan. O sea estas haciendo una selección de los datos del DBGrid1 y pasandolos al DBGrid2 por eso necesitas saber como pasar datos de un DBGrid a otro, supongo que después los guardarás en una tabla en tu BD sino para que utilizar un DBGrid verdad?
Bueno porque en vez de pasar los datos de un DBGrid a otro no guardas directamente la selección hecha a la tabla en la BD y después apuntas el DBGrid2 a dicha tabla ?

Código:
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("INSERT INTO `equipo` (`id_equipo`,`nombre`,`sexo`,`edad`) VALUES "
				 "  ('" + DBGrid1->Columns->Items[0]->Field->Text + "'), "
                                 "  ('" + DBGrid1->Columns->Items[1]->Field->Text + "'), "
                                 "  ('" + DBGrid1->Columns->Items[2]->Field->Text + "');");
ADOQuery3->ExecSql();

ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("SELECT * FROM `equipo`")
ADOQuery1->Open();

DBGrid2->DataSource->DataSet  = ADOQuery1;
Ahora bien si quieres guardar menos información podrías usar solo las Ids de los jugadores y guardarlas en la tabla equipo. Para ello la tabla equipo tendría menos campos, y quedarian como algo asi (es como me imagino la tabla LISTA DE JUGADORES y EQUIPO)

LISTA (de jugadores)
Id_lista = para definir cada registro como único
Nombre = donde definirías el nombre de los jugadores
Sexo = donde definirías el sexo de los jugadores
Edad = donde definirías la edad de los jugadores

EQUIPO
Id_equipo = para definir cada registro como único
Equipo = donde definirías el numero de equipo
Integrante = donde definirías que jugador forma parte de el

AsumieNdo que en el DBGrid1 muestres el ID como primer valor en el DBGrid1 (sino lo muestras tendrás que hacer una consulta aparte para obtenerlo ok)

Código:
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("INSERT INTO `equipo` (`equipo`,`integrante`) VALUES 
			" ('" + Edit1->Text + "')," // o cualquier otro lugar donde definas el número de equipo
                        " ('" + DBGrid1->Columns->Items[0]->Field->Text + "');"); // id del jugador  
ADOQuery3->ExecSql();

ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("SELECT equipo.equipo, lista.nombre, lista.edad, lista.sexo FROM `prueba`.`lista`                 
                                  INNER JOIN equipo ON integrante = id_lista ORDER BY equipo.equipo;")
ADOQuery1->Open();

DBGrid2->DataSource->DataSet  = ADOQuery1;
Weno algo así, esto no lo he escrito en el builder así que igual se encuentran con alguno errores en la sintaxis pero al menos les da una idea de como lo haría yo y espero que les sea de utilidad.

Saludos
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código.


Cuando miras fijamente al abismo, este te devuelve la mirada


oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_
oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_
oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_
oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_
oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_
ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_
________________________________________________________________________________

Última edición por lmpadron fecha: 12-03-2012 a las 17:28:51.
Responder Con Cita
  #11  
Antiguo 12-03-2012
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 lmpadron Ver Mensaje
Código:
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("INSERT INTO `equipo` (`id_equipo`,`nombre`,`sexo`,`edad`) VALUES "
				 "  ('" + DBGrid1->Columns->Items[0]->Field->Text + "'), "
                                 "  ('" + DBGrid1->Columns->Items[1]->Field->Text + "'), "
                                 "  ('" + DBGrid1->Columns->Items[2]->Field->Text + "');");
ADOQuery3->ExecSql();

ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("SELECT * FROM `equipo`")
ADOQuery1->Open();

DBGrid2->DataSource->DataSet  = ADOQuery1;
Hola Impadron.

Si no interpreto mál, ese código copia el registro actualmente seleccionado, pero no soporta el caso de una selección múltiple en el TDBGrid.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #12  
Antiguo 12-03-2012
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 204
Poder: 16
lmpadron Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola Impadron.

Si no interpreto mál, ese código copia el registro actualmente seleccionado, pero no soporta el caso de una selección múltiple en el TDBGrid.

Un saludo.
Saludos Amigo ecfisa tiene toda la razón que descuidado soy y no solo eso, al correrlo descubrí también una serie de pequeños detalles que hubiesen vuelto loco a cualquiera jejejeje bueno aquí les dejo el código, esta vez soportando el Multiselect !!!

Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    String a;
    a = " ";
    ADOQuery2->Close();
    ADOQuery2->SQL->Clear();
    if (DBGrid1->SelectedRows->Count != 0)
    {
        for (int i = 0; i < DBGrid1->SelectedRows->Count; i++)
        {
               DBGrid1->DataSource->DataSet->GotoBookmark(DBGrid1->SelectedRows->Items[i].c_str());

			   a = a + " ('" + Edit1->Text + "'," // o cualquier otro lugar donde definas el número de equipo
                               "'" + DBGrid1->Columns->Items[0]->Field->Text + "')";
                           if (i != DBGrid1->SelectedRows->Count - 1){a = a + ",";}

        }
        ADOQuery2->SQL->Add("INSERT INTO equipo (equipo,integrante) VALUES " + a);
        ADOQuery2->ExecSQL();

        ADOQuery2->Close();
        ADOQuery2->SQL->Clear();
        ADOQuery2->SQL->Add("SELECT equipo.equipo, lista.nombre, lista.edad, lista.sexo FROM `prueba`.`lista` "
                                 " INNER JOIN equipo ON integrante = id_lista ORDER BY equipo.equipo");
        ADOQuery2->Open();
    }
}
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código.


Cuando miras fijamente al abismo, este te devuelve la mirada


oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_
oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_
oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_
oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_
oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_
ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_
________________________________________________________________________________
Responder Con Cita
  #13  
Antiguo 13-03-2012
LuisMiguel LuisMiguel is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 33
Poder: 0
LuisMiguel Va por buen camino
Excelente amigo, justo lo que necesitaba, muchas gracias a los 2.Un pequeño detalle es que aun no encuentro lo de la selección múltiple en el TDBGrid. En el ejemplo que puso Impadrom

Código:
if (DBGrid1->SelectedRows->Count != 0)
Siempre devuelve 0 y nunca entra al ciclo, y la propiedad multiselected que dice Casimiro Notevi no la encuentra en c++ builder 6, hice lo que recomendó ecfisa de


Código:
DBGrid1->Options = TDBGridOptions(DBGrid1->Options) << dgMultiSelect;
Pero me sigue dando el mismo problema de devolver 0 en

Código:
DBGrid1->SelectedRows->Count
Responder Con Cita
  #14  
Antiguo 13-03-2012
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 204
Poder: 16
lmpadron Va por buen camino
Cita:
Empezado por LuisMiguel Ver Mensaje
(...)Un pequeño detalle es que aun no encuentro lo de la selección múltiple en el TDBGrid.
a ver si aquí lo ves mejor !!!!

Hola Luis Miguel la selección múltiple es una propiedad del TDBGrid y puedes definiría en el Object Inspector o en el runtime a través de código como te han indicado anteriormente. Para efectuar la selección debes dar click en una fila y después con el Ctrl apretado dar click en otra !!!

El código solo funcionará cuando exista multiselect o sea cuando halla mas de una fila seleccionada.

Saludos

Última edición por lmpadron fecha: 13-03-2012 a las 15:01:39.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 datos de un DBGrid a otro DBGrid lucas05 Varios 13 29-01-2015 22:52:50
Pasar registros desde un dbgrid a otro dbgrid con botones.. Vales08 Varios 17 21-11-2011 20:27:50
Pasar Datos De Dbgrid A Otro Helg17 Tablas planas 7 27-03-2009 11:16:37
Pasar lineas de in dbgrid a otro dbgrid look OOP 3 22-09-2007 00:16:29
Como extraer datos de un DBgrid a otro DBgrid mickey Conexión con bases de datos 13 29-01-2004 06:05:30


La franja horaria es GMT +2. Ahora son las 12:42:03.


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