Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta Sobre Query SQL y DBLookUpListBox en Paradox (https://www.clubdelphi.com/foros/showthread.php?t=56121)

Emilio_82 07-05-2008 23:30:32

Consulta Sobre Query SQL y DBLookUpListBox en Paradox
 
Estoy ante el siguiente problema. Necesito mediate un DBLookUpListBox mostrar los proveedores asignados a un articulo en especial tengo 3 tablas de Paradox que estan en un directorio. Los paths estan todos correctos.

Articulos.DB - Proveedores.DB - ArtXProv.DB (en esta ultima, estan las Primary Key de cada una de las tablas anteriores, es decir es la tabla que x cada tupla representa un articulo y un proveedor (Nro_Art, Nro_Proveed))

En el form tengo para cada tabla su correspondiente Data Source y una Query llamada Q_Nom_Proveedores con su Data Source

En ella tengo en el campo SQL la siguiente SQL:
Código SQL [-]
SELECT Nro_Proveed FROM ArtXProv.DB
WHERE Nro_Art >0 AND Nro_Art = :Fk_art
Supuestamente esto devuelve para un valor de Fk_art los proveedores asignados a ese Articulo. No? Corrijanme si me equivoco.

En params le Puse que Fk_Art es Integer con value 1 o sea esta todo.


Ahora en el DBLookUpListBox esta seteado asi:
DataField = Nro_Proveed
DataSource = Dsc_Q_Nom_Proveed
KeyField = Nro_Proveed
ListField = Nombre_Proveed
ListSource = Dsc_Proveedores

Pasa que el DBLookUpListBox me muestra todos los proveedores, y no los proveedores asignados al articulo en ese momento. ¿Que puede estar fallando? :confused:

Nota: Aclaro que fk_art esta declarado en PUBLIC y que su valor cambia cada vez que elijo dentro del form un articulo desde la tabla Articulos.DB donde tomo el valor del Nro_Art

coso 08-05-2008 00:32:16

A ver...
los valores del DBLookUpComboBox

DataSource := donde se cambiaran los datos
DataFields := campos q se variaran

ListSource := desde donde se rellenan la list (debe ser diferente del anterior o sino habria referencia circular)
ListFields := campos a representar

KeyField := el campo que realmente se pasara de una a otra.

creo q tienes las dos sources intercambiadas

Emilio_82 08-05-2008 02:18:42

Cita:

Empezado por coso (Mensaje 285128)
A ver...
los valores del DBLookUpComboBox

DataSource := donde se cambiaran los datos
DataFields := campos q se variaran

ListSource := desde donde se rellenan la list (debe ser diferente del anterior o sino habria referencia circular)
ListFields := campos a representar

KeyField := el campo que realmente se pasara de una a otra.

creo q tienes las dos sources intercambiadas

Eso ya lo sabia :) coso, pero no tengo los sources intercambiados y y tampoco es un LookUpComboBox sino un LookUpListBox, que son mas o menos iguales.:D

Mas datos para que se entienda:
Esta es la estructura de la tabla ArtXProv.db con algunas tuplas (registros)
+---------+-------------+
¡.Nro_Art...¡ Nro_Proveed.¡
+---------+-------------+
¡ .............................
¡ .............................
¡ .............................
+---------+-------------+
La SQL de la Query Q_Nom_Proveedores debe devolver, (por ejemplo para fk_art = 1):
+--------------+
¡..Nro_Proveed. ¡
+--------------+
¡...................
¡...................
+--------------+

Entonces Si por ejemplo Nom_Proveedores(el campo a mostrar en el LookUpListBox de la BD Proveedores.db) es para 1: Nike, 2: Adidas; 3: Topper

el DBLookUpListBox, Deberia mostrar en panatalla SOLAMENTE

+--------------+
¡..NIKE.............¡
¡..TOPPER.........¡
+--------------+

Pero Muestra:

+--------------+
¡..NIKE.............¡
¡..ADIDAS.........¡
¡..TOPPER.........¡
+--------------+

Ese es mi problema;)
Nota: fk_art es la que se compara en la setencia SQL con Nro_Art
Q_Nom_Proveedores tiene como DataSource a ArtXProv.db O sea que no hay referencia circular

coso 08-05-2008 11:05:47

Entonces la sentencia SQL de filtro la debes aplicar a la tabla de DSC_proveedores, no? estos son los que te apareceran en la lista

Lepe 08-05-2008 17:05:43

Yo lo que no entiendo es de donde sale:

ListField = Nombre_Proveed

Yo al menos, lo resolvería así:
Código SQL [-]
SELECT A.Nro_Proveed, P.Nombre_Proveed FROM ArtXProv A
INNER JOIN Proveedores P on P.Nro_Proveed = A.Nro_Proveed
WHERE Nro_Art >0 AND Nro_Art = :Fk_art
.

Esa es la consulta del lookupList.ListSource, automáticamente obtienes el código y nombre del proveedor para mostrar.


Supongo que ahora mismo te aparece el "ADIDAS" porque se necesitaría una relación maestra-detalle que no está formada, pero vamos, que creo más simple la consulta que indico.

Saludos

Emilio_82 08-05-2008 23:29:39

Gracias Lepe, no habia probado hacer un JOIN. Ahora funciona


La franja horaria es GMT +2. Ahora son las 11:52:49.

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