Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por cubanbaker Ver Mensaje
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
No uso los componentes ADO y lo que leía arriba me parecía ilógico hasta que hice la prueba y obtuve los mismos resultados que vos.
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:
Código Delphi [-]
function MyLocate(ADataSet: TDataSet; FName, SData: string): Boolean;
var
  BM: TBookMarkStr;
begin
  BM:= ADataSet.Bookmark;
  Result:= ADataSet.Locate(FName, SData,[]) and
          (ADataSet.FieldByName(FName).AsString = SData);
  if not Result then
    ADataSet.Bookmark:= BM;
end;

Llamada de ejemplo:
Código Delphi [-]
   if MyLocate(DataModule1.TablaRecurvo, 'ArcherId', Edit1.Text) then
     ....
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.
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

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


La franja horaria es GMT +2. Ahora son las 09:03:14.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi