Ayuda con las rutinas que permiten controlar errores de integridad referencial en Visual Fox Pro
Quisiera saber si me puedes ayudar con uno o dos ejemplos de rutinas que me permitan controlar los errores que se pueden presentar por los desencadenantes (integridad referencial). La verdad no tengo mucha experiencia en vfp y apreciaría que me aconsejaras cual es la mejor opción.
1 respuesta
Respuesta de unysoft
1
1
unysoft, Por el momento no estoy disponible
Es muy interesante el tema que propones y bastante amplio también.
Te voy a exponer lo que me pides, directamente de la ayuda de VFP, ya que me parece que está muy bien explicada:
Controlar errores de tiempo de ejecución:
Los errores en tiempo de ejecución se producen después de que comienza la ejecución de la aplicación. Entre las acciones que podrían generar errores en tiempo de ejecución se encuentran la escritura en un archivo que no existe, el intento de abrir una tabla que ya está abierta, el intento de seleccionar una tabla que se ha cerrado, la presencia de un conflicto de datos, la división de un valor entre cero, etc.
A veces surgen errores cuando los usuarios ejecutan su aplicación. Puede llamar a su propia rutina de tratamiento de errores incluyendo ON ERROR. Normalmente, ON ERROR utiliza un comando DO para ejecutar una rutina que controla el error, como en este ejemplo:
ON ERROR DO My_Error
Si su aplicación no contiene ninguna rutina de tratamiento de errores y se produce un error, la aplicación se interrumpirá y Visual FoxPro presentará un mensaje de error con las siguientes opciones:
Cancelar Si el usuario elige "Cancelar", Visual FoxPro detendrá inmediatamente la ejecución de la aplicación y devolverá el control al sistema.
Ignorar Si el usuario elige "Ignorar", Visual FoxPro pasará por alto la línea que originó el error y continuará con la línea siguiente del programa.
Para ver una lista completa de los mensajes de error de Visual FoxPro y una explicación de los mismos, vea Mensajes de error.
Los comandos y funciones siguientes resultan útiles para anticiparse y controlar los errores en tiempo de ejecución:
Aerror( )
DEBUG o SET STEP ON
Error
ERROR( )
Lineno( )
Message( )
On error
ON( )
PROGRAM( ) o SYS(16)
RETRY
SYS(2018)
La primera línea de defensa contra los errores en tiempo de ejecución es anticiparse y codificarlos antes de que ocurran. No puede, y probablemente tampoco lo desee, prever todos los errores posibles, por lo que tendrá que interceptar algunos con código que se ejecutará en caso de que se produzca un error en tiempo de ejecución.
Crear una rutina ON ERROR
Puede incluir cualquier comando o expresión válida de FoxPro después de ON ERROR, pero normalmente se llama a un procedimiento o programa de control de errores.
Para ver el funcionamiento de ON ERROR, puede escribir en la ventana Comandos un comando irreconocible, como:
Qxy
Aparecerá un cuadro de diálogo de mensaje de error estándar de Visual FoxPro que indica "No se reconoce el verbo de comando". No obstante, si ejecuta las líneas de código siguientes, aparecerá el error número 16 impreso en la ventana Resultados activa en lugar de mostrarse el mensaje de error estándar en un cuadro de diálogo:
¿ON ERROR? ERROR() qxy
Si se ejecuta ON ERROR sin escribir nada más, se restablecerán los mensajes de error integrados de Visual FoxPro:
On error
De forma esquemática, el código siguiente ilustra un controlador de errores ON ERROR:
LOCAL lcOldOnError
* Save the original error handler
lcOldOnError = ON("ERROR")
* Issue ON ERROR with the name of a procedure
ON ERROR DO errhandler WITH ERROR(), MESSAGE()
* code to which the error handling routine applies
* Reset the original error handler
ON ERROR &lcOldOnError
PROCEDURE errhandler
LOCAL aErrInfo[1]
AERROR(aErrInfo)
DO CASE CASE aErrInfo[1] = 1 && File Does Not Exist
* display an appropriate message
* and take some action to fix the problem.
OTHERWISE
* display a generic message, maybe
* send high priority mail to an administrator
Endproc
Te voy a exponer lo que me pides, directamente de la ayuda de VFP, ya que me parece que está muy bien explicada:
Controlar errores de tiempo de ejecución:
Los errores en tiempo de ejecución se producen después de que comienza la ejecución de la aplicación. Entre las acciones que podrían generar errores en tiempo de ejecución se encuentran la escritura en un archivo que no existe, el intento de abrir una tabla que ya está abierta, el intento de seleccionar una tabla que se ha cerrado, la presencia de un conflicto de datos, la división de un valor entre cero, etc.
A veces surgen errores cuando los usuarios ejecutan su aplicación. Puede llamar a su propia rutina de tratamiento de errores incluyendo ON ERROR. Normalmente, ON ERROR utiliza un comando DO para ejecutar una rutina que controla el error, como en este ejemplo:
ON ERROR DO My_Error
Si su aplicación no contiene ninguna rutina de tratamiento de errores y se produce un error, la aplicación se interrumpirá y Visual FoxPro presentará un mensaje de error con las siguientes opciones:
Cancelar Si el usuario elige "Cancelar", Visual FoxPro detendrá inmediatamente la ejecución de la aplicación y devolverá el control al sistema.
Ignorar Si el usuario elige "Ignorar", Visual FoxPro pasará por alto la línea que originó el error y continuará con la línea siguiente del programa.
Para ver una lista completa de los mensajes de error de Visual FoxPro y una explicación de los mismos, vea Mensajes de error.
Los comandos y funciones siguientes resultan útiles para anticiparse y controlar los errores en tiempo de ejecución:
Aerror( )
DEBUG o SET STEP ON
Error
ERROR( )
Lineno( )
Message( )
On error
ON( )
PROGRAM( ) o SYS(16)
RETRY
SYS(2018)
La primera línea de defensa contra los errores en tiempo de ejecución es anticiparse y codificarlos antes de que ocurran. No puede, y probablemente tampoco lo desee, prever todos los errores posibles, por lo que tendrá que interceptar algunos con código que se ejecutará en caso de que se produzca un error en tiempo de ejecución.
Crear una rutina ON ERROR
Puede incluir cualquier comando o expresión válida de FoxPro después de ON ERROR, pero normalmente se llama a un procedimiento o programa de control de errores.
Para ver el funcionamiento de ON ERROR, puede escribir en la ventana Comandos un comando irreconocible, como:
Qxy
Aparecerá un cuadro de diálogo de mensaje de error estándar de Visual FoxPro que indica "No se reconoce el verbo de comando". No obstante, si ejecuta las líneas de código siguientes, aparecerá el error número 16 impreso en la ventana Resultados activa en lugar de mostrarse el mensaje de error estándar en un cuadro de diálogo:
¿ON ERROR? ERROR() qxy
Si se ejecuta ON ERROR sin escribir nada más, se restablecerán los mensajes de error integrados de Visual FoxPro:
On error
De forma esquemática, el código siguiente ilustra un controlador de errores ON ERROR:
LOCAL lcOldOnError
* Save the original error handler
lcOldOnError = ON("ERROR")
* Issue ON ERROR with the name of a procedure
ON ERROR DO errhandler WITH ERROR(), MESSAGE()
* code to which the error handling routine applies
* Reset the original error handler
ON ERROR &lcOldOnError
PROCEDURE errhandler
LOCAL aErrInfo[1]
AERROR(aErrInfo)
DO CASE CASE aErrInfo[1] = 1 && File Does Not Exist
* display an appropriate message
* and take some action to fix the problem.
OTHERWISE
* display a generic message, maybe
* send high priority mail to an administrator
Endproc
Gracias por su tiempo.
Es bastante interesante el manejo de los errores en tiempo de ejecución, sin embargo quisiera que me aclararas en donde debo poner el procedimiento, por ejemplo si estoy utilizando la instrucción "on error do "mi_error", en donde debería de ir el "procedure mi_error".
Desconozco si debe quedar en el formulario, o dentro de un evento, o en un programa aparte, y si es así como lo encadeno para que funcione bien.
Gracias,
Es bastante interesante el manejo de los errores en tiempo de ejecución, sin embargo quisiera que me aclararas en donde debo poner el procedimiento, por ejemplo si estoy utilizando la instrucción "on error do "mi_error", en donde debería de ir el "procedure mi_error".
Desconozco si debe quedar en el formulario, o dentro de un evento, o en un programa aparte, y si es así como lo encadeno para que funcione bien.
Gracias,
Tu pregunta me indica que has estudiado y entendido lo que te expliqué.
Enhorabuena. Vamos a ganar mucho tiempo.
Con respecto a tu pregunta la respuesta es la siguiente:
Habitualmente programamos las PROCEDURES y las FUNCTIONS en programas (. Prg)
Si vas a la pestaña Código de tu Administrador de Proyectos encontrarás un Titulo llamado Programas. Es allí donde debes crear un nuevo programa llamado por ejemplo "procedimientos.prg".
Entonces dentro de ese programa vas a comenzar a crear de a una tus procedures más o menos de la siguiente manera:
*** Ejemplo de programa procedures.prg ****
PROCEDURE errhand
PARAMETER merror, mess, mess1, mprog, mlineno
* VARIABLES LOCALES *
LOCAL lnPreg, lcCurdir, lcTexto, lcCaption, lcNewdir
#INCLUDE EBM.H
lnPreg=MESSAGEBOX (_NOTEBM, _MBXQEST, _MBXTIT)
IF lnPreg=6
* CREAR LA TABLA EN EL DIRECTORIO DEL EJECUTABLE *
CREATE TABLE Ebm ;
(DEFAULT M)
=MESSAGEBOX (_GETSYSDIR, _MBXFRMT, _MBXTIT)
* PREGUNTA CUAL ES EL DIRECTORIO PRINCIPAL *
lcCurdir=CURDIR()
lcTexto="Seleccione el Directorio Principal:"
LcCaption="Tenga en cuenta que si está operando en un entorno de red debe seleccionar el RECURSO DE RED y no la carpeta local."
lcNewdir=ALLTRIM(GETDIR(lcCurdir, lcCaption, lcTexto, 64))
lcNewdir=SUBSTR(lcNewdir, 1, LENC(lcNewdir)-1)
* GRABA EL REGISTRO CON EL DIRECTORIO PRINCIPAL *
INSERT INTO Ebm (DEFAULT) VALUES (lcNewdir)
* CIERRA LA NUEVA TABLA *
USE IN EBM
RETRY
ELSE
=MESSAGEBOX (_NOTINSTALLED, _MBXFRMT, _MBXTIT)
CLOSE ALL
QUIT
ENDIF
RELEASE lnPreg, lcCurdir, lcTexto, lcCaption, lcNewdir
Endproc
Entonces, cuando necesites controlar los errores deberás activar la rutina de control de errores errhand de la siguiente forma desde el formulario o programa en que te encuentres:
On error do errhand in procedures with error( ), message( ), message(1), program( ), lineno( )
Luego, para restaurar la rutina de errores nativa de VFP sólo pones: ON ERROR
Observaciones:
Si te fijas en la penúltima línea de comandos notarás que estamos llamando a un procedimiento y le indicamos al sistema que ese procedimiento se encuentra en el programa PROCEDURES. Además le pasamos los parámetros para que el procedimiento se ejecute normalmente.
Si en tu sistema no has definido el path (directorios de búsqueda predeterminada) en los que VFP buscará los archivos que llames, deberás indicar la ruta completa del programa PROCEDURES.
Si deseas definir el PATH te sugiero que leas la ayuda del comando SET PATH TO
Es bastante simple
Enhorabuena. Vamos a ganar mucho tiempo.
Con respecto a tu pregunta la respuesta es la siguiente:
Habitualmente programamos las PROCEDURES y las FUNCTIONS en programas (. Prg)
Si vas a la pestaña Código de tu Administrador de Proyectos encontrarás un Titulo llamado Programas. Es allí donde debes crear un nuevo programa llamado por ejemplo "procedimientos.prg".
Entonces dentro de ese programa vas a comenzar a crear de a una tus procedures más o menos de la siguiente manera:
*** Ejemplo de programa procedures.prg ****
PROCEDURE errhand
PARAMETER merror, mess, mess1, mprog, mlineno
* VARIABLES LOCALES *
LOCAL lnPreg, lcCurdir, lcTexto, lcCaption, lcNewdir
#INCLUDE EBM.H
lnPreg=MESSAGEBOX (_NOTEBM, _MBXQEST, _MBXTIT)
IF lnPreg=6
* CREAR LA TABLA EN EL DIRECTORIO DEL EJECUTABLE *
CREATE TABLE Ebm ;
(DEFAULT M)
=MESSAGEBOX (_GETSYSDIR, _MBXFRMT, _MBXTIT)
* PREGUNTA CUAL ES EL DIRECTORIO PRINCIPAL *
lcCurdir=CURDIR()
lcTexto="Seleccione el Directorio Principal:"
LcCaption="Tenga en cuenta que si está operando en un entorno de red debe seleccionar el RECURSO DE RED y no la carpeta local."
lcNewdir=ALLTRIM(GETDIR(lcCurdir, lcCaption, lcTexto, 64))
lcNewdir=SUBSTR(lcNewdir, 1, LENC(lcNewdir)-1)
* GRABA EL REGISTRO CON EL DIRECTORIO PRINCIPAL *
INSERT INTO Ebm (DEFAULT) VALUES (lcNewdir)
* CIERRA LA NUEVA TABLA *
USE IN EBM
RETRY
ELSE
=MESSAGEBOX (_NOTINSTALLED, _MBXFRMT, _MBXTIT)
CLOSE ALL
QUIT
ENDIF
RELEASE lnPreg, lcCurdir, lcTexto, lcCaption, lcNewdir
Endproc
Entonces, cuando necesites controlar los errores deberás activar la rutina de control de errores errhand de la siguiente forma desde el formulario o programa en que te encuentres:
On error do errhand in procedures with error( ), message( ), message(1), program( ), lineno( )
Luego, para restaurar la rutina de errores nativa de VFP sólo pones: ON ERROR
Observaciones:
Si te fijas en la penúltima línea de comandos notarás que estamos llamando a un procedimiento y le indicamos al sistema que ese procedimiento se encuentra en el programa PROCEDURES. Además le pasamos los parámetros para que el procedimiento se ejecute normalmente.
Si en tu sistema no has definido el path (directorios de búsqueda predeterminada) en los que VFP buscará los archivos que llames, deberás indicar la ruta completa del programa PROCEDURES.
Si deseas definir el PATH te sugiero que leas la ayuda del comando SET PATH TO
Es bastante simple
- Compartir respuesta
- Anónimo
ahora mismo