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 Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-09-2014
jrla jrla is offline
Miembro
NULL
 
Registrado: sep 2014
Posts: 24
Poder: 0
jrla Va por buen camino
Exclamation tdbgrid como tabla de referencia

hola a todos tengo una consulta mi duda es como hago para mover los datos de un dbgrid que lo tengo enlazado a una consulta de personal por departamento asta el

momento todo bien ya que me muestra todo el personal correspondiente lo que quiero hacer que la seleccionar con el puntero una

personal de dbgri1 me lo pase al dbgrid 2 que esa es la lista que en verda voy a guardar en mi base de datos gracias en este hilo

vi una repuesta que me pueda ayudar no entendí el procedimiento para palicarlo a mi xe6 clubdelphi.com/foros/showthread.php?t=76755 luego que tengo todos mi personal seleccionado como lo guardo en mi base de datos
Responder Con Cita
  #2  
Antiguo 11-09-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Te veo bastante perdido, lo que necesitas es el mejor libro que puedes encontrar sobre delphi y bases de datos, es este y es gratis.
Responder Con Cita
  #3  
Antiguo 11-09-2014
jrla jrla is offline
Miembro
NULL
 
Registrado: sep 2014
Posts: 24
Poder: 0
jrla Va por buen camino
Unhappy ni tanto

hola gracias por tu respuesta no estoy tan perdido como dije anterior mente tengo un dbgrid1 con datos filtrados atreves de un query que me muestra todo los trabajadores que están en un departamento... ahora que cuando el usuario seleccione en el dbrid1 los que se van de vacaciones y al presionar el button me pase dicha selección a dbgrid2 ............. en el dbgrid1 tengo las opciones activas row select y multi select

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         // de aquí es que me pierdo por el do sin el while 
   for i:= 0 to FieldCount-1 do
     ClientDataSet1.Fields[i].Value := Fields[i].Value; // asta aquí
  ClientDataSet1.Post;
end;

Última edición por Casimiro Notevi fecha: 12-09-2014 a las 10:39:47. Razón: Cambiar PHP por DELPHI
Responder Con Cita
  #4  
Antiguo 12-09-2014
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 jrla.


Sería de mucha ayuda que nos dijeras con que gestor de base de datos estas trabajando (Firebird, MySQL, Paradox, Access, MS SQLServer,) y con que componentes te conectas a ella ? (BDE, ADO, IBX, DBExpres, ...)

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 12-09-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
hasta donde yo se, el with...do es algo especifico de delphi y simplemente es para evitar tener que hacer referencia al objeto que indique el with..do. En tu caso elimina la linea del with...do y en el for cambias la linea que se encuentra en su interior por esta: ClientDataSet1.Fields[i].Value*:=*DBGrid1.DataSource.DataSet.Fields[i].Value; En este caso no le veo mucho sentido ya que es una sola linea pero imagina que tuvieses que usar muchas referencias al mismo objeto, ahi si es mas util aunque se puede prescindir de ello. En builder podrias usar un puntero a objeto para acortar.


Quedaria asi:
Código PHP:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  
ClientDataSet1->CreateDataSet;
  
ClientDataSet1->Open;
}

void __fastcall TForm1::btnPasarRegistroClick(TObject *Sender)
{
  
ClientDataSet1->Append;
  
  for(
int i=0<= FieldCount-1i++)
     
ClientDataSet1->Fields[i]->Value DBGrid1->DataSource->DataSet->Fields[i]->Value;
  
ClientDataSet1->Post;


Última edición por aguml fecha: 12-09-2014 a las 09:22:31.
Responder Con Cita
  #6  
Antiguo 12-09-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por jrla Ver Mensaje
hola gracias por tu respuesta no estoy tan perdido
Bastante perdido, pero no debes molestarte por eso, todos estamos perdidos en algún momento
Responder Con Cita
  #7  
Antiguo 12-09-2014
jrla jrla is offline
Miembro
NULL
 
Registrado: sep 2014
Posts: 24
Poder: 0
jrla Va por buen camino
Arrow ninguna molestia

Cita:
Empezado por Casimiro Notevi Ver Mensaje
Bastante perdido, pero no debes molestarte por eso, todos estamos perdidos en algún momento
hola casimiro no me molesto :-S simplemente me siento frustrado al realizar algo que quiero y me complique tanto
la otra pregunta es mi gestor de base de datos es interbase y me conecto con IBTransaction1
Responder Con Cita
  #8  
Antiguo 12-09-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por jrla Ver Mensaje
hola casimiro no me molesto :-S simplemente me siento frustrado al realizar algo que quiero y me complique tanto
la otra pregunta es mi gestor de base de datos es interbase y me conecto con IBTransaction1
Por eso te he enlazado el libro La cara oculta de Delphi, todas esas dudas desaparecerán si lo lees.

IBTransaction no es para conectar con una base de datos.

Última edición por Casimiro Notevi fecha: 12-09-2014 a las 15:11:12.
Responder Con Cita
  #9  
Antiguo 12-09-2014
jrla jrla is offline
Miembro
NULL
 
Registrado: sep 2014
Posts: 24
Poder: 0
jrla Va por buen camino
Unhappy aclara miento

Cita:
Empezado por aguml Ver Mensaje
hasta donde yo se, el with...do es algo especifico de delphi y simplemente es para evitar tener que hacer referencia al objeto que indique el with..do. En tu caso elimina la linea del with...do y en el for cambias la linea que se encuentra en su interior por esta: ClientDataSet1.Fields[i].Value*:=*DBGrid1.DataSource.DataSet.Fields[i].Value; En este caso no le veo mucho sentido ya que es una sola linea pero imagina que tuvieses que usar muchas referencias al mismo objeto, ahi si es mas util aunque se puede prescindir de ello. En builder podrias usar un puntero a objeto para acortar.

[/php]
muchas gracias por el aclara miento......... en las lineas del dataset la avia modificado solo me falta era el puntero y la del for me confundí al indicarle el field del dbgrd a aumentar
Responder Con Cita
  #10  
Antiguo 12-09-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
uffff que dificil es entenderte . ¿el español es tu lengua nativa? porque parece que uses el google translator (aunque no creo que ni él lo haga tan mal ).
A ver si puedes aclararme un poquito mejor lo que me comentas porque me pierdo.
Responder Con Cita
  #11  
Antiguo 12-09-2014
jrla jrla is offline
Miembro
NULL
 
Registrado: sep 2014
Posts: 24
Poder: 0
jrla Va por buen camino
Talking el perdido :D

Cita:
Empezado por Casimiro Notevi Ver Mensaje
IBTransaction no es para conectar con una base de datos.
yo utilizo interbase el que trae embarcadero xe6 creo que se conecta con ibconasole y en mi form tengo par enlazar a a mi base de datos un tibdata base
Responder Con Cita
  #12  
Antiguo 12-09-2014
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 jrla.

Para el ejemplo crea dos tablas iguales, menos en el nombre claro
Código SQL [-]
SET TERM ^;

CREATE TABLE TEST (
    ID      INTEGER,
    CADENA  VARCHAR(50)
)^

CREATE TABLE TEST2 (
    ID      INTEGER,
    CADENA  VARCHAR(50)
)^

SET TERM ;^
Y cargale algunos datos a la primer tabla (orígen).

En un form pone,
Código:
1 (un ) TIBDatabase    (IBDatabase1)
1 (dos) TIBTransaction (IBTransaction1) 
2 (dos) TIBDataSet     (ibdsSource y ibdsTarget)
2 (dos) TDataSource    (dsSource, dsTarget)
2 (dos) TDBGrid.       (dbgSource, dbgTarget)
1 (un ) TButton        (btnPassData)
Ejemplo:
Código PHP:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  
/* tabla origen */
  
ibdsSource->Close();
  
ibdsSource->Database IBDatabase1;
  
ibdsSource->SelectSQL->Text "SELECT * FROM TEST";
  
ibdsSource->Open();
  
// DataSource origen
  
dsSource->DataSet ibdsSource;
  
// DBGrid origen
  
dbgSource->DataSource dsSource;
  
dbgSource->Options TDBGridOptions(dbgSource->Options)<< dgMultiSelect;
  
dbgSource->Options TDBGridOptions(dbgSource->Options)<< dgRowSelect;
  
dbgSource->PopupMenu PopupMenu1;

  
/* tabla destino */
  
ibdsTarget->Close();
  
ibdsTarget->Database IBDatabase1;
  
ibdsTarget->SelectSQL->Text "SELECT * FROM TEST2";
  
ibdsTarget->Open();
  
// DataSource destino
  
dsTarget->DataSet ibdsTarget;
  
// DBGrid destino
  
dbgTarget->DataSource dsTarget;
}

void __fastcall TForm1::btnPassDataClick(TObject *Sender)
{
  if (
dbgSource->SelectedRows->Count 0) {
    for(
int i 0dbgSource->SelectedRows->Counti++) {
      
ibdsSource->GotoBookmark((void*)dbgSource->SelectedRows->Items[i].c_str());
      
ibdsTarget->Insert();
      for(
int j 0ibdsSource->Fields->Countj++)
        
ibdsTarget->Fields->Fields[j]->Value ibdsSource->Fields->Fields[j]->Value;
      
ibdsTarget->Post();
    }
  }

El código pasa los registros que hayas seleccionado en dbgSource (mediante Ctrl+Click) a dbgTarget (en realidad de ibdsSource a ibdsTarget), cuando se presiona el botón btnPassData.

Está realizado y probado en C++ Builder 6 y Firebird 2.5.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #13  
Antiguo 12-09-2014
jrla jrla is offline
Miembro
NULL
 
Registrado: sep 2014
Posts: 24
Poder: 0
jrla Va por buen camino
Red face vuelvo a explicar mi duda

hola a todos att el perdido.......... lo que tengo es lo siguiente tengo un form que se llama organizar curso donde tengo un combobox con todos los departamentos y un button enlazado a un query que me hace una consulta a la tabla trabajadores y me filtra los mismo de acuerdo a la selección del combobox y me lo mostrara en un stringrid ecfisa me ayudo con esa parte y buscando en los hilos vi que era mejor trabajar con un dbgrid entonces agregue un datasourse1 y lo enlace a mi query y mi dbgrid1 lo enlace a datasourse1 y este me muestra mi consulta

aquí viene el problema mi tutor dijo pero si yo quiero seleccionar algunos trabajadores de departamento y no a todos y crear otra lista .... y entonces agregue un 2 dbgri2 y un clienta dataset1 .... a dbgrid1 le active las opciones multiselec y rowslect lo que quiero hacer es que cuando marque los trabajadores del dbgrid 1 y precione un button los pase al dbgrid 2 y esa es la lista de trabajadores que voy a almacenar en mi base de datos esa es mi historia
Responder Con Cita
  #14  
Antiguo 12-09-2014
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 jrla.

Claro, pero al usar un TDBGrid como receptor de los datos, sí o sí tenes que emplear una tabla ya que ese componente funciona en relación con ellas (la representa visualmente) y si usas la misma tabla vas a duplicar información.

Si usas una sola tabla, se me ocurre como mas lógico borrar los registros no seleccionados ...

¿ Es eso lo que buscas hacer? ¿ Dejar en la tabla sólo los registros seleccionados ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #15  
Antiguo 12-09-2014
jrla jrla is offline
Miembro
NULL
 
Registrado: sep 2014
Posts: 24
Poder: 0
jrla Va por buen camino
ecfisas

aplique tu línea de código y me sale esto c_str isno a member of tbytedynarray y undefined symbol popupmenu1
con la explicación de tu código entendí que mi 2 dbgrid debe estar enlazado a la tabla que quiero almacenar verdad ?... o me equivoco
Responder Con Cita
  #16  
Antiguo 12-09-2014
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 jrla.
Cita:
Empezado por jrla Ver Mensaje
aplique tu línea de código y me sale esto c_str isno a member of tbytedynarray
Es por eso que aclare: C++ Builder 6. En esta versión TBookmarkList, está declarado así:
Código PHP:
typedef void *TBookmark
Eso cambió a partir de C++ Builder 2009 y aparentemente XE6 declara la propiedad TBookmarkList (Items) de tipo TByteDynArray, de allí que indique que el método c_str() no es miembro de ...
Pero realmente desconozco la definición y uso en XE6, tendría que buscar y leer al respecto.


Cita:
Empezado por JRLA Ver Mensaje
y undefined symbol popupmenu1
¿ Y en que parte del código de mi mensaje metí un TPopupMenu llamado popupmenu1 ?


Cita:
Empezado por jrla Ver Mensaje
con la explicación de tu código entendí que mi 2 dbgrid debe estar enlazado a la tabla que quiero almacenar verdad ?... o me equivoco
No te equivocas en absoluto, es así. De ese modo se guardarían en la segunda tabla los registros seleccionados.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #17  
Antiguo 12-09-2014
jrla jrla is offline
Miembro
NULL
 
Registrado: sep 2014
Posts: 24
Poder: 0
jrla Va por buen camino
Talking aqui esta la propieda PopupMenu

Cita:
// DBGrid origen
dbgSource->DataSource = dsSource;
dbgSource->Options = TDBGridOptions(dbgSource->Options)<< dgMultiSelect;
dbgSource->Options = TDBGridOptions(dbgSource->Options)<< dgRowSelect;
dbgSource->PopupMenu = PopupMenu1;
la ultima línea
Responder Con Cita
  #18  
Antiguo 12-09-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
A ver, hay algo que no tengo claro, el filtrado ¿quieres guardarlo? Si es asi lo mejor es que crees una nueva tabla (por ejemplo la puedes llamar "filter") y ahí guardas. Si no quieres guardar ese filtrado ¿por que no usas un TStringGrid para mostrarlos? Este no necesita de una tabla y viene a ser lo mismo.
Responder Con Cita
  #19  
Antiguo 12-09-2014
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 jrla Ver Mensaje
la ultima línea
Te pido mil disculpas, juro que no lo ví , solo borra la línea y el error desaparecerá

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #20  
Antiguo 12-09-2014
jrla jrla is offline
Miembro
NULL
 
Registrado: sep 2014
Posts: 24
Poder: 0
jrla Va por buen camino
Talking listo

Código PHP:
http://docwiki.embarcadero.com/Libraries/XE6/en/System.Types.TByteDynArray 
ya borre la línea....... investigue y me sale estoy referente a tbytedynarray que opinas
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
crear referencia en tabla firebird ebeltete Firebird e Interbase 5 30-05-2011 10:39:47
Tabla de Referencia Cruzada santi33a MS SQL Server 3 03-02-2006 21:49:00
como ejecutar un query haciendo referencia a una tabla que esta en red????? reggaealex SQL 2 20-01-2005 19:36:48
Referencia a los campos de una tabla en Interbase mglucero Firebird e Interbase 2 05-11-2004 09:45:57
UPDATE con referencia a otra tabla... JorgeBec SQL 6 05-08-2004 20:48:36


La franja horaria es GMT +2. Ahora son las 09:14:05.


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