PDA

Ver la Versión Completa : Filtro por selección en dbGrid.


setry2
19-10-2004, 17:07:22
Hola a todos,

A ver si esto se puede hacer de alguna forma. Tengo un dbGrid donde muestro una query entre varias tablas de una bd Access. Estoy haciendo para el dbGrid el mismo sistema de filtrado que tienen las tablas access cuando hacemos click con el botón derecho en una celda y se selecciona "Filtro por selección" para filtrar todos los registros por ese campo y por ese valor.

Al hacer click cojo el nombre del field, el valor y el tipo de dato que contiene y creo la condición de la qry para hacer el filtro. El problema viene porque la qry es sobre tablas que tienen campos que se llaman igual, y al contruir la condición y ejecutar la query, me da el mensaje de que el nombre del campo se encuentra en varias tablas del from.

Lo que estoy intentando ahora es cojer el nombre de la tabla en que se encuentra el campo, pero no se si esto se puede. El nombre de la tabla aparece en la qry. ¿sabéis como se puede hacer esto?

Otra solución es cambiar el nombre de los campos que coinciden, pero son tablas que intervienen en muchos sitios y quiero ver otra opción antes.

Bueno, muchas gracias de antemano a todos.

Un saludo.

Pablo Carlos
20-10-2004, 00:45:50
Hola... no trabajo con access pero en paradox hago lo siguiente (quizas se pueda en access o al menos podría ser un comienzo)


Fac.Acuenta,
Fac.Saldo,

Fac.id_Factura

From Reparacion.db Rep,

Facturas.db Fac


Cuando tengo campos con igual nombre en otra tabla y necesito traer ambos campos renombro los campos en el query como te muestro en el ejemplo. Lo que resalté en rojo lo agregué en el query y de esa manera identifico que "saldo" por ejemplo corresponde a la tabla de Facturas
Saludos

setry2
20-10-2004, 09:38:48
Muchas gracias Pablo, pero el problema esta al construir la condicion de la qry, que no se como especificar desde el grid a que tabla pertenece el campo.

Cuando filtro por el contenido (valor) de una celda (campo) del grid, añado a la condicion lo siguiente:

Where campo like valor,

variando la construcción según el tipo de dato de valor. El problema esta cuando filtro por un campo que se llama igual en varias tablas de las que utilizo en esa misma query, que para que funcione la condición debería aparecer la tabla a la que pertenece el campo:

Where tabla.campo like valor

Es el nombre de la tabla el que intento acceder directamente desde el grid para añadirlo a la condición y no me de problemas al filtrar, pero no se si eso es posible.

Seguimos la pista a ver.

Un saludo.

ruina
20-10-2004, 14:23:07
bueno, una solución que se me ocurre es usar alias en el query tanto para los nombres de los campos como para las tablas.

Asi, por ejemplo, si tenemos un campo llamado CODIGO repetido en varias tablas al hacer la consulta escribiriamos:


Select A.CODIGO A__CODIGO, A.IMPORTE, B.CODIGO B__CODIGO, B.NOMBRE
from factura A, cliente B
where A.CODIGOCLIENTE = B.CODIGO
AND xxxxx


donde xxx será la condición del filtro.

Ahora los campos de nuestra query ya no se llamaran CODIGO, CODIGO_1 sino A__CODIGO y B__CODIGO, entonces a la hora de modificar el SQL para aplicar el filtro haremos una comprobación de si el campo empieza por A__ o B__ y en general si empieza por una letra y dos guiones bajos, si es asi lo sustituimos por un "A." o un "B."

Con lo que al final obtendremos automaticamente:

Select A.CODIGO A__CODIGO, A.IMPORTE, B.CODIGO B__CODIGO, B.NOMBRE
from factura A, cliente B
where A.CODIGOCLIENTE = B.CODIGO
AND B.CODIGO like "%7%"


por supuesto a la hora de esctibir la consulta tendremos nosotros de tener cuidado de no olvidar el "__" en los campos repetidos.

Nose, es solo una idea, espero que te ayude :)