Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   ¿ Locate o TQuery ? (https://www.clubdelphi.com/foros/showthread.php?t=41260)

llonigualker 11-03-2007 10:20:34

¿ Locate o TQuery ?
 
Hola:

Para la inmensa mayoria, seguro que esta es una pregunta tonta pero me gustaria saber vuestra opinion segun vuestras experiencias.

Tengo una tabla Paradox en red con mas de 500.000 registros ( y creciendo ), actualmente, para localizar un solo registro utilizo el LOCATE (ahora la localizacion se hace eterna).

Yo supongo que el locate recorre la tabla por completo registro por registro y comparando.

¿Me recomendais cambiar el locate por un query con su correspondiente sentencia sql?. Yo pienso que seria mas rapido pero esperare vuestras opiniones.

Espero vuestras opiniones.

Saludos.

marcoszorrilla 11-03-2007 11:29:37

Pues con ese número de registros yo crearía un índice y utilizaría:
Código Delphi [-]
MiTabla.FindKey([Edit1.Text]);

Un Saludo.

llonigualker 11-03-2007 11:52:00

pero con esa busqueda accedes al primero que encuentre, tendrias que hacer el indice con todos los campos que quieras que coincidan, no?

marcoszorrilla 11-03-2007 14:35:33

Como hablas de localizar un registro, entiendo que es clave única, sino lo dicho no tendría sentido pues como comentas solamente localizarías el primero.

Si buscas una coincidencia en la que pueden verse involucrados varios registros y además quieres visualizar los que coinciden en una rejilla, solamente puedes utilizar una Consulta o un filtro.

Si quieres contar cuantos registros coinciden con un criterio entonces mejor utiliza una consulta.

Un Saludo.

llonigualker 11-03-2007 14:57:39

se trata de lo siguiente:

imaginate una tabla de ciudadanos, con nombre, apellido, direccion, telefono, etc, con 500.000 registros.

Segun he entendido al definir el indice, tendria que añadir los campos nombre, apellido, direccion, etc....

y en el findkey supongo que seria tabla.findkey([variable1, variable2, ...., variablex])

Esta busqueda solo se hace para comprobar un determinado valor de un campo booleano (que tambien lo incluiria en el indice y en el findkey), no es para mostrar nada, si cumple esa condicion se hace una cosa y si no la cumple se hace otra.

Este metodo del findkey es mas rapido que el locate (ahora mismo esa tabla esta sin indexar)?

saludos.

basti 11-03-2007 17:43:03

En el caso del BDE, y de algunos otros motores, locate y findkey son igual de rápidos.

Sacado de la ayuda de delphi:
Cita:

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.
Vamos, que si existe un índice para los campos de la búsqueda, locate lo usará.


La franja horaria es GMT +2. Ahora son las 23:16:46.

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