Access: actualizar campos al variar algún dato determinado. Objeto de automatización "Me"

A ver si me puedes resolver un mensaje.
En un formulario dispongo de un campo fecha, que quiero se actualice esa fecha desde el mimo momento en que haga un cambio en algún otro campo. En otra consulta que realicé me indicaron que incluyera lo siguiente en la propiedad del campo después de actualizar:
me.[campodefecha] = date()
Sin embargo, al ejecutarse me aparece el mensaje: La expresión Después de actualizar que introdujo como valor de la propiedad de evento produjo un error: el objeto no contiene el objeto de automatización 'Me'.
¿Sabrías decirme porqué ocurre esto y cómo solucionarlo?

1 respuesta

Respuesta
1
Realmente el cuestionamiento es sencillo, aunque te pido me des más detalles.
¿Qué versión de Access utilizas?
¿Este campo de fecha que tienes en el formulario es un campo existente en alguna tabla?
¿El campo tiene definida la propiedad ValorPredeterminado en =Fecha()?
Ingresa al control de fecha en su procedimiento de BVA y aquí te vas al menú "Depuración" y das clic en "Compilar" Seguramente te marcará inmediaamente el error.
El evento Después de Actualizar - AfterUpdate() - no funcionará en tu campo porque la acción sólo contempla a este campo y no a los demás. Lo cuallo hace inservible.
Borra ese procedimiento.
Si lo que quieres una función de auditoría de campos, es decir, que cada vez que alguien cambie un registro se guarde la fecha en un campo especial como [FechaAuditoria] te sugiero que utilices strSQL como función pública para que cada vez que cambien cualquier campo de la tabla, se guarde un registro en otra donde indique el campo y la fecha y hora en que fueron cambiados.
Esto llega a ser algo difícil si no conocemos el lenguaje en BVA.
Te comento que no soy programador como tal.
*** PROPUESTA 1 ***
Cambio en un campo en específico
Te propongo lo siguiente (es muy sencillo):
1. En tu tabla crea un nuevo campo que se llame [Cambioultimo]
2. En el formulario que está basado en esa tabla en vista diseño agrega el campo que creaste (Agregar campos existentes)
3. Elige cualquier campo dentro del formulario, el que quieras y sobre todo aquel que modifiquen mucho( todos excepto [Cambioúltimo]. Te vas a propiedades / Eventos / Después de actualizar y escribes esto:
Me.Cambioultimo = Now()
4. Listo! Prueba en vista formulario cuando cambias un dato del campo que elegiste automáticamente cambia y se guarda la fecha y hora de modificación.
*Nota:  Es muy sencillo y tiene la limitación de que si cambian otro campo no se vea reflejado éste.
*** PROPUESTA 2 RECOMENDADA ***
Cambio en un cualquier campo
1. Realiza sólo los pasos 1 y 2 de la propuesta anterior.
2. Toma tu formulario donde están todos esos campos en vista diseño, luego en propiedades del formulario en cuestionen te vas a Eventos / En datos no guardados y escribes lo mismo, debe verse así:
Private Sub Form_Dirty(Cancel As Integer)
Me.Cambioultimo = Now()
End Sub
LISTO! Cualquier cambio en cualquier campo se guardará.
Te aseguro que un usuario avanzado en código te propondrá algo mucho mejor.
Muchas gracias por tu respuesta, aunque no me acaba de funcionar.
Utilizo la versión de Access 2003 y, siguiendo tus indicaciones (eso creo), hago lo siguiente:
1 Crear un campo tipo fecha en la tabla
2 Agregar ese campo en el formulario
3 Abro las propiedades del formulario y, en Eventos, En datos no guardados, abro el generador de expresiones e introduzco la fórmula propuesta.
4 Al intentar modificar un campo aparece el cuadro diálogo con el mensaje siguiente:
Microsoft Access no puede encontrar la macro "Private Sub Form_Dirty(cancel As Integer)Me.
¿Dónde tengo el error?
¿Utilizaste el generador de expresiones o el generador de código?
Ese error sucede porque Access no encuentra la función, pero en términos de expresiones.
Posiblemente elegiste el generador de expresiones en vez del de código.
Propiedades del formulario en cuestión, luego en Eventos / En datos no guardados utiliza el generador de código, tiene que verse así:
Private Sub Form_Dirty(Cancel As Integer)
Me.Cambioultimo = Now()
End Sub
Me cuentas cómo te fue.
Efectivamente había utilizado el generador de expresiones. Siguiendo tus indicaciones he visto que utilizando generar código aparece como dices. Sin embargo, me sigue dando un error. He intentado hacer algunas combinaciones pero no consigo el propósito. El error es éste:
La expresión En datos no guardados que introdujo como valor de la propiedad de evento produjo un error: El objeto o la clase no admite el conjunto de eventos.
* La expresión no da como resultado el nombre de una macro, de una función definida por el usuario o [Procedimiento de evento].
* Hubo un error al evaluar una función, evento o macro.
¿Alguna sugerencia?
Gracias
¿Ya compilaste el código para verificar que no haya error?
Revisa también tus referencias en BVA (En Access: Herramientas / Módulos o Visual Basic / Herramientas / Referencias
Dime cuáles tienes activas, si tienes algunas que dicen "FALTA" deselecciona y dime cuáles eran.
Seguramente te falta alguna librería.
He probado el procedimiento en una db y funciona sin problemas como lo expuse.
La idea de todo esto es que a otros que tengan el mismo cuestionamiento que tú (guardar la fecha de la última modificación a un registro) les sirva las respuestas aquí expuestas.
Tengo un ejemplo hecho por mí en Access 2003 con lo que necesitas.
Mientras me hago de mi página para subirlos, proporcióname algún mail para enviártelo.
Primero checa lo de de las referencias en BVA
Caramba! Se está haciendo de rogar. Vamos a ver.
He compilado el código y no ha mostrado error alguno (en la edición del formulario he seleccionado ver, código, depuración, compilar. También he ejecutado con la opción del menú ejecutar, Ejecutar Sub/UserForm F5, ocurriendo que se detiene en un cuadro de diálogo Macros, supongo que esperando la introducción de un nombre de macro.
En cuanto a herramientas, referencias, observo que están activadas las siguientes: Visual Basic For Applications, Microsoft Access 12.0 Object Library, Ole Automation, Microsoft ActiveX Data Objects 2.1 Library. No observo ninguna librería (marcada o desmarcada) que exprese FALTA.
Mi correo: [email protected]
Si no soluciono podría enviarte "pantallazos".
Un saludo
Posiblemente la librería de objetos esté dañada.
Te envié el ejemplo a tu correo.
Si tampoco te funciona entonces tendrías que reinstalar las librerías o actualizarlas. Esto sucede cuando están corruptas y no siempre la reinstalación de Access lo soluciona.
Me cuentas.
Gracias.
Pues mira ahora qué pasa! Al abrir tu base de ejemplo (clientes) que me has enviado por e-mail, tampoco ha actualizado la fecha y me sigue dando el mismo error. Luego he hecho otra prueba, abrir la base con el Access 2007 que también tengo instalada, y tampoco ha modificado la fecha, ni en el formulario clientes ni en el formulario Casos subformulario.
Pero he visto que ahora, en Access 2007, aparece en la parte superior una advertencia de seguridad, que me dice: se ha deshabilitado parte del contenido de la base de datos. Justo al lado hay un cuadro de opciones, donde he hecho clic y aparece un mensaje Macro de VBA Access ha deshabilitado el contenido potencialmente dañino en esta base de datos. Está preseleccionada la opción ayuda a protegerme contra contenido desconocido y he seleccionado la opción inferior habilitat este contenido. Y ahora sí que ha actualizado la fecha y la hora.
Seguidamente he vuelto a abrir la base con la versión 2003 y sigue dando el error. Luego la abro con la versión 2007 y tampoco actualiza pero vuelve a aparecer el aviso de deshabilitación de contenido.
Supongo que debo desactivar alguna función, pero no sé de dónde en la versión 2003.
¿Alguna idea?
Perfecto. Sí sirve y al parecer tu problema es de seguridad, de librerías y del motor Jet.
1. Abre Access 2003 (no el archivo) y vete a Herramientas / Macros / Seguridad
Verifica el nivel de seguridad (recomendado en preguntar o permitir, depende de los archivos que abres)
2. En Access 2007 en el botón de Microsoft Office / Opciones de Access / Centro de Confianza /Configuración / Ubicaciones de confianza agrega la carpeta donde está el ejemplo que te envié.
Abre la db que te envíe y ve qupe pasa. Si tampoco...
3. Actuliza por Windows Update tu sistema operativo.
4. Busca el último SP del motor Microsoft Jet
5. Microsoft no recomienda tener instaladas 2 versiones de Access porque crean conflictos con el UAC (si tienes Vista) las librerías / referencias y con el Jet.
http://support.microsoft.com/kb/936748/es
6. Si después de todo no funciona, tendrás que considerar dejar sólo una versión de Access (2003 ó 2007) en tu equipo.
La corrección hecha en Access 2007 ha funcionado perfectamente. Ya no aparece el mensaje de error y se actualiza la fecha al cambiar un registro.
No lo he conseguido todavía en la versión antigua. La culpa es mía porque me doy cuenta que no es la versión del 2003 sino la del 2002. En Herramientas están las subopciones macros y seguridad. En macros sólo está activo el editor de visual basic; y en seguridad sólo administrador grupos de trabajo, cuentas de usuario/grupo y cifrar/descifrar base. No veo dónde modificar el nivel de seguridad. He probado de abrir con la v2007 y volver a guardar aparte en el formato 2003, pero sigue apareciendo el error.
He estado un ratito dando vueltas por las opciones, sin abrir la base y con ella abierta, y no veo dónde se "esconde" la opción equivalente.
Un saludo
Entonces el problema radica en la versión 2002. Como tal no la conozco, no podría aportarte algo nuevo.
Antes de hacer algo más, haz un backup de tus bases de datos. Abre Access 2007 / Botón de Office / Abrir / seleccionas tu base de datos que te importa y ábrela. Luego de nuevo en el botón de Office seleccionas "Guardar base de datos como" y guárdala en el Formato 2007.
Si tienes Access 2007, recomiendo quedarte con él. No le pasa nada a tus aplicaciones hechas en el 2002 porque te las abre en modo de compatibilidad.
Prueba.
Pues ya le daré algunas vueltas a ver si lo consigo.
Desde luego que prefiero la v2007, pero si tengo la v2002 instalada y trato de hallar la solución bajo esa versión antigua es porque quiero usar la base de datos en el trabajo y, allí, se trabaja con la v2002 y no tenemos privilegios de administrador (ni se nos permite modificar ni instalar nada).
Si lo consigo ya lo comentaré.
Muy agradecido por tu valiosa colaboración.
Un saludo

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas