PDA

Ver la Versión Completa : Como localiso un registro sin Locate


eveprogram
11-03-2008, 19:39:36
Hola
Mi problema es que tengo una base de datos en red, y utilizo Interbase, junto con Delphi 5, el problema es que cuando quiero ponerme en un registro con locate, si funciona pero tarda mucho, alguien sabe de algun forma de que no se tarde tanto. O de realizar el procedimiento sin Locate, Gracias

BlueSteel
11-03-2008, 19:45:07
Hola

Lo unico seria realizar filtro utilizando IBQuerys

Salu2

keyboy
11-03-2008, 19:50:45
Yo supongo que la lentitud se debe a que el método Locate requiere tener todos los registros a la mano, lo que implica que primero debe transferirlos todos del servidor al cliente.

La solución pasa por cambiar el enfoque de las cosas. En lugar de usar un DataSet asociado a miles de registros, conviene más usar SQL para las búsquedas:


selec* from tabla where campo like ...


Bye

eveprogram
13-03-2008, 20:03:26
Lo voy a intentar Gracias por su ayuda:)

mlara
09-04-2008, 21:19:04
Localizar... palabra del castellano que significa encontrar, averiguar el lugar en donde se halla alguien o algo, determinar su posición... se escribe con z. :D

Bueno, luego de esta introducción quisiera invitar a discutir sobre este tema partiendo del hecho de que es necesario que mi aplicación muestre los resultados en una tabla, pero como dice nuestro amigo eveprogram, al usar el método Locate el tiempo es excesivo si requiero localizar un registro de una consulta mostrada a través de un TDataSet, digamos un TQuery, y más aún si este registro se encuentra varios miles de posiciones más adelante del primero.

Hay que anotar que la ayuda sobre el componente (TIBCustomDataSet) nos dice esto:

Locate uses the fastest possible method to locate matching records. If the search fields in KeyFields are indexed and the index is compatible with the specified search options, Locate uses the index. Otherwise Locate creates a filter for the search.

Es lo mismo que nos dice acerca del mismo método del componente TBDEDataSet.

Dice que Locate usa el método más rápido posible para localizar las registros coincidentes. Que si los campos de búsqueda están indizados (o indexados) y el índice es compatible con las opciones de búsqueda, Locate usa el índice. Que si no es así, entonces el método crea un filtro para la búsqueda.

Como he trabajado mucho con los componentes BDE sé que efectivamente al menos con Paradox estas búsquedas son rápidas, ...

... pero usando los MDO (basados en los componentes IBX), el método Locate pareciera realmente hacer un recorrido uno a uno sin usar índices y sin realizar filtros de búsqueda. Esto quiere decir que la ayuda acerca de este método o bien miente o los MDO tienen problemas para usar los índices o construir los filtros de búsqueda. Ya miraré los IBX, que aunque los he trabajado, de eso ya hace un tiempo y la verdad no recuerdo haber tenido inconvenientes, pero ahora no sé, debo revisar otra aplicación para estar seguro de esto.

Entonces, cuál es la solución?

Espero no tener que llegar a usar un TClientDataSet ya que al abrir una consulta con este componente se llevan todos los registros del servidor al cliente, y si son muchos miles... el tiempo es oro... el tiempo de los clientes... je je.

Si alguien sabe de esto... :rolleyes:, si nadie sabe de esto... :mad:... je je

Saludos.

PD. Un asunto similar, pero bastante relacionado con este tema se trata en este hilo: http://www.clubdelphi.com/foros/showthread.php?t=52785&highlight=locate

eveprogram
01-07-2008, 20:32:06
Bueno eso es cierto lo del tiempo es oro, pero a mi si me funciono la forma que me sugirieron, por que no tratas eso, y otro cosa no soy amigo, soy amiga
suerte