Moverse entre registros en Visual Fox Pro

Que tal de antemano saludos.
Mi pregunta es la siguiente:
Estoy creando una aplicación, y lo que necesito es colocar dos botones uno que diga Siguiente y otro que diga Anterior y que al presionarlos avacen al siguiente registro o al anterior respectivamente, Pero.. Cada movimiento esta condicionado, tengo algo como esto:
Botón siguiente:
Skip
IF (tabla1.campo1=thisform.text1)
     aquí carga los datos
ELSE
     Muestra un mensaje
ENDIF

Esta condición es por que solo ciertos registros debo mostrar en la búsqueda. Con este código si funciona, el problema es:
Por ejemplo si tengo dos registros "registro1" y "registro2" digamos que estos si coinciden con la condición, al hacer la búsqueda el sistema me colocará en el primer registro que encuentre, que cumpla con la condición osea "registro1" si doy clic en "siguiente" éste me mandara a "Registro2" PERO si doy otra vez clic en siguiente se supone que me debería mostrar el mensaje pero lo que hace es mostrar de nuevo "registro1".
Como podría hacer para que esto ultimo no pase, no se si me haya explicado bien.

1 Respuesta

Respuesta
1
Como primera medida veo en este código algunas falencias, sobra decir que no le he ejecutado pues no tengo la aplicación que estas desarrollando, pero para nombrar están:
BS = Boton Siguiente
BA = Boton Anterior
1. Cuando BS y llegue a fin de archivo va a marcar un error pues no está validando el fin EOF() de archivo antes de hacer el SKIP
2. Cuando BA y llegue a inicio de archivo va a marcar un error pues no está validando el inicio BOF() de archivo antes de hacer el SKIP -1, ´pues me imagino que usa este comando
3. Ni BA ni Bs uscan mas de un registro, es decir, si tenemos tres registro el 1 y el tres cumplen y ya esta en el 1, al dar BS debería ir hasta el 3, pues cunple con la condición, pero no se queda en el 2 y debería mostrar el mensaje
Ahora bien como no conozco todo el contexto de la aplicación y no podría ser muy objetivo, pero en principio, eso detecto.
Sugeriría el sigueitne código para BS
posicion = recno() 
* guardo registro actual para posterior usio
WHILE  !EOF()
* evaluo fin de archivo
   skip
   IF (tabla1.campo1=thisform.text1)
* si cumple ondición salgo con el EXIT
      exit
   ENDIF
Enddo
if !eof()
* evaluo fin de archivo pues pudo salir por encotnrar registro o por que encontro fin de
* archivo
   Aqui Carga Los Datos
else
* si salio por fin de archivo
   wait window "no se encontró mas información"
   go posicion
* vuelvo a la posici´n donde se encontraba par que no quede perdido el apuntador fuera
* de los datos del archivo
Endif
Por favor evalúelo, no lo he probado, si hay que hacerkle cambios son menores. Espero te sirva.
El BA es igual pero devolviéndose, BOF() en lugar de EOF(), SKIP -1 en lugar de SKIP
pruébalo.
Que tal muchas gracias por tu pronta respuesta.
Estuve revisando lo que me respondisto y si había tenido en cuenta los finales de archivo y principios de archivo se que me marca error aun no los había puesto por que necesitaba que primero funcionara lo que te comentaba.
El código que me pusiste lo puse en el sistema y cuando lo corrí hizo lo mismo que el código que tenia:
Si tengo 3 registros, al hacer la búsqueda el sistema coloca el puntero en el primer registro que se encuentre, si doy clic en el botón siguiente me pasa del registro 1 al registro 2 y si doy siguiente me pasa del 2 al 3 y si doy siguiente me debería mostrar un mensaje que diga algo así como "Ya no hay datos" pero lo que esta haciendo es regresarme el puntero del 3 al 2 y si doy clic de nuevo me regresa del 2 al 1, Ya cuando le doy muchas veces clic que hace como 3 recorridos me muestra el mensaje, se supone que lo debería mostrar en cuanto la condición no se cumpla no se si me explique.
Sucede que en mi concepto, respeto el tuyo, si no encuentra más registros debe quedar en el último encontrado, pues no tendría presentación que la pantalla quedara en blanco habiendo regtistros que cumplen con la condición, pero eso pienso yó, si a ti te parece bien que saque el mensaje, también esta bien.
Que te parece si me envías una ciopia del módulo con los datos y lo evalúo, quizás así comprenda más tu necesidad. [email protected]
Muchas gracias por tu aporte me fue de gran utilidad, creo que no llegamos al punto exacto por que no supe explicarme muy bien de todas formas te agradezco mucho que me hayas ayudado, ya me funcionó, siempre estuvo bien el código, me estaba engañando el sistema con dos registros extras que tenia que no había visto. Tengo otra duda pero es respecto a otro rollo te haré otra pregunta aparte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas