FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Ayuda con Locate y Lookup
Hola a todos.
Tengo un DBgrid asociado a un ADOTable. Cuando filtro la tabla por sexo y uso Locate o Lookup, aunque solo muestre los del sexo masculino (porque los he filtrado) el locate o el lookup me sigue encontrando el articulo aunque no se muestra en el DBgrid pq esta filtrado (en este caso Femenino) y el puntero se mueve a la fila mas cercana. Deberia no encontrar el articulo que estoy buscando si el sexo es Femenino, porque tengo la tabla filtrada a sexo Masculino, pero me dice que lo encuentra a pesar de ser femenino y se cambia la fila activa al mas cercano. Mas claro, el locate o el Lookup no respeta el filtro que le he puesto a la base de datos. Que pudiera estar sucediendo? Muchas gracias |
#2
|
||||
|
||||
y podrias colocar el codigo de como estas haciendo el locate?
__________________
Dulce Regalo que Satanas manda para mi..... |
#3
|
||||
|
||||
Aqui esta el codigo. La Tabla la filtro por Sexo en un RadioGroup, asi el DBGrid se filtra segun se seleccione el sexo: Masculino o Femenino. Cuando está filtrada por Masculino y busco un articulo que es Femenino y existe en la Tabla, lo encuentra, pero como el DBGrid solo me esta mostrando los masculinos lo que hace es que el puntero se mueve al articulo masculino mas cercano. Asi hace cuando esta filtrada por Femenino, etc.
Última edición por ecfisa fecha: 05-09-2011 a las 05:22:16. Razón: ETIQUETAS [DELPHI] [/DELPHI] |
#4
|
||||
|
||||
Cita:
No encontré documentación que explique o documente este problema, según mis pruebas, el TADOTable filtrado no funciona bién con Locate. Pareciera que para realizar la búsqueda ignora el filtrado y lo hace sobre la tabla completa. El resultado que obtuve es que: Si el dato enviado no existe en la tabla devuelve falso sin realizar acción alguna como corresponde. Pero si el dato pertenece a la tabla y no al conjunto filtrado, devuelve verdadero y se posiciona en el próximo registro. Ese es un comportamiento que no he detectado antes con otros componentes como TIBTable, TSQLTable o TTable. Por lo que pareciera ser un bug. (al menos con Delphi 7) Una posible solución es hacerte una función donde verifiques el dato buscado a la salida de Locate y de no coincidir restaurar la posición y devolver False, reemplazando el uso de Locate por ella:
Llamada de ejemplo: Pero sinceramente creo que sería mucho más eficiente filtrar por una consulta SQL. Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 05-09-2011 a las 12:45:22. Razón: Agregar ejemplo de llamada a la función. |
#5
|
||||
|
||||
Cita:
si ya localizo lo que buscas ya no es necesario buscarlo nuevamente
Se traduce en.... SI lo que escribi en el edit esta en la tabla en el campo ArcherId entonces.... ya lo encontraste.. ya no es necesatio
__________________
Dulce Regalo que Satanas manda para mi..... |
#6
|
||||
|
||||
Hola.
Tu observación es correcta oscarac , la línea es redundante ya que de encontrarlo vuelve a buscarlo. Pero esa no es la raíz del problema, ya que si se hace: O se hace: Y el dato a buscar existe en la tabla pero está excluido del conjunto de datos filtrados, en ambos casos mostrará el mensaje 'Encontrado', siendo que no debería hacerlo. Es decir que ignora el filtro en la busqueda. Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#7
|
||||
|
||||
y dime cubanbaker, que tal si haces la busqueda por el codigo y por el sexo? sin necesidad de filtrar la tabla?
has considerado esa forma?
__________________
Dulce Regalo que Satanas manda para mi..... |
#8
|
||||
|
||||
Si, tienen razon los dos, es redundante como me dicen, solo me di cuenta despues que habia escrito el codigo y despues no sabia como editar el mensaje para arreglarlo. No se pq escribi eso de esa forma, seria que el dia que lo hice tenia el tonto de guardia...no tengo que localizarlo 2 veces... de todas maneras, como dice ecfisa esa no es al raiz dle problema porque la busqueda se hace y el locate ignora el filtro. tendre que hacer como me dices y filtrar por una consulta SQL.
Oscarac, es necesario filtrar por sexo porque el usuario tiene que tener la posibilidad de solo "trabajar" con un sexo determinado pq en determinado momento solo necesitará visualizar los hombres o las mujeres (la base de datos tiene mas de 5000 articulos). El Lookup tambien ignora el filtro... Eso pensé que seria un bug, pero estoy usando Delphi 2010. Muchas gracias, ya les diré que he hecho y como lo hice.! Saludos desde La Habana. |
#9
|
||||
|
||||
y probaste la opcion de buscar por el articulo y el sexo a la vez?
__________________
Dulce Regalo que Satanas manda para mi..... |
#10
|
||||
|
||||
Oscarac, la búsqueda por el código y por el sexo, sin filtrar la tabla, me funciona perfectamente, pero tengo necesidad de filtrarla, el usuario necesita solo ver los hombres o las mujeres en determinado momento y no todos mezclados. Ese es mi problema, que necesito filtrar la tabla y que el Locate no ignore el filtro. Gracias.[/font][/color]
|
#11
|
||||
|
||||
Hola cubanbaker.
¿ Ya probaste la funcion que te puse en el post #4 ? Corrige el problema del Locate. Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#12
|
||||
|
||||
Ecfisa, la funcion me esta dando lo siguiente
BM: TBookMarkStr; BM:= ADataSet.Bookmark; Incompatible types: 'AnsiString' and 'TBytes' Perdona mi ignorancia |
#14
|
||||
|
||||
Tuve que modificar el STR del Bookmark
Última edición por cubanbaker fecha: 05-09-2011 a las 17:45:58. |
#15
|
||||
|
||||
PERFECTO! Tu funcion lo hace perfecto, ya reconoce el filtro y me da como si no lo encontrara! Eres un GENIO! Muchas gracias, llevo varios dias en esto y me queria volver loco. Gracias nuevamente.
|
#16
|
||||
|
||||
Hola.
Me alegra que lo hayas solucionado , pero ¿ Que generaba el error Incompatible types: 'AnsiString' and 'TBytes' ? A mi no me lo generó en ningún momento ( como te dije antes no uso ADO) y no lo encuentro por ningún lado en la web. Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 05-09-2011 a las 17:55:05. |
#17
|
||||
|
||||
El error lo estaba generando la declaracion de la variable BM como TBookMarkStr. Le quite el STR y lo acepto perfectamente.
Muchas gracias por tu tiempo y tu paciencia conmigo, me has sido de muchisima ayuda! |
#18
|
||||
|
||||
Hola.
Mira vos, otra más del ADOTable... Con esta ya le descubrimos dos... Las pruebas las hice con un ADOConnection y la tabla customer de dbdemos.mdb que viene con Delphi (no tenía otra cosa para probar) y me aceptó BookmarkStr sin problemas, ¿ Será el tipo de conexión ? Ya algún experto en ADO nos sacará de dudas. Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 05-09-2011 a las 18:24:08. |
#19
|
||||
|
||||
Será porque uso Delphi 2010?
Una pregunta, cómo puedo reportar a Delphi de esas bugs?, sobre todo la del Locate y de los filtros que ignora? |
#20
|
||||
|
||||
Bueno, no soy un experto en el tema, es el primero que descubro , pero supongo que en la página de embarcadero
Aparte el bug lo arrastra de vieja data, yo uso Delphi 7... Contanos que te responden. Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Ayuda Lookup ComboBox | Cristalero | OOP | 4 | 19-04-2009 16:49:03 |
ayuda con locate | ercrizeporta | Varios | 2 | 21-08-2007 17:12:21 |
ayuda con LOCATE | vivamotos | C++ Builder | 4 | 27-08-2006 04:40:46 |
Busqueda con Locate o Lookup | noshy | Conexión con bases de datos | 7 | 15-05-2006 01:45:02 |
Locate en un campo lookup | amadis | Conexión con bases de datos | 1 | 22-12-2005 21:46:52 |
|