PDA

Ver la Versión Completa : Como selecciono datos de otra tabla


juziel
09-08-2004, 20:09:24
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
... 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.


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


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

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.

...WHERE tabla2.nombre = :vendedor

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

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

Neftali [Germán.Estévez]
11-08-2004, 10:11:35
no funciono como dices me daba algunos errores...
Ok, se me escapó el nombre del campo dónde no debía.:p


...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í:


...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:


...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