Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-10-2004
setry2 setry2 is offline
Miembro
 
Registrado: may 2003
Ubicación: Elche
Posts: 45
Poder: 0
setry2 Va por buen camino
Filtro por selección en dbGrid.

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.
__________________
Setry2
Eres un bit?
www.lafesta.com
Responder Con Cita
  #2  
Antiguo 20-10-2004
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Hola... no trabajo con access pero en paradox hago lo siguiente (quizas se pueda en access o al menos podría ser un comienzo)

Código SQL [-]
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
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #3  
Antiguo 20-10-2004
setry2 setry2 is offline
Miembro
 
Registrado: may 2003
Ubicación: Elche
Posts: 45
Poder: 0
setry2 Va por buen camino
El problema está al contruir la condicion de la qry.

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.
__________________
Setry2
Eres un bit?
www.lafesta.com
Responder Con Cita
  #4  
Antiguo 20-10-2004
Avatar de ruina
ruina ruina is offline
Miembro
 
Registrado: jun 2004
Posts: 196
Poder: 20
ruina Va por buen camino
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:

Código SQL [-]
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:
Código SQL [-]
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
__________________
todo el mundo debe creer en algo... yo creo que voy a tomarme otra copa.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 17:28:33.


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
Copyright 1996-2007 Club Delphi