FoxPro/Visual FoxPro - busqueda

   
Vista:

busqueda

Publicado por sebastian (244 intervenciones) el 07/07/2009 15:54:17
Buenos dias programadores, necesito hacer una busqueda de un cliente pero solo muestra la coincidencia con el primer registro, por ejemplo tengo dos campos, codigo y condicion, necesito buscar el codigo 0001 que la condicion se igual a "OK" para ambos casos son de tipo char

selec prestamos
SET order to codigo
LOCATE for codigo=alltrim(thisform.text1.value) and not deleted()
IF found()then
IF pre_prestamo="OK"
thisform.text2.value=prestamos.pre_nom
thisform.text3.value=prestamos.pre_monto
ELSE
WAIT "El Socio no tiene cuotas ..." window nowait
ENDIF
endif
pero cuando se ejecuta se va defrente al mensaje y en la tabla tengo dos codigos 0001 pero el primero es "NO" y el segundo que debe de mostrano es "OK" gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:busqueda

Publicado por enrique (1041 intervenciones) el 07/07/2009 16:05:01
selec prestamos
SET order to codigo
LOCATE for codigo=padl(thisform.text1.value,4,"0") and not deleted()
IF found()then
IF pre_prestamo="OK"
thisform.text2.value=prestamos.pre_nom
thisform.text3.value=prestamos.pre_monto
ELSE
WAIT "El Socio no tiene cuotas ..." window nowait
ENDIF
endif
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:busqueda

Publicado por Ssebastian (244 intervenciones) el 07/07/2009 17:42:59
Gracias por contestar Enrique pero sigue enviando el mensaje WAIT "El Socio no tiene cuotas ..." window nowait , no esta buscando en la tabla para que verifique que codigo es 0001 y que tenga la condicion "OK"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio

Busqueda

Publicado por Mauricio (1368 intervenciones) el 07/07/2009 17:35:09
Sebastian, lo que sucede con el LOCATE, es que se posiciona en el primer registro nada mas, luego debes hacer un bucle para ubicar la siguiente coincidencia, te sugiero probar esto:
*---
IF !SEEK(THISFORM.text1.value)
WAIT "El Socio no tiene cuotas ..." time 2
THISFORM.text1.value = ''
RETURN .F.
ENDIF
*---
SCAN
IF condicion = 'OK'
THISFORM.text2.value = nombre
THISFORM.text3.value = monto
EXIT
ENDIF
ENDSCAN
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Busqueda

Publicado por Sebastian (244 intervenciones) el 07/07/2009 19:28:45
Hola Mauricio estuve probando el codigo pero no lo encuentra y en la tabla solo tengo tres registros dos con codigo 0001 uno de ellos condicion OK es es el que quiero que ubique y nada
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Busqueda

Publicado por Hector R. De los Santos (270 intervenciones) el 07/07/2009 20:12:45
Haz esto:
- Verifica que tengas:
Set Exact On

- En las busquedas si vas a comparar valores de tipo string(char,varchar,text) es bueno hacer un ALLTRIM() del campo.

Seria algo asi:

Select tuTabla
--Hacer tu Busqueda, ya sea con Seek o Locate, eso de usar un bucle para una busqueda tam simple no es nada optimo.
Locate for alltrim(codigo) = '0001'
If found AND alltrim(descrip) = 'OK'
Messagebox('Se Encontro!')
else
Messagebox('No se encontro ')
Endif

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Busqueda

Publicado por sebastian (244 intervenciones) el 07/07/2009 20:30:13
Hola gracias por el dato no se porque no funciona sigue saliendo que no lo encuentra pero si esta en la tabla con codigo 0001 y condicion OK pero es el tercer registro el que encuentra solo es el primer registro que es 0001 condicion "NO"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio

Busqueda

Publicado por Mauricio (1368 intervenciones) el 08/07/2009 01:15:15
Es super raro Sebastian pues lo probe con un FORM y con un PRG. Una pregunta:, tienes un indice en la tabla para el codigo de cliente?
Debes saber que cuando usas un LOCATE no necesita indice, pero si es indispensable cuando usas SEEK, entonces que has hecho?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio

Busqueda

Publicado por Mauricio (1368 intervenciones) el 08/07/2009 01:19:41
Bueno, debes preguntar a quien esta en contra del bucle, como haria para llegar al tercer registro si como te repito, el LOCATE solo se posiciona en el registro a buscar, y para tener acceso al siguiente, como harias Hector?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Busqueda

Publicado por Hector R. De los Santos (270 intervenciones) el 08/07/2009 05:44:33
Mmm... lo ves dificil eso Mauricio??

Select tabla
Locate for alltrim(codigo)='001' AND alltrim(descrip)='OK'
If found()
Messagebox('Si Se encontro!')
else
Messagebox('No se encontro!')
Endif

...mmm Si se puede.

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio

Busqueda

Publicado por Mauricio (1368 intervenciones) el 08/07/2009 17:20:48
Gracias por desearme suerte aunque no soy yo el del problema, pero aprovechando la ocasion, asi como lo planteas que te paree sencillo, te agregare un obstaculo mas.
Si asi resolvieras el problema como harias si no fuera un solo registro sino que fueran aleatorios en cuanto al OK, te ejecuta tu proceso?
Gracias!!!!!!!!!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Busqueda

Publicado por Hector R. De los Santos (270 intervenciones) el 09/07/2009 18:03:59
> Gracias por desearme suerte aunque no soy yo el del problema,

1) La Suerte no era para ti, era para Sebastian, pero no hay problema :P

>pero aprovechando la ocasion, asi como lo planteas que te paree sencillo, te agregare > un obstaculo mas.

2) WTF!?
No entiendo esta parte, me estas probando??, o ese era el problema que tenia Sebastian?
En todo caso, igualmente se puede resolver con un Locate for, aunque tengas N cantidad de registros puedes localizarlos sin problemas, porque algo de diferente debe tener ese registro, solo es agregar mas AND y compararlo con el campo.
Si existen mas de un registro exactamente igual y quieres hacer una busqueda asi habria que revisar la normalizacion de esas tablas ya que aparentemente hay redundancia de datos.

> Si asi resolvieras el problema como harias si no fuera un solo registro sino que fueran > aleatorios en cuanto al OK, te ejecuta tu proceso?

3) Con la 3 se responde.

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Busqueda

Publicado por Sebastian (244 intervenciones) el 08/07/2009 20:07:01
Gracias a todos por la informacion volvi a crear nuevamente todo con locate for y con seek y ahora ambos estan funcionando correctamente la verdad no se que pasaba pero ya esta corriendo muy bien gracias nuevamente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar