La Web del Programador: Comunidad de Programadores
 
    Pregunta:  31110 - BUSCAR UN TEXTO EN UNA BASE DE DATOS
Autor:  Cruz Alfredo Vasquez Ceja
Tengo una base de datos de productos, con tres campos, ejemplo:
codigo : 3FI001
concepto: Filete hereford a las brasas
precio: 80

introduzco un texo a buscar ejemplo: "hereford" o tal vez "brasas"

y lo que necesito es buscar en la base de datos, todos lo articulos que contengan "hereford", o la palabra que teclee. ojo, esta palabra puede estar esta dentro o al final, incluso al principio del concepto de mi base.

find, seek, dbseed, set softseek, solo me funcionan cuando la palabra que busto esta al principio de la cadena, e indexado por el campo concepto.
A ver cerebritos, quien me puede ayudar, se lo agradecere mucho, gracias.

  Respuesta:  José Luis Cadena Rojas
Hola Alfredo, te saltaste una de las mas basicas busquedas en clipper, que es el LOCATE.
Aqui va un ejemplo de como utilizarlo:

...
.....
nom_aux=space(20)
@ 10,10 GET nom_aux PICT '!!!!!!!!!!!!!!!!!!!!'
READ
aux=TRIM(nom_aux)
LOCATE FOR aux $ UPPER(concepto)
......
....
..

con eso ya puedes crear un ciclo para que siga buscando los siguientes registros que puedan existir. Tambien puedes crear una base de datos auxiliar y luego visualizarla con browse o algo similar.
Recuerda que tienes que abrir tu base de datos sin indice.
Si tienes alguna duda me avisas y te preparo alguna ventana de ejemplo.
José Luis

  Respuesta:  Sandro Dorado
Tienes que hacer una búsqueda secuencial utilizando la funcion AT()

Por ejemplo

Locate for AT("brasas",concepto)>0

y te va a localizar el registro que contenga la palabra brasas dentro del campo concepto.

Ojala sea lo que andas buscando.

Adios.

  Respuesta:  Gustavo Daniel Vallejos
Mirá, lo que tenes que hacer es un filtro del literal que estàs buscando en este caso intruducís la palabra "hereford" en un campo x y luego hacés el filtrado. Ej:
cX:="hereford"
nLongitud:=20 && o la longitud del campo CONCEPTO
set filter to at(left(cX,nLongitud),field->concepto) <> 0

esto hará que filtre todos los registros que contenga la palabra "hereford" en dicha tabla.-

  Respuesta:  Luis Gutierrez
Hola Cruz Alfredo espero te sirva esto:
LOCATE for \'hereford\'$nom_articulo

nom_articulo= al campo de tu bd
hereford=al articulo que intentas buscar

es un poco rudiementario pero cumple con la mision

espero que te sea util