VBA en Access - Imposible acceder a un registro

Buenos días Compañeros,

Me estoy volviendo loco con un problema en Access que debe de ser una chorrada pero que no consigo solucionarlo.

Estoy haciendo una base de datos donde todo se maneja a través de formularios.
En un formulario, al abrirse, lo que quiero es leer el último dato de un registro anterior y a partir de ahí sacar otro valor.

El procedimiento que hago es el siguiente:

- Se carga el formulario
- Se hace un registro nuevo
- Se mueve la penúltimo registro
- Copiar valor de un campo del penúltimo registro.
- Se mueve al último registro (el nuevo)


Bueno, pues he probado todas las opciones que he encontrado para moverme por los registros con el método DoCmd pero todas me dan error.
Creo que el problema es que se ejecutan antes de que se haya cargado el formulario totalmente, pero no sé como forzar a que se cargue todo antes de ejecutar nada.

¿Alguna sugerencia?


Gracias,

Un saludo!
Galdos
Si te da por alma tal y como lo estás haciendo, siempre puedes acceder al dato que necesitas sin usar el formulario, haciendo una consulta a la tabla . Algo así:

Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("select * from MiTabla", dbOpenDynaset)
rs.MoveLast
MiVariable = rs!MiCampo

Y vuelcas la variable donde necesites. Estás trabajando con una consulta que te has volcado a un recordset, por lo que es totalmente independiente del estado del formulario

Eso cogería el último registro, que entiendo que es lo que realmente necesitas, porque hasta que no salves el registro a añadir, no existe. De todas formas si quieres el penúltimo, solo tienes que hacer rs.MovePrevious después de hacer el MoveLast
@Galdos

Puedes hacerlo de varias formas, pero la que te comenta el compañero @Dracot es la mejor, ya que no hace falta que te muevas por los registros del formulario, sino simplemente leer el último registro de la tabla, que además es más rápido en cuanto a rendimiento de la base de datos.

Si además necesitas la variable para más adelante, también puedes declarar la variable como pública dentro de un módulo, y así podrás utilizar el dato dentro de la BBDD cuando quieras.
Dracot escribió:Si te da por alma tal y como lo estás haciendo, siempre puedes acceder al dato que necesitas sin usar el formulario, haciendo una consulta a la tabla . Algo así:

Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("select * from MiTabla", dbOpenDynaset)
rs.MoveLast
MiVariable = rs!MiCampo

Y vuelcas la variable donde necesites. Estás trabajando con una consulta que te has volcado a un recordset, por lo que es totalmente independiente del estado del formulario

Eso cogería el último registro, que entiendo que es lo que realmente necesitas, porque hasta que no salves el registro a añadir, no existe. De todas formas si quieres el penúltimo, solo tienes que hacer rs.MovePrevious después de hacer el MoveLast



Muchas gracias por la idea, pero no consigo hacerlo funcionar.

Me daba error al crear el tipo Recordset, me faltaban añadir esas referencias.
He añadido la librería "Microsoft ActiveX Data Objects 6.1 Library", pero luego me da error al abrir la tabla.
Me da error de argumento no válido.
¿Hay que añadir alguna librería más?


Gracias,

Un saludo!
Galdos
Prueba a declarar la variable así:
Dim rs As DAO.Recordset

Un saludo!
SeRRaNo escribió:Prueba a declarar la variable así:
Dim rs As DAO.Recordset

Un saludo!

@Galdos
O si no, ADODB.recordset, ya que has cargado la librería de ADODB (Activex Data Object DataBase)
5 respuestas