Evitar desde el código 'Al activar registro' la ejecución del de 'Al cargar'

Dudas sobre código
Rafael
Nivel 5
Mensajes: 192
Registrado: Dom Dic 27, 2015 10:33 am

Evitar desde el código 'Al activar registro' la ejecución del de 'Al cargar'

Mensajepor Rafael » Mié Jul 31, 2019 1:27 pm

Hola de nuevo.

Este es el tema que anunciaba ayer para cerrar prácticamente el desarrollo de la Base de Datos de 'Control Horario' que tengo entre manos:

Quisiera que cuando exista en la BD un Registro con 'FechaFichado' anterior al día de hoy -Date-, que básicamente en la filosofía de la aplicación correspondería a un 'olvido' de Fichar la Salida de la última Entrada registrada el día anterior o el viernes de la semana anterior en el caso de que se pretendiese Fichar la Entrada de un lunes, haya un 'mecanismo' -estrictamente informático claro- que avise al usuario para que se ponga en contacto con el Administrador del Sistema -la aplicación dispone para este último herramientas específicas de solución del tema-.

Se me había ocurrido que en el código asociado al evento 'Al Activar Registro' del Formulario de Fichado de Salida una línea escrita en él impida la ejecución del código asociado a su vez al evento 'Al cargar', en el que está dispuesto con carácter ordinario que antes de tal hecho se produzca, el usuario entre la password que se le ha adjudicado por el administrador de la Base de Datos.

En el evento Al activar registro figura este código simple:

Código: Seleccionar todo

Private Sub Form_Current()
If FechaEntrada <> Date Then
Msgbox "En su Base de Datos existe una Entrda pendiente de cerrar anterior al día de hoy. Por favor, para cerrarla póngase en contacto con el Administrador de aquélla."
DoCmd.Close
End If
End Sub


Pregunto: ¿Es posible hacer figurar en el evento 'Form_Load' del Formulario de Fichado de Salida la línea de código a que me refiero? ¿Existe otra alternativa o solución mejor? Cualquier idea que pudiera aportárseme sería bienvenida :)

EDITO PARA CORREGIR UNA ERRATA: El código anterior es incorrecto, en todo caso donde pone 'FechaEntrada' debe poner 'FechaFichado'...

Rafael
Nivel 5
Mensajes: 192
Registrado: Dom Dic 27, 2015 10:33 am

Re: Evitar desde el código 'Al activar registro' la ejecución del de 'Al cargar'

Mensajepor Rafael » Mié Jul 31, 2019 9:15 pm

Me respondo a mí mismo:

Pensando pensando le he dado la vuelta al esquema que tenía previsto. Me he dicho, por qué no dejar cargarse el Formulario de Salida tal y como está y en el momento de grabar los datos de él enviar el mensaje pretendido al usuario impidiendo que los datos de la Salida se graben? Dicho y hecho: ha funcionado...

Pero en el proceso del 'cacharreo' anterior me ha sucedido un suceso que ME HA PUESTO LOS PELOS DE PUNTA!!!!

He tocado, aparentemente algo nimio de la Tabla Principal de la aplicación, la 'TControlHorario' :?: , pero al programa no le ha sentado nada bien, ha habido un momento en el que al abrir los formularios de Fichado, tanto el de Entrada como el de Salida -por lo que me he barruntado gracias a Dios, que podía ser la Tabla principal aludida...- sistemáticamente el programa me lanzaba el mensaje: Se ha producido el el error '6' en tiempo de ejecución. Desbordamiento.

A partir de ese momento lo he intentado todo: Compactar y reparar. Depurar. Abrir ACCESS con el modificador /decompile y abrir la Base de datos de nuevo. Pero nada. He reiniciado y vuelto a hacer todo lo anterior y nada. Lo malo es que ese error me lo daba con todas las versiones de la BD que voy guardando a medida que avanzo en el desarrollo del programa.

Solo cuando he creado una copia de, SOLO LA ESTRUCTURA, de la Tabla que me estaba barruntando podía haber quedado corrompida y vuelto a revincular el Front Back al Back End con la tabla nueva el programa ha empezado a funcionar.

Obviamente la cosa no era dramática porque el Front End viejo contenía la tabla principal con datos de prueba... PERO QUÉ HUBIESE PASADO SI LA TABLA HUBIESE CONTENIDO DATOS BUENOS? :( :(

Alguien me puede decir algo acerca del malhadado suceso?

Gracias de antemano.

Avatar de Usuario
Neckkito
Moderador
Mensajes: 849
Registrado: Dom Oct 25, 2015 3:42 pm

Re: Evitar desde el código 'Al activar registro' la ejecución del de 'Al cargar'

Mensajepor Neckkito » Mié Jul 31, 2019 9:36 pm

Hola!

Usualmente, el desbordamiento se produce porque el tipo de dato definido no es capaz de contener el valor que se le está asignando.

Por ejemplo, si asignas a un campo de una tabla que sea un dato numérico de tipo byte (valores hasta el 255), si ahí intentas guardar un valor de 1000, te dará error de desbordamiento.

En pocas palabras, que me da la sensación de que tus cambios nimios (no hay cambio que sea realmente nimio) en las tablas han entrado en conflicto con los datos que ya tenías introducidos en la tabla. Es por ello por lo que al copiar solo la estructura el error te ha desaparecido; obviamente ya no hay datos que entren en conflicto.

En cualquier caso, si empiezas con una tabla en blanco e intentas introducir un dato que no se corresponde con la definición del campo, el propio Access te indica que eso no es posible.

Finalmente, si uno ya está trabajando con datos de verdad, es mala política dedicarse, precisamente, a cambiar definiciones de tablas y campos de tablas... Eso se hace antes de poner la aplicación en producción, con los correspondientes testeos.

Ahí Microsoft te detalla el error un poco más técnicamente: https://is.gd/dpbZXs

Un saludo,
Access MVP 2017-2019
http://bit.ly/NckAccess

Rafael
Nivel 5
Mensajes: 192
Registrado: Dom Dic 27, 2015 10:33 am

Re: Evitar desde el código 'Al activar registro' la ejecución del de 'Al cargar'

Mensajepor Rafael » Mié Jul 31, 2019 11:32 pm

Miquel, dices:

Finalmente, si uno ya está trabajando con datos de verdad, es mala política dedicarse, precisamente, a cambiar definiciones de tablas y campos de tablas... Eso se hace antes de poner la aplicación en producción, con los correspondientes testeos.

Pero el problema es que el desbordamiento no me ha salido por toquetear la tabla... :roll:

En fin... :|


Volver a “Código VBA”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado