Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Como selecciono datos de otra tabla (https://www.clubdelphi.com/foros/showthread.php?t=13177)

juziel 09-08-2004 20:09:24

Como selecciono datos de otra tabla
 
Hola a todos

Necesito de su ayuda, estoy haciendo un pequeño programa en delphi 6 y firebird 1.5, tengo varias tablas en una tengo las claves de productos y los datos de estos productos (clave, descripcion, unidad, etc.) en otra tabla tengo (clave_vendedor, nombre, etc) y en otra tengo (id_vendedor, id_producto, cantidad, etc). Quiero hacer una consulta que seleccionando de un dbcombo al vendedor en el dbgrid aparezcan la clave del producto, la cantidad, etc. Como le hago?

gracias de antemano

Neftali [Germán.Estévez] 10-08-2004 09:31:13

Cita:

Empezado por juziel
... tengo varias tablas en una tengo las claves de productos y los datos de estos productos TABLA1 (clave, descripcion, unidad, etc.) en otra tabla tengo TABLA2(clave_vendedor, nombre, etc) y en otra tengo TABLA3(id_vendedor, id_producto, cantidad, etc). Quiero hacer una consulta que seleccionando de un dbcombo al vendedor en el dbgrid aparezcan la clave del producto, la cantidad, etc. Como le hago?

Se trata de "enganchar" al grid un TQuery/TIBQuery y configurarle una SQL que te haga la JOIN de las tres tablas. Lo importante es tener claro cómo las tienes relacionadas; Sería algo así (te lo pongo de memeria, así que si hay algún error me avisas...)

NOTA: Te pongo todos los datos en el SELECT para que lo veas más claro, luego tú puedes eliminar los que no te interesen.

Código SQL [-]
select tabla1.clave, tabla1.descripcion, tabla1.unidad,
tabla2.clave_vendedor, tabla2.nombre,
tabla3.id_vendedor, tabla3.id_producto, tabla3.cantidad
from 
((tabla3.id_producto inner join tabla1.clave on tabla3.id_producto)
  inner join tabla2 on tabla2.clave_vendedor=tabla3.id_vendedor)

juziel 10-08-2004 17:58:21

gracias por responder, voy a probarlo y luego te cuento si funciona, estoy utilizando FIBPlus. Gracias de nuevo

juziel 11-08-2004 01:36:03

no funciono como dices me daba algunos errores

Código SQL [-]
select tabla1.clave, tabla1.descripcion, tabla1.unidad,
tabla2.clave_vendedor, tabla2.nombre,
tabla3.id_vendedor, tabla3.id_producto, tabla3.cantidad
from 
((tabla3.id_producto inner join tabla1.clave on tabla3.id_producto)
inner join tabla2 on tabla2.clave_vendedor=tabla3.id_vendedor)
en vez de eso hice esto
Código SQL [-]
select tabla1.clave_producto, tabla1.descripcion, tabla1.unidad,
tabla2.clave_vendedor, tabla2.nombre,
tabla3.id_vendedor, tabla3.id_producto, tabla3.cantidad
from 
((tabla3 inner join tabla1 on tabla3.id_producto = tabla1.clave_producto)
inner join tabla2 on tabla2.clave_vendedor=tabla3.id_vendedor)
el problema es que me aparecen todas las claves de los vendedores y yo quiero que aparezcan solo las claves de los productos del vendedor seleccionado en un DblookUpcombo

gracias

Rufus 11-08-2004 10:06:30

Tu consulta está bien, sólo te falta un WHERE especificando qué es concretamente lo que quieres seleccionar dentro de ese conjunto que has creado.

Lo mejor es hcerlo con un parámetro.

Código SQL [-]
...WHERE tabla2.nombre = :vendedor

y antes de lanzar la consulta, en el evento OnChange del DBCombobox, hacer:

Código:

DataSet.ParamByName('vendedor').AsString := DBComboBox.Text;
  Dataset.Close;
  Dataset.Open;


Neftali [Germán.Estévez] 11-08-2004 10:11:35

Cita:

Empezado por juziel
no funciono como dices me daba algunos errores...

Ok, se me escapó el nombre del campo dónde no debía.:p

Cita:

Empezado por juziel
...el problema es que me aparecen todas las claves de los vendedores y yo quiero que aparezcan solo las claves de los productos del vendedor seleccionado en un DblookUpcombo

Una vez que los tienes todos lo que te queda es añadir un WHERE para filtrar sólo los datos que te interesan. Si quieres filtrar por un ID_vendedor, deberás añadir al final de la sentencia algo así:

Código SQL [-]
...vendedor=tabla3.id_vendedor) WHERE tabla3.id_vendedor = 1234

Si además quieres añadir una ordenación deberás añadir un ORDER BY:

Código SQL [-]
...vendedor=tabla3.id_vendedor) WHERE tabla3.id_vendedor = 1234 ORDER BY tabla3.id_vendedor

Haz algunas pruebas añadiendo diferentes campos y valores al WHERE.

juziel 12-08-2004 16:31:35

gracias a amigos por su ayuda


La franja horaria es GMT +2. Ahora son las 22:44:43.

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