Omitir avisos que Fox P muestra al detectar error

Hola, les comento la duda; tengo un programa que realicé en Foxpro 6. Cuando lo ejecuto me muestra el siguiente mensaje de error y se detiene la ejecución del programa momentáneamente:
Error: 107
Mensaje: Incompatibilidad entre el tipo de operador y el tipo de operando.
Este mensaje aparece en una ventanita con dos botones ("Aceptar" y "Ayuda"), cuando hago clic en Aceptar la ejecución del programa continúa y el programa funciona correctamente sin ningún problema.
Ya intenté buscar el error en la codificación pero son muchas las lineas de código, por lo tanto me resultaría mucho más fácil (ademas de ahorrarme tiempo), si encontrara alguna forma de impedir que fox pro muestre este mensaje.
La pregunta sería entonces:
_ ¿Se puede indicar de alguna forma a foxpro que pase por alto este error o al menos que cierre automaticamente la ventana de error sin que tenga que hacer clic en el botón Aceptar?

1 respuesta

Respuesta
1
Yo lo haría con la función on error.
Con esa función llamo a un "manejador de errores" el cual preguntará por el número de error (107) y si ocurre UNA SOLA VEZ cuando inicia el sistema, que lo ignore y continué.
Gracias por tu ayuda, intenté usar la función ON ERROR pero no la sé utilizar, ¿podrías por favor escribir un ejemplo?, un ejemplo sencillo como para darme una idea, ya investigue sobre el funcionamiento de esta función pero los ejemplos que encontré son muy confusos, epero puedas ayudarme, soy un programador de nivel intermedio.
Un poco de teoría
Fox tiene su propio manejador de errores. El cual te dará información pertinente a lo "malo" que vaya sucediento en tu programa, en tiempo de ejecución.
Si tu quieres delegar esa función a un procedimiento, entonces usas
On error do MiProcedimiento
Para dejar de usar el procedimiento MiProcedimiento y volver a usar el manejador de fox, invocas nuevamente, pero sin llamar a nada:
On error
Un poco de práctica
De la ayuda de Fox:
------------------
ON ERROR DO errHandler WITH ;
   ERROR( ), MESSAGE( ), MESSAGE(1), PROGRAM( ), LINENO( )
USE nodatabase
ON ERROR  && Restores system error handler.
PROCEDURE errHandler
   PARAMETER merror, mess, mess1, mprog, mlineno
   CLEAR
   ? 'Error number: ' + LTRIM(STR(merror))
   ? 'Error message: ' + mess
   ? 'Line of code with error: ' + mess1
   ? 'Line number of error: ' + LTRIM(STR(mlineno))
   ? 'Program with error: ' + mprog
Endproc
-------------------------
Este código tiene dos componentes:
1. El llamado al "manejador de errores" por parte de la función, enviándole los parámetros que On Error genera.
2. La declaración del manejador de errores y su preparación para recibir los parámetros de On Error.
En la declaración del manejador de errores sólo falta colocar una condición (sentencia if) para preguntar por el número de error. Si es el que te interesa, simplemente pones un Return:
    if merror=107 and _screen.error107=0
            Return
           _screen.error107=1
    Endif
Esto iría justo después del Clear del procedimiento errHandler.
Notas
a) Esta solución se te brinda con la salvedad de que es simplemente para evitar que fox muestre el mensaje de error al inicio del sistema. Por tanto debes tener cuidado con obviar este mensaje de error puesto que podría hacerte difícil encontrar posibles problemas futuros, especialmente si decides delegar la función de manejador de errores de forma permanente.
B ) Si decides delegar de forma permanente, debes ajustar el programa para que el error se obvie UNA SOLA VEZ. Y para eso yo crearía una "bandera" (en el inicio de la aplicación) como propiedad a la variable _screen, y preguntar por su valor dentro de la función:
_screen.addproperty("Error107")
_screen.error107=0
Saludos.
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">
<pre>ON ERROR DO errHandler WITH ;
ERROR( ), MESSAGE( ), MESSAGE(1), PROGRAM( ), LINENO( )
USE nodatabase
ON ERROR && Restores system error handler.
PROCEDURE errHandler
PARAMETER merror, mess, mess1, mprog, mlineno
CLEAR
? 'Error number: ' + LTRIM(STR(merror))
? 'Error message: ' + mess
? 'Line of code with error: ' + mess1
? 'Line number of error: ' + LTRIM(STR(mlineno))
? 'Program with error: ' + mprog
ENDPROC</pre>
</div>

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas