PDA

Ver la Versión Completa : Consulta Sobre Query SQL y DBLookUpListBox en Paradox


Emilio_82
07-05-2008, 23:30:32
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:

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
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.¡
+---------+-------------+
¡ ...........1¡..................1¡
¡ ...........1¡..................3¡
¡ ...........2¡..................2¡
+---------+-------------+
La SQL de la Query Q_Nom_Proveedores debe devolver, (por ejemplo para fk_art = 1):
+--------------+
¡..Nro_Proveed. ¡
+--------------+
¡...................1¡
¡...................3¡
+--------------+

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

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