Búsquedas VFP

Hola jahs1982!
Oye, se me pidió que realizara una aplicación en la cual buscara artículos, este debe de ser rapido. Como lo tienen actualmente, se hace una búsqueda en tablas, y se pasan a un combo box y despliega las que coinciden, pero lo hace por letras, la letra que vayas escribiendo te la va encontrando y así sucesivamente formando palabras, etc. De hecho no es crear la aplicación, sino el puro método en el combobox. Pero desde la primera letra adivina y coloca la primera parabra que coincida en la propiedad value del combo. A mi se me ocurrió que, mientras hace la búsqueda vaya guardando en un indice, vector, matriz, los que vaya coincidiendo, y así hacer la búsqueda en ese vector o indice. Pero me dicen que hacer un indice durante la búsqueda es muy lento, la verdad no se, de hecho no se mucho de VFP9 apenas tengo un mes y eso se me hace difícil, pero no imposible, el problema es que el tiempo que tengo es muy poco, apenas tengo 10 días para terminar.
Mi pregunta es:¿Qué es un indice? ¿Cómo puedo crear un indice? ¿Hay otra manera para hacer lo que digo? ¿Sabe otro método para búsquedas? ¿Me pasaría un ejemplo?
Gracias..

5 respuestas

Respuesta
1
Con gusto te pasaría un ejemplo, enviame tu mail y te lo paso, con respecto atu pregunta:
Un indice se crea para optimizar búsquedas en tablas, la creación no es lenta, si usas tablas dbf seria
index on cli_cod tag codigocliente
por ejemplo aquí hemos indexado una tabla clientes por su código, este proceso es lento si la tabla es grande, pero el proceso se hace una sola vez, o al crear la tabla ya le das el indice y ya estará listo, el indice no se crea durante la programación, y las búsquedas serán mucho más rápidas. Hay muchos métodos de búsquedas, creo que lo que viste es del tipo autocompletar.
Gracias por tu tiempo!
Si el ejemplo es de autocompletar palabras.
Como se tenia la empresa autocompletaba por el inicio de la palabra, las primeras letras, pero yo la modifique y adivina por letras en cualquierparte de la palabra, como el buscador de windows vista. Solo que es lento, utilizo ciclos for y do while.
Mi idea para optimizar es, al ir escribiendo, me vaya creando una tabla de indices o ir guardando el id en un vector. Así cuándo el usuario genere el evento dropdown despliegue en la lista del combo la tabla o se guíe por el vector para hacer la búsqueda en la base de datos y solo despliegue los que encuentra.
No se que tan factible sea mi idea, por que lo veo y si va a ser lenta la búsqueda al principio, pero conforme vaya escribiendo más caracteres va a ser menos elementos a buscar.
Bueno, pero de todos modos no se hacer lo que digo, tengo que investigar.
Ta paso mi correo, es [email protected]
Gracias..
Te envíe un ejemplo de autocompletar, pero me gustaría que me respondas con tu ejemplo, así tengo idea de la estructura de tus tablas y el tamaño de las mismas para darte una orientación mejor, te devuelvo ya con un código optimizado con tu base de datos.
Hola! Ya he investigado y creo que voy a intentar con create cursor para tablas temporales, sin el indice. Gracias por tu ayuda. Ha si tienes tiempo, me puedes decir por favor a mi correo [email protected] ¿cuál es la función para sacar el tiempo de ejecución de funciones, o algo por el estilo? Es para ver el tiempo en que tarda un método u otro, para ver cual me hace las búsquedas más rápidas.
Hasta luego.
Respuesta
1
El índice es un archivo externo a la tabla que guarda el orden en que se presentarán los registros de acuerdo a la llave. Hacer en forma dinámica efectivamente es extremadamentye lento.
El índice se crea con la instrucción Index On...
Puedes crear una clase, pero si solo tienes 10 días y tus conocimientos no son avanzados no lo veo muy factible.
Puedes realizar una búsqueda con otros métodos proporcióname tu correo para hacerte llegar un par de ejemplos.
Hola víctor!
Gracias por tu tiempo.
Mi correo es: [email protected]
Te agradeceré mucho si me pasas el ejemplo. La verdad me gusto mucho el VFP, es muy fácil de aprender y es muy potente.
Gracias.
Checa tu correo ([email protected])
Respuesta
1
"Pero me dicen que hacer un indice durante la búsqueda es muy lento,"
Es cierto, y cuantos más datos existan más tardado será hacer el indice, por eso es que el indice se crea una sola vez (durante el diseño de la base de datos) y solamente se le da mantenimiento.
"¿Que es un indice?" Similar a un libro, un indice es una tabla especial que indica donde se encuentran los datos, pero no tiene los datos en sí, por eso es mucho más fácil(y por lo tanto más rápido) buscar en un indice que buscar en todo el libro. El indice tiene una forma especial de almacenamiento (generalmente arboles B, pero no siempre) que permite que en pocas comparaciones (existe una fórmula para saber la cantidad en el peor de los casos) se pueda encontrar el dato (o los datos).
"¿Como puedo crear un indice?" La verdad no he trabajado con VFP, como para indicarle exactamente como se crean los indices en ese entorno.
Ahora, la idea planteada me parece muy buena, el diseño debería de quedar más o menos así:
La tabla de artículos debe de tener ya creado un índice sobre la primer letra del nombre del producto
Cuando no hay texto en donde se busque el articulo y se escriba la primera letra, entonces se hace una consulta (utilizando el comando select en el query para que quede más rapido) que recupere todos los nombres que comienzan con esa letra, y se llena el combo box con esos nombres.
Cuando ya hay más de una letra, entonces la búsqueda la sigue haciendo, pero sobre los datos que ya están en el combobox
El nombre de la función para encontrar donde comienza una cadena en otra en FVP no la recuerdo, pero igual se puede localizar en San Google.
Por experiencia personal, me ha resultado mucho más efectivo para resolver esta situación, dejarle al usuario un campo de texto, donde el usuario pueda ingresar el código del articulo (esto es para los usuarios que son bien pilas y rapido se memorizan muchos códigos). Entonces dichos usuarios ingresan el código y presionan enter, y toda la información del articulo es recuperada. Claro, no todos tienen esa capacidad de memoria, entonces en el mismo cuadro de texto, se le deja al usuario la posibilidad que escriba parte del nombre del producto, pero en vez de presionar enter, presiona la tecla F2 (por ejemplo) entonces el sistema genera una consulta similar a:
"select * from articulos where nombre like "' + campotexto + "%'"
Esto me devuelve todos los artículos que comiencen con dicho texto, todo ese listado lo despliego en una nueva ventana un listbox con todos esos nombres para que así con flechas del teclado localicen el articulo y al estar encima del articulo deseado presionan enter. Esa ventana regresa al campo de texto el código del articulo (y un enter si se desea) para que sean desplegados los datos del articulo
Julius
-Guatemala-
M
Respuesta
1
Puedes hacerlo con una consulta en sql. Echa un vistazo a la siguiente dirección, creo que te servirá:
http://www.monografias.com/trabajos12/selec/selec.shtml
Respuesta
1
Cual es tu corre y te mando un ejemplo de un combobox que hace lo que quieres...
A y disculpa por la demora en la respuesta...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas