Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-12-2006
Avatar de Goyo
Goyo Goyo is offline
Miembro
 
Registrado: feb 2006
Posts: 89
Poder: 19
Goyo Va por buen camino
pasar de un dbgrid a un listbox

miren lo que quiero hacer creo que ahora es mas facil (eso digo yo para lo que son expertos en delphi) y si es que me ayudan (y eso creo que si).

miren estoy cargando una tabla (Personas) con tres campos (id_personas, Titular, Cargo), en un DBGrid (solo el nombre pongo el Titular), lo que necesito saber es como pasar el id_personas y el nombre a un ListBox o un ComboBox, siempre y cuando seleccione un elemento del DBgrid. Bueno me explico...


en el DBGrid muestro los datos de la tabla Personas, por ejemplo tengo los siguientes datos:
id_personas, Titular, Cargo
1,Benito Juarez Garcia, Director General
2,Juan Cantu Mendoza, Director de Finanzas
3,Gabriel Garcia Marquez, Director de Ingenieria
..
..
9,Carlos Estrada Marquecina, Director del Agua

si quiero pasar el registro Gabriel Garcia Marquez (este lo selecciono en el DBGrid) y que al pulsar en un boton agregar, este se agregue a un listBox o un ComboBox, y a su vez pueda pasar el registro de Carloss Estrada Marquezina al listBox o un ComboBox.
para que cuando pulse la opción de guardar estos datos que tengo en el listbox o el combobox se graben en la tabla Asignaciones con los campos (id_asignacion, id_personas, Id_Documentacion, Comentarios) que id_personas(Tabla Asignaciones)=id_personas(Tabla Personas)

les agradecere la atencion prestada a este tema...
saludos y muchas gracias
Responder Con Cita
  #2  
Antiguo 13-12-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola Goyo
Entiendo:
Quieres que al apretar un boton, pase, la informacion que esta seleccionada en un dbgrid, a un combobox.
Bueno, si es asi:
1-Pon un query temporal (AQTemp), lo conectas con la base de datos o datamodule.
2-En el evento click del boton pones esto:
Código Delphi [-]
 var
 personas: string;
begin
   AQTemp.SQL.Text := 'Select * From Personas Where id_personas = '+personas;
   AQTemp.Open;
   Combobox1.Text := AQTemp.Fields[0].AsString;
Se supone que si tienes la informacion de id_personas , seleccionada en el grid, esta sera pasada al combobox1.
Espero te sirva.
Saludos
Responder Con Cita
  #3  
Antiguo 13-12-2006
Avatar de Goyo
Goyo Goyo is offline
Miembro
 
Registrado: feb 2006
Posts: 89
Poder: 19
Goyo Va por buen camino
te agradezco mucho Caral...
mira estoy utilizando bases de datos de MySQL, y con respecto al AQTemp es un Query normal? (disculpa la ignorancia) o es otro componente, porque yo puse en lugar de AQTemp, escribi Query, y quedo de la siguiente manera:
Código Delphi [-]
procedure TFormCaptura.BitBtnAgregarClick(Sender: TObject);
 var
 personas: string;
begin

   Query1.SQL.Text := 'Select * From Personas Where id_personas = '+personas;
   Query1.Open;
   Combobox1.Text := Query1.Fields[0].AsString;
end;

en el ComboBox pueden agregarse mas de 1 personas, para que posteriormente se graben su id_personas en la tabla Asignaciones (id_personas).

Por cierto me marca un error:
Invalid use of keyword.
Token:=
Line Number 1'

Última edición por Goyo fecha: 13-12-2006 a las 22:21:37.
Responder Con Cita
  #4  
Antiguo 13-12-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola Goyo
Recuerda que en delphi se puden poner nombres diferentes a los componentes, el nombre es lo de menos, es simplemente un idetificador, ademas de ser bueno usarlos para referencias, si usas un query temporal, es bueno llamarlo TemQuery o Tquery, asi cuando se ve el codigo se interpreta mejor.
Efectivamente el AQTemp es un query normal.
Ahora yo le pongo asi, porque uso ado, entonces me guio mejor poniento A de ADO, Q de Query y Temp de temporal.
Es solo una manera de guiarme.
Que bueno que te funcione.
Saludos
Responder Con Cita
  #5  
Antiguo 13-12-2006
Avatar de Goyo
Goyo Goyo is offline
Miembro
 
Registrado: feb 2006
Posts: 89
Poder: 19
Goyo Va por buen camino
Unhappy

ya te entendi Caral, solo que cuando pulso el boton agregar (obviamente tengo que tener seleccionado un elemento del dbgrid) me marca el siguiente error:

Invalid use of keyword.
Token:=
Line Number 1'


el AQTemp (Query) en su propiedad DataSource = DM.DsPersonas
que es la tabla que muestro en el DBGrid
Responder Con Cita
  #6  
Antiguo 13-12-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola Goyo
Aqui me parece que pueden estar pasando varias cosas:
1-El dato id_personas , no es string, es integer.
2-Lo que quieres es el dato Titular, que te da el nombre, ese es string.
Bueno veamos soluciones:
1- Si quieres el dato id_personas en el combobox, cambia astring por value o asInteger, pero tambien la variable la tienes que cambiar.
Código Delphi [-]
 var
 personas: integer;
begin
   AQTemp.SQL.Text := 'Select * From Personas Where id_personas = '+personas;
   AQTemp.Open;
   Combobox1.Text := AQTemp.Fields[0].Value;
2-Si quieres el dato titular, esta en segundo plano en la tabla, segun veo:
id_personas (1), Titular (2), Cargo (3)
por esta razon se ubica en 1 no en cero.
Código Delphi [-]
 var
 personas: string;
begin
   AQTemp.SQL.Text := 'Select * From Personas Where Titular = '+personas;
   AQTemp.Open;
   Combobox1.Text := AQTemp.Fields[1].AsString;
Prueba y me dices
Saludos
Responder Con Cita
  #7  
Antiguo 13-12-2006
Avatar de Goyo
Goyo Goyo is offline
Miembro
 
Registrado: feb 2006
Posts: 89
Poder: 19
Goyo Va por buen camino
mira Caral, en efecto id_personas es de tipo Integer (autonumerico), Titular y Cargo son de tipo String,

el codigo lo escribi segun lo indicado...

Código Delphi [-]
procedure TFormCaptura.BitBtnAgregarClick(Sender: TObject);
 var
 personas: string;
begin
   AQTemp.SQL.Text := 'Select * From Personas Where id_personas = '+personas;
   AQTemp.Open;
   ComboBox1.Text := AQTemp.Fields[2].AsString;
end;

y realmente lo que quiero en el ComboBox es que me aparezcan los datos del Titular.

y me sigue mostrando el mismo error:
Invalid use of keyword.
Token:=
Line Number 1'


gracias por el momento..
saludos..
Responder Con Cita
  #8  
Antiguo 13-12-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola Goyo
No es lo correcto, ve la diferencia:
Lo que as puesto:
Código Delphi [-]
procedure TFormCaptura.BitBtnAgregarClick(Sender: TObject);
 var
 personas: string;
begin
   AQTemp.SQL.Text := 'Select * From Personas Where id_personas = '+personas;
   AQTemp.Open;
   ComboBox1.Text := AQTemp.Fields[2].AsString;
end;
Aqui estas haciendo alucion al dato Cargo, que esta en la tercera posicion osea 2
Tienes que hacerlo asi:
Código Delphi [-]
procedure TFormCaptura.BitBtnAgregarClick(Sender: TObject);
 var
 personas: string;
begin
   AQTemp.SQL.Text := 'Select * From Personas Where id_personas = '+personas;
   AQTemp.Open;
   ComboBox1.Text := AQTemp.Fields[1].AsString;
end;
Esta es la linea clave:
Código Delphi [-]
 ComboBox1.Text := AQTemp.Fields[1].AsString;
Osea para que lo entiendas:
(0)= id_personas
(1)= Titular
(2)= Cargo
asi trabaja esto, de todos modos no entiendo por que te da ese error, intenta haciendolo asi.
Otro problema puede ser que no entienda la variable, si sigue el problema lo atacamos por otro lado, pero este no nos vence.
Saludos
Responder Con Cita
  #9  
Antiguo 13-12-2006
Avatar de Goyo
Goyo Goyo is offline
Miembro
 
Registrado: feb 2006
Posts: 89
Poder: 19
Goyo Va por buen camino
Unhappy

mira te voy a explicar de otra manera: pongo el codigo tal como me lo indicaste:

Código Delphi [-]
procedure TFormCaptura.BitBtnAgregarClick(Sender: TObject);
 var
 personas: string;
begin
   AQTemp.SQL.Text := 'Select * From Personas Where id_personas = '+personas;
   AQTemp.Open;
   ComboBox1.Items.Text := AQTemp.Fields[1].AsString;
end;

me marca el mismo error:
Invalid use of keyword.
Token:=
Line Number: 1'


No entiendo porque el error, si lo hago tal como me lo indicas...
otra cosa, el AQTemp en su propiedad DataSource le asigno DM.DsPersonas
en el DBGrid solo muestro el campo Titular (de la tabla Personas), este es de tipo String (Char en MySQL), en el componente AQTemp es lo unico que le hago poner el DataSource=DM.DsPersonas...

gracias Caral por tu ayuda... y seguire intentandolo, de antemano que tengas un buen día...
saludos y felices fiestas

Última edición por Goyo fecha: 13-12-2006 a las 23:56:10.
Responder Con Cita
  #10  
Antiguo 14-12-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Bueno intentemos un truco:
El dbgrid, esta conectado a una tabla o query, entonces, contiene los datos.
Pon un DBEdit en el form y asignale en datasource del dbgrid.
Asignale al dbedit el campo id_personas .
Bueno ya estara biendo ese dbedit, el campo id_personas segun se cambia o recorre el dbgrid.
Entonces, pon este codigo en el boton:
Supongamos que el DBEdit se llama DBEDit1:
Código Delphi [-]
procedure TFormCaptura.BitBtnAgregarClick(Sender: TObject);
// var
// personas: string;
begin
   AQTemp.SQL.Text := 'Select Titular From Personas Where id_personas = '+DBEdit1.Text;
   AQTemp.Open;
   ComboBox1.Items.Text := AQTemp.Fields[0].AsString;
end
Analizalo bien, hice varios cambios, si quieres estar seguro copialo y pegalo.
Deberia funcionar, ahora en vez de buscar una variable, buscara un campo igual al dbedit1.
La razon por la que no camina es por que hay tres campos en la tabla y estas queriendo ver solo uno, diciendo al sql, que te de todos, por hai va la cosa.
saludos
Responder Con Cita
  #11  
Antiguo 14-12-2006
Avatar de Goyo
Goyo Goyo is offline
Miembro
 
Registrado: feb 2006
Posts: 89
Poder: 19
Goyo Va por buen camino
Question pasar de un dbgrid a un listbox, solo que me borra la linea insertada

Caral:

Te comento que el error era que en el DataSource tenia DM.DsPersonas y no erá así, en la propiedad DataBaseName puse el alias correspondencia1 (asi se llama el alias del sistema de correspondencia, y si funcionó.....

gracias por tu ayuda, por fin logre que se agreguen los datos del DBgrid a un ComboBox al igual que a un Memo, solo que ahora cada vez que pulso el boton agregar, me elimina el que ya estaba insertado en el ComboBox, como hacerlo para que se vayan agregando al ComboBox las personas, sin que borre la que ya esta agregada... pongo el codigo para veas como quedo:

Código Delphi [-]
procedure TFormCaptura.BitBtnAgregarClick(Sender: TObject);
begin
   AQTemp.SQL.Text := 'Select Titular From Personas Where id_personas = '+DBEdit6.Text;
   AQTemp.Open;
   ComboBox1.Items.Text := AQTemp.Fields[0].AsString;
   memo1.Text:= AQTemp.Fields[0].AsString;
end;

tambien lo puse en un Memo1 para checar el problema, y creo que es mejor, porque de ahi se ven las personas que ya estan en la lista.

saludos...

Responder Con Cita
  #12  
Antiguo 14-12-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola Goyo
Me alegro que te sirva
Recuerda siempre la sentencia que usas.
Si usas text, pues es eso texto o poner en.
Si usas ADD, Pues que hace, añade.
Si cabias la sentencia por esto, te añadira lo que quieres al combobox.
Código Delphi [-]
procedure TFormCaptura.BitBtnAgregarClick(Sender: TObject);
begin
   AQTemp.SQL.Text := 'Select Titular From Personas Where id_personas = '+DBEdit6.Text;
   AQTemp.Open;
   ComboBox1.Items.ADD (AQTemp.Fields[0].AsString);
   memo1.Text:= AQTemp.Fields[0].AsString;
end;
Fijate bien en los cambios, asi aprendemos los dos.
Saludos
Responder Con Cita
  #13  
Antiguo 14-12-2006
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Código Delphi [-]
procedure TFormCaptura.BitBtnAgregarClick(Sender: TObject);
begin
   AQTemp.SQL.Text := 'Select Titular From Personas Where id_personas = '+DBEdit6.Text;
   AQTemp.Open;
   ComboBox1.Items.add(AQTemp.Fields[0].AsString);
   memo1.lines.Add(AQTemp.Fields[0].AsString);
end;

Saludos.
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo


Última edición por yusnerqui fecha: 14-12-2006 a las 20:07:12.
Responder Con Cita
  #14  
Antiguo 14-12-2006
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Yo lo que no entiendo realmente es por qué hacer otra consulta, si he entendido bien los datos se muestran en un dbgrid, es decir ya hay un componente TDataset apuntando a esa tabala de la base de datos, pues yo simplemente pondría:

Código Delphi [-]
 //Suponiendo que el dataset que "alimenta" al debgrid se llame DSPersonas
  ComboBox1.Items.add(DSPersonas.FieldByName('Titular').AsString);
  memo1.lines.Add(DSPersonas.FieldByName('Titular').AsString);

Saludos
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

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 codigo DBGrid a cxGrid, seleccionar una fila y cambiar el color, no desapareser sakuragi OOP 13 11-02-2006 10:02:07
pasar mouse por dbgrid o cxgrid y colorear fila sakuragi Gráficos 0 06-08-2005 01:37:56
pasar de listbox a clipboard lastfenix OOP 4 14-07-2005 09:50:50
Pasar datos desde un DBGrid jdangosto OOP 2 19-02-2005 16:55:37
Pasar enfoque de Celdas en dbGrid AGAG4 Varios 9 15-09-2004 02:00:30


La franja horaria es GMT +2. Ahora son las 19:29:11.


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