acceso rapido a tablas de millones de registros

jesus
07 de Agosto del 2002
COMO LE HAGO PARA REALIZAR UN PEQUEÑO PROGRAMA EN VISUAL FOXPRO PARA ACCESAR A UNA TABLA QUE CONTIENE VARIOS MILLONES DE REGISTROS DE TAL MANERA QUE SEA LO MAS RAPIDO POSIBLE
L A TABLA TIENE LOS CAMPOS
NOMBRE, PAIS, ESTADO,TELEFONO
EL PROBLEMA ESTA EN QUE SI YO HAGO UNA CONSULTA COMO ESTA :

SELECT *
FROM BASE DEDASTOS.DBF
WHERE NOMBRE LIKE "%NOMBREABUSCAR%"

TARDA MUCHO Y EMPLEO LOS % PORQUE LOS NOMBRES A VECES TIENEN UN ESPACIO EN BLANCO AL PRINCIPIO O ENTRE EL NOMBRE Y EL APELLIDO HAY VARIOS ESPACIOS

AHORA SI YO ASIGNO UNA VARIABLE AL NOMBRE QUE VOY A BUSCAR POR EJEMPLO ESCRIBO PABLO LOPEZ Y SE LO ASIGNO A LA VARIABLE NAME, CUANDO HAGO LA CONSULTA EN:
WHERE NOMBRE LIKE "%NAME%"
LA CONSULTA DESPLIEGA TODOS LOS REGISTROS QUE COMTENGAN EN EL CAMPO NOMBRE LA PALABRA NAME Y NO EL QUE TIENE ASIGNADO COMO VARIABLE PABLO LOPEZ

Maroto
07 de Agosto del 2002
El problema que tienes, solo tiene una solucion: formatear debidamente el campo NOMBRE, de tal manera que siempre empiece por una letra, y de tal manera que no haya mas de un espacio seguido.
De la manera que tu intentas buscar, no es posible utilizar ningun indice por lo que la busqueda se hace secuencialmente, con la penalizacion que ello supone.
Y lo de la variable, es normal, puesto que al ir entrecomillada, se interpreta como una cadena, y no como una variable. Donde pone "%name%", deberias de poner &name , y poner la siguiente linea antes de la consulta:
name = "%" + name + "%"
para que funcione la macrosustitucion

Jesus
07 de Agosto del 2002
GRACIAS LE AGRADESCO, FUNCIONO PERFECTAMENTE
DE TAL MANERA QUE AL HACER CUALQUIER BUSQUEDA LO PUEDO HACER CON EL % POR EJEMPLO SI SE QUIERE BUSCAR A ALGUIEN CON EL NOMBRE DE PEDRO Y APELLIDO PATERNO OCHOA, SIN CONOCER EL APELLIDO MATERNO SE PUEDE HACER DE LA SIGUIENTE MANERA: DONDE SE DESPLIEGA
NOMBRE A BUSCAR: SE ESCRIBE: OCHOA%PEDRO%
Y SE OBTIENEN LOS RESULTADOS ESPERADOS

ACCEPT "NOMBRE A BUSCAR: " TO NOMB
NAME = "%" + NOMB + "%"
SELECT *;
FROM TABLA;
WHERE nombre like "&NAME"
CLEAR