Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta sencilla entre 3 tablas (https://www.clubdelphi.com/foros/showthread.php?t=89898)

GUN10 25-02-2016 21:30:32

Consulta sencilla entre 3 tablas
 
Hola buenas tardes!

Quisiera saber si me pueden ayudar con la siguiente consulta.
Tengo las siguientes tablas con los siguientes campos

usuarios (dni_usuario, nombre, apellido, direccion)
perfiles (cod_perfil, administrador, operador, tecnico)
perfiles_usuarios (dni_usuario, cod_perfil)


tengo en un combobox cargado todos los registros de la tabla perfiles y lo que quiero hacer es que cuando seleccione un perfil, me muestre todos los usuarios que tiene ese perfil. por ejemplo todos los administradores.

estoy dudando si es que la relacion de las tablas o el planteo esta bien hecho, aunque leyendo y buscando creo que es asi como deberia ser definida.

lo que no logro definir es la consulta en sql para lograr recuperar esos registros

kapcomx 25-02-2016 22:37:21

ke tal amigo, mas que un combobox yo te recomendaria usar un dblookupcombobox. con este es mas facil recuperar el id de la tabla que le asignes.

una vez teniendo este control definido en su evento on click armas la consulta


algo mas o menos asi

Código Delphi [-]
algunavariable:= dblookupcombobox1.keyvalue;
filtro:= 'select * from usuario, rol, usuario_rol where usuario_rol.id_usuario = usuario.id_usuario and usuario_rol.id_rol = rol.id_rol  and usuario.id_usuario ='+ inttostr(algunavariable);

data.Close;
  data.SQL.clear;
  data.SQL.Text:= filtro;
  data.ExecSQL;

espero te sirva...

GUN10 26-02-2016 04:17:02

Muchas gracias por la respuesta kapcomx !

Efectivamente si estaba usando un DBLookUpComboBox. Utilice el codigo que pongo a continuacion, como el que vos me pasaste y funciona (porque lo probe en phpmyadmin) pero el problema es que no me esta mostrando en el DBGrid. Que me estaria faltando?
El DBGrid por defecto esta asociado a otra, que es la tabla usuarios, por eso agrego esta linea

Código Delphi [-]
DBGusuarios.DataSource:= Datos.DSconsultasusuarios;

Código Delphi [-]
      Datos.Qconsultasusuarios.Close;
      Datos.Qconsultasusuarios.SQL.Clear;
      Datos.Qconsultasusuarios.SQL.Add('select usuarios.nombre, usuarios.apellido, perfiles.nombre from usuarios, perfiles,        perfiles_usuarios where perfiles_usuarios.dni_usuario=usuarios.dni_usuario and perfiles_usuarios.cod_perfil=perfiles.cod_perfil and    perfiles.cod_perfil='+QuotedStr('*'+CBperfiles.GetKeyValue+'*'));
      Datos.Qconsultasusuarios.Open;
      DBGusuarios.DataSource:= Datos.DSconsultasusuarios;

Muchas gracias por tu ayuda!!

GUN10 26-02-2016 04:55:50

Problema solucionado !!

Mi error estaba en la sintaxis del codigo SQL.
El codigo correcto para la consutla es el siguiente!

Código SQL [-]
Datos.Qconsultasusuarios.SQL.Add('select usuarios.nombre, usuarios.apellido, perfiles.nombre 
from usuarios, perfiles, perfiles_usuarios 
where perfiles_usuarios.dni_usuario=usuarios.dni_usuario 
         and perfiles_usuarios.cod_perfil=perfiles.cod_perfil 
         and perfiles.cod_perfil='+CBperfiles.GetKeyValue+'');

Muchas gracias nuevamente por tu ayuda kapcomx!! :D:D

kapcomx 26-02-2016 06:25:36

x nada amigo GUN10, da gusto saber que puedo ayudar a alguien asi como ami me han ayudado bastante en este grupo.

Saludos...


La franja horaria es GMT +2. Ahora son las 14:03: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