• Sábado 27 de Abril de 2024, 23:24

Autor Tema:  Dblookcombobox Anidado  (Leído 3136 veces)

VeRaCrUzAnItO-10-

  • Miembro activo
  • **
  • Mensajes: 88
    • Ver Perfil
Dblookcombobox Anidado
« en: Miércoles 10 de Enero de 2007, 19:14 »
0
Hola,

Tengo mi dblookcombobox el cual ya esta configurado y me muestra los datos a la perfección, pero tengo otro segundo combobox el cual se debe actualizar conforme al ya mencionado , por ejemplo si dblookcombobox seleccionar Veracruz en el otro deberan de aparecer sus ciudades.

Lo que estoy haciendo es sobre la acción click jalar el keyvalude de esta manera:

Código: Text
  1. procedure Tcrear_exa.DBLookupComboBox1Click(Sender: TObject);
  2.   var i: integer;
  3. begin
  4.   i:=DBLookupComboBox1.KeyValue;
  5.  
  6. end;
  7.  

la idea q tengo q una vez seleccionado i hacer una siguiente consulta para mostrar los datos en el otro combox, pero me marca error de compatibilidad. Estoy acostumbrado a trabajar con java y php, que no requieren tanto para hacer estas cosas, pero en delphi ando perdido.

Otra forma que intente es con un combox, llenaba el combox al crear la forma y todo perfecto, sobre ese mismo me iba a las acciones y le daba en en clikc y ahi metia esre código

Código: Text
  1. combobox2.Items.Add(ModuloEasyExa.ADOQuery1.SQL.Text:='select t1.NombreTema from TemaExp as t1 , experienciae as t2 where NombreExp='+Combobox1.Text+' and t1.idExperienciaE=t2.idExperienciaE');
  2.  

pero al igual marcaba error, no le doy la verdd y no se como hacerle, si alguie sabe de alguna manual o como hacerlo se lo agradeceria de antemano.

juanlaplata

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Dblookcombobox Anidado
« Respuesta #1 en: Jueves 11 de Enero de 2007, 14:35 »
0
Bueno aqui vamos.
en primer lugar creo que al ADOQuery le debes definir un parametro, en esta caso ComboBox.Text , creo que asi nomas no entra el dato.


ADOQuery1.Parameters.ParamByName('aux').asString:= Combox.Text;

combobox2.Items.Add(ModuloEasyExa.ADOQuery1.SQL.Text:='select t1.NombreTema from TemaExp as t1 , experienciae as t2 where NombreExp= :aux and t1.idExperienciaE=t2.idExperienciaE');

Igualmente vemos la otra forma.
supuestamente tienes dos tablas. Ejemplo

T1=(idT1, Nombre1)
T2=(idT2, Nombre2, idT1)

DBLookUpComboBox1 relacionado con T1
DBLookUpComboBox2 relacionado con T2

Cuando tu haces Click en  DBLookUpComboBox1 no hace mas falta que filtrar T2
con KeyValue recuperado en esta click.
Entonces DBLookUpComboBox1.KeyValue va a ser idT1
codigo:
T2.Filtered:=false;
T2.Filter:='idT1 = '+IntToStr(DBLookUpComboBox1.KeyValue);
T2.Filtered:=True;

Y automaticamente tendrias que ver de T2 solo lo relacioando con T1 mediante su id.
Espero te sirva y mucha suerte.

VeRaCrUzAnItO-10-

  • Miembro activo
  • **
  • Mensajes: 88
    • Ver Perfil
Re: Dblookcombobox Anidado
« Respuesta #2 en: Viernes 12 de Enero de 2007, 18:10 »
0
loco eres un geniooooooooooooooooooooo!!!!!! muchas gracias caon!! funciona a la perfección!!.

Bueno si alguien anda en la misma bronca aqui les dejo mi código :

Código: Text
  1.  
  2. procedure Tcrear_exa.DBLookupComboBox1Click(Sender: TObject);
  3.  
  4. showmessage(DBLookupComboBox1.KeyValue);//solo es para mostrar el id que seleccione
  5. ModuloEasyExa.AdoTema.Filtered:=false;
  6.    ModuloEasyExa.AdoTema.Filter:='idExperienciaE='+IntToStr(DBLookUpComboBox1.KeyValue);
  7.       ModuloEasyExa.AdoTema.Filtered:=true;
  8.  
  9. end;// nuestro modulo de datos+adoTable y los parametros.
  10.  
  11.  

"idExperienciaE" es el campo de la base de datos que filtra!!.

Sale muchas gracias!!!!

ushedipe

  • Miembro activo
  • **
  • Mensajes: 37
    • Ver Perfil
Re: Dblookcombobox Anidado
« Respuesta #3 en: Martes 24 de Abril de 2007, 21:06 »
0
:comp: pues por si después de tanto tiempo sirve... aquí va!!!

yo lo que usualmente hago es que en el evento onexit del primer dblcbox, ejecuto la cosulta que me filtra la información que necesito mostrar en el segundo dblcbox; se debe tener en cuenta que los tipos de datos deben ser los mismos, es decir que si el keyvalue del primero (con el cual se ejecuta la segunda consulta) sea del mismo tipo del dato por el cual se ejecutará la consulta que llenará el segundo dblcbox.

espero sea util! :ph34r: