¿Cómo puedo buscar en una tabla mediante dos campos en Visual FoxPro?

No soy programdora pero quiero aprender y quisiera preguntarte como puedo buscar en una tabla mediante dos campos en vfox

1 Respuesta

Respuesta
1
Si no me equivico para ese tipo de búsqueda únicamente se puede realizar mediante la búsqueda secuencial:
LOCATE FOR LIKE(Valor, Campo1+Campo2)
Recuerda que FOUND()
Devuelve Verdadero si encuentra una coincidencia.
Recuerda que los campos deben ser del mismo tipo, de preferencia, o prácticamente a fuerza, deben ser cadenas.
LOCATE FOR LIKE(Valor, Campo1+Campo2)
En el atributo valor coloco el nombre de las variables de memoria o tengo que buscar un valor especifico y si puedo colocar el nombre de las variables debo de unirlas por el signo de +
No, es para que pongas lo que quieres buscar, por ejemplo si tienes 2 campos ap_mat y ap_pat (en donde guardas los apellidos de algún nombre) y quieres ubicar el apellido "PEREZ", la instrucción de búsqueda lo pondrías de la siguiente forma:
LOCATE FOR LIKE("PEREZ",Ap_Pat+Ap_mat)
Hay alguna forma de buscar el la tabla pero tomando en cuanta las variables capturadas en el el formulario yo lo había intentado con el seek pero no se como ponerlo para que busque con las dos variable puse seek m.fora and m.fecha pero no funciono si conoce alguna forma te lo agradecería
Para hacer esa búsqueda únicamente puedes usar el me´todo secuencial.
Para usar SEEK se usa cuando se tiene un índice activo en una tabla, debes recordar que para el indice se hace sobre un solo campo.
Tal vez mis preguntas son de masiado tontas pero creo que no se como se realízala la búsqueda secuencial te agradecería si pudieras aclararme esa duda y de ante mano te agradezco que te tomes el tiempo para contestar estos correos que creo que para todos los que queremos aprender son de gran ayuda
Existen varios tipos de búsquedas, cada una con sus propias ventajas y desventajas, a continuación te voy a explicar brevemente 2 métodos muy usados en VFP:
1. Método de búsqueda binaria.
La búsqueda binaria consiste en ir dividiendo la lista ordenada de mitad en mitad, hasta llegar al valor que se busca.
En este método se usa la instrucción SEEK, previamente debiste activar un índice.
(Un índice es como un "ordenamiento virtual" que se realiza sobre un solo campo en especifico, para que se pueda activar un ínidice es necesario haberlo creado previamente con la instrucción INDEX ON.
Éste tipo de búsqueda más rápida que cualquier otro, la única desventaja es que te "encierras en un solo campo", generalmente la llave primaria, es decir, que si necesitas buscar algo a partir de otro campo, no te funcionará.
Ejemplo:
* para abrir con unindice previamente hechio
USE <tabla>
INDEX ON <CAmpo> To <Archivo>
SET INDEX TO <Archivo>
.
.
.
.
.
*para buscar
SELECT <Tabla>
SEEK <valor>
if Found()
? "Valro encontrado"
Else
? "Valor no encontrado"
Endif
.
.
.
.
.
2. Búsqueda secuencial:
En este método, más eficiente, pero un poco más lento, sobre todo en tablas con miles de registros, éste método consiste en ir comparando a partir del campo especifico, registro por registro hasta llegar al buscado, y en caso de llegar al final de la tabla sin encontrar ninguno, FOUND() devolverá Falso.
Para éste método no es necesario un índice
Ejemplo:
*Abrimos la tabla
USE <Tabla>
.
.
.
.
* Para buscar
SELECT <tabla>
LOCATE FOR <campo> = <valor>
if Found()
? "Valro encontrado"
Else
? "Valor no encontrado"
Endif
.
.
.
.
Como podrás darte cuenta, en este método puedes usar cualquier campo para buscar...
Para buscar con 2 campos, que ese es tu problema, puedes usar la forma como te había dicho:
Por ejemplo si tienes 2 campos ap_mat y ap_pat (en donde guardas los apellidos de algún nombre) y quieres ubicar el apellido "PEREZ", la instrucción de búsqueda lo pondrías de la siguiente forma:
LOCATE FOR LIKE("PEREZ",Ap_Pat+Ap_mat)
* LIKE es una funcion que te ubica una subcadena dentro de otra cadena, y devuelve Verdadero si la ubica en alguna parte de la misma.
En este caso, al concatenar los dos apellidos, formarás una cadenota en donde podrás buscar sin ningún problema.
Saludos desde Merida, Yuc. Mex.
[email protected]
Te agradezco mucho la ayuda que me brindaste y también el tiempo que le dedicas a contestar todos lo mensajes de las personas que como yo quieren aprender. Muchas gracias por todo fuiste muy amable y espero que si se me atora la carreta de nuevo pueda contar contigo te dejo mi mail por si algún día puedes escribirme y tal vez podamos ser amigos por correo
Gracias de nuevo, te mando saludos desde tamaulipas, cuidate mucho y gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas