Clipper/FiveWin - ERROR EN PROGRAMACION?

 
Vista:

ERROR EN PROGRAMACION?

Publicado por SERGIO (17 intervenciones) el 23/11/2001 15:59:56
Estimados amigos programadores, dónde puede estar el error de programación del porqué me
encuentra el primer registro, pero no los siguientes que cumplan con la misma condición.
Si pueden ayudarme les agradezco.

@ 9,30 get XPRAZON PICTURE "!!!!!!!!!!!!!!!!!!!!!!!!"
READ
IF LASTKEY() = 27
EXIT
ENDIF

GO TOP
LOCATE FOR LEFT(RAZON,LEN(TRIM(XPRAZON))) = TRIM(XPRAZON)

DO WHILE .NOT. EOF()

IF .NOT. FOUND()
******************************************** GRABO NUEVOS PARAMETROS
DO I
XPPROVEEDOR = NRO_PROVEE + 1
REPLACE NRO_PROVEE WITH XPPROVEEDOR
SELE A
EXIT
********************************************************************
ELSE
STORE PROVEEDOR TO XPPROVEEDOR
STORE RAZON TO XPRAZON
@ 8,31 SAY XPPROVEEDOR PICTURE "9999999"
@ 9,31 SAY XPRAZON PICTURE "!!!!!!!!!!!!!!!!!!!!!!!!"

@ 20,15 SAY "²²À *ES ESTE EL REGISTRO(S/N)? " GET CONFI VALID CONFI $("SsNn")
READ
IF CONFI = "S" .OR. CONFI = "s"
EXIT
ENDIF

ENDIF

CONTINUE

ENDDO
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

!!!VAMOS AYUDEN!!!!

Publicado por sergio (17 intervenciones) el 24/11/2001 21:28:20
Eyyyyyy amigos ayudenme por favor....!!!!!
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:!!!VAMOS AYUDEN!!!!

Publicado por Jose Acuña (67 intervenciones) el 25/11/2001 11:43:02
Me parece que tu error esta en que tenes que poner asi

GO TOP

DO WHILE.NOT.EOF()
LOCATE
.....
.
..
..
ENDDO

Porque tu condicion de busqueda esta fuera del ciclo

SALUDOS
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:!!!VAMOS AYUDEN!!!!

Publicado por skaigualker (210 intervenciones) el 26/11/2001 05:40:50
Si introduces Locate dentro del bucle, este se ejecutara siempre en cada ciclo y nunca avanzaras del primer registro, pues siempre localizaras el primer registro.

Yo lo observo y no veo el problema. Ahora bien a mi la instrucicon LOCATE no me gusto nunca, es lentisima. Yo lo haria con indice y con seek de la siguiente manera:

@ 9,30 get XPRAZON PICTURE "!!!!!!!!!!!!!!!!!!!!!!!!"
READ
IF LASTKEY() = 27
EXIT
ENDIF

use tabla index razon
seek razon

IF .NOT. FOUND()
******************************************** GRABO NUEVOS PARAMETROS
DO I
XPPROVEEDOR = NRO_PROVEE + 1
REPLACE NRO_PROVEE WITH XPPROVEEDOR
SELE A
EXIT
********************************************************************
ELSE
while .not. eof() .and. LEFT(RAZON,LEN(TRIM(XPRAZON))) = TRIM(XPRAZON)
STORE PROVEEDOR TO XPPROVEEDOR
STORE RAZON TO XPRAZON
@ 8,31 SAY XPPROVEEDOR PICTURE "9999999"
@ 9,31 SAY XPRAZON PICTURE "!!!!!!!!!!!!!!!!!!!!!!!!"
@ 20,15 SAY "²²À *ES ESTE EL REGISTRO(S/N)? " GET CONFI VALID CONFI $("SsNn")
READ
IF CONFI = "S" .OR. CONFI = "s"
EXIT
ENDIF

SKIP
ENDDO
ENDIF

Prueba asi a ver si funciona mejor.-
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:!!!VAMOS AYUDEN!!!!

Publicado por SERGIO (17 intervenciones) el 26/11/2001 18:54:55
A todos muchas gracias por la buena voluntad demostrada y sinceramente les estoy agradecido que me ayuden.
Es cierto pero la instrucción SEEK no me sirve porque no puede encontrar coincidencias en el registro ingresado con partes del registro de la base. Es decir si yo ingreso a buscar "D" nececito que me encuentre en la base todos los registros que comiencen con "D" y que me los displaye de uno en uno hasta que encuentre el buscado.
Sigo esperando ayuda....
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:!!!VAMOS AYUDEN!!!!

Publicado por skaigualker (210 intervenciones) el 27/11/2001 04:19:19
Si pones la instruccion SET SOFTSEEK ON haces que en la instruccion SEEK busque por IGUAL O MAYOR, es decir que, en caso de no encontrar una clave exactamente igual, se posicione sobre el primer registro cuya clave sea mayor.

La funcion Found () sigue funcionando igual solo esta a .T. si encontro un registro exactamente igual, en caso contrario devuelve .F. Pero la funcion EOF() cambia. Con SET SOFTSEEK ON EOF() siempre es .F. salvo que no haya ninguna clave mayor que la que estas buscando.

Si observas el ejemplo que te di veras que te funciona correctamente.

Saludos.-
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:ERROR EN PROGRAMACION?

Publicado por Armando Estrada Bucio (95 intervenciones) el 27/11/2001 10:23:44
Hola sergio:

Me parece que estas invirtiendo la instrucción; me explico,
estas usandola así:

LOCATE FOR LEFT(RAZON,LEN(TRIM(XPRAZON))) = TRIM(XPRAZON)
DO WHILE .NOT. EOF()
IF .NOT. FOUND()
ELSE
CONTINUE
ENDIF
ENDDO

Intenta usarla así:

LOCATE FOR LEFT(RAZON,LEN(TRIM(XPRAZON))) = TRIM(XPRAZON)
IF FOUND()
DO WHILE .NOT. EOF()
**** Algo
CONTINUE
ENDDO
ELSE
? " No Existe lo buscado"
ENDIF

Espero que esto te ayude.

Saludos

Armando
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

GRACIAS SKAIGUALKER y JOSE ACUÑA

Publicado por Sergio (17 intervenciones) el 27/11/2001 23:38:24
Amigos al fin pude solucionar el problema de búsqueda.El error era bastante sencillo pero a veces lo tenés delante de tus ojos y no sos capaz de verlo. Concretamente la busqueda no encontraba los siguientes registros cuando pasaba por un sector de resguardo de variables de pantalla. En fin muchas gracias a todos que sin la ayuda de ustedes y sus recomendaciones no lo hubiera podido encontrar.
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