Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Combinar Dos Dblookupcombobox (https://www.clubdelphi.com/foros/showthread.php?t=90477)

donpedro 17-06-2016 21:27:34

Combinar Dos Dblookupcombobox
 
Hola a todos y muchas bendiciones

Estoy realizando un modulo de Inscripción de Estudiantes en Delphi 2009 con MySql, mi duda es la siguiente:

La tabla inscripción contiene tres campos que se alimentan de tres tablas diferentes, estas tablas son:



Ahora aqui le presento el modulo de inscripción donde contiene 3 DbLookUpCombobox (SERVICIO / TANDA, GRADO, SECCIÓN) que se van a llenar de esas tres tablas



Explico, UN SERVICIO puede tener varios GRADOS y UN GRADO puede tener VARIAS SECCIONES

Lo que quiero hacer es que cuando yo seleccione UN SERVICIO me muestre en el otro dblookupcombobox los grados que están asignados al servicio seleccionado.

De la misma forma cuando seleccione UN GRADO me muestre en el otro dblookupcombobox las SECCIONES que le han sido asignadas a ese GRADO.

espero haberme explicado, y espero sus respuestas, agradeciendo de antemano, cualquier ayuda brindada.

rocksoft 17-06-2016 22:18:43

Buenas,

puedes usar en Dblookupcombobox el metodo onchange, o del datasource ondatachange.

create 3 Tquery

Q_Servicio
creas los parametros SQL Select * from Servicio (al modificar aqui algo disparas el onchange para el sql de Q_Grado)


Q_Grado le asignas el Masterdatasource de tu tabla Q_Servicio, masterfield el Servicios_ID (al modificar aqui algo disparas el onchange para el sql de Q_Seccion)
creas los parametros SQL: Select * from grado where servicio_id = :servicio_id

Q_Seccion y lo mismo de como en grado pero con la seccion.

en teoria deberia de funcionar :)

donpedro 17-06-2016 22:53:20

Hola Rocksoft
lei tu comentario y le he buscado la vuelta, pero no entiendo que debo hacer,

AgustinOrtu 17-06-2016 23:31:18

Lo que apunta rocksoft me parece correcto

Podes usar cualquiera de los dos eventos que el te comenta (TDBLookupComboBox.OnChange, o bien TDataSource.OnDataChange)

Estos eventos se disparan cuando cambia el registro seleccionado

Luego es cuestion de traer de la otra tabla, por ejemplo GRADOS, todos los Grados que cumplan que GRADOS.Servicios_Id = SERVICIOS.Servidios_Id

Eso lo haces usando una consulta o query SQL

Asi que lo que debes hacer es, crear un componente query, realizar la consulta y asignar ese DataSet al TDBLookupComboBox que estas usando para seleccionar Grados

donpedro 17-06-2016 23:49:19

AgustinOrtu hola, excusa mi ignorancia, a cual datasource en el evento ondatachange debo colocarle el codigo, al datasource de servicios o grados????

AgustinOrtu 18-06-2016 00:12:58

De acuerdo a lo que comentaste mas arriba, a ambos:

El TDataSource de Servicios va a disparar el evento cuando selecciones un Servicio: en ese momento cargas la tabla de Grados

Osea que en el TDataSource de Servicios, en el evento OnDataChange deberias poner el codigo para llenar la tabla de Grados

Cuando seleccionen un Grado, se va a disparar el evento para que llenes la tabla de Secciones

Osea que en el TDataSource de Grados, en el evento OnDataChange deberias poner el codigo para llenar la tabla de Secciones

donpedro 18-06-2016 00:30:04

AgustinOrtu, hola

no me ha funcionado, no se si lo hice mal............si podrias hacer un ejempo, lo agradeceria mucho,, o si no tendre que trucear el programa
quizas agregando un edit que me capture el id de servicios, y luego hacer la comparacion con ese edit.

AgustinOrtu 18-06-2016 00:35:11

Muestra el código y si da error cual y donde ocurre

donpedro 18-06-2016 00:52:10

HOla, mira lo que tuve que hacer.........

en el evento Onclick del Dblookupcombobox correspondietne a SERVICIOS coloque el siguiente codigo

Código Delphi [-]
edit1.Text:=inttostr(fmodulo.T_Servicios.FieldByName('servicios_id').AsInteger);

with fmodulo do
begin
q_generico.close;
q_generico.SQL.Clear;
q_generico.SQL.Add('select * from grados where servicios_id='+edit1.Text +'');
q_generico.Open;



end;

Le paso al edit1 el id de servicios que selecciono, luego con la consulta comparo el id de servicio de la tabla GRADOS con el numero que esta en el edit1. y asi me funciona..............un poco truqueao...que creen

AgustinOrtu 18-06-2016 01:27:06

Y como habias hecho antes que te daba error/no funcionaba? Eres el segundo hoy que le recomiendo que use parametros en sus comandos SQL

Creo que me voy a hacer una placa como la de Casimiro de los Tags :)

rocksoft 20-06-2016 16:20:14

Buenas,

Código Delphi [-]
edit1.Text:=inttostr(fmodulo.T_Servicios.FieldByName('servicios_id').AsInteger);

aparte de lo que te menciona AgustinOrtu, dos cositas si ya que haces lo de arriba en asignar un valor a un edit, lo que no es elegante ni tiene mucho sentido, mejor lo haces de esta manera:
Código Delphi [-]
var s:string
..
s:=fmodulo.T_Servicios.FieldByName('servicios_id').AsString

lo segundo no uses el evento onclick, cada vez que pinches el Dblookupcombobox se dispara el codigo del query, usa como mencionando en el primer post:
Cita:

puedes usar en Dblookupcombobox el metodo onchange, o del datasource ondatachange.

Casimiro Notevi 20-06-2016 16:30:54

Cita:

Empezado por AgustinOrtu (Mensaje 506328)
Creo que me voy a hacer una placa como la de Casimiro de los Tags :)

^\||/^\||/^\||/


La franja horaria es GMT +2. Ahora son las 18:20:04.

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