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 Temas de Hoy

Conexión con bases de datos

 
 
Herramientas Buscar en Tema Desplegado
  #6  
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
 



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 10:05:40.


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