Crear botón en formulario que me busque el registro con fecha de hoy

Estoy creando una base de datos que es un diario de trabajos. En ella relleno varios campos como: fecha, números de albarán del día, operarios y notas del día. Los operarios y albaranes son subformularios que están relacionados entre ellos y con el formulario con el campo fecha. En el formulario actual sólo existen los campos de fecha y notas.

Necesito dos cosas:

1- Generar un botón que al pulsarlo automáticamente me traslade al día de hoy ( es decir, a la fecha del sistema) independientemente de los registros que tenga la base de datos y las fechas introducidas. Este botón debe estar en el formulario que es el que utilizo para introducir los datos.

2- Me gustaría que al arrancar la base de datos el formulario especificado en /opciones de access/base de datos actual/formulario a mostrar lo hiciera también en fecha de hoy. Esto abre otro problema, y es que lo habitual es que el día no este generado, por lo que el sistema deberá generarlo automáticamente y unicamente rellenar el campo de la fecha todo lo demás dejarlo en blanco.

Respuesta
2

¿Podrías explicarte un poco mejor? Es decir, lo que no entiendo es lo siguiente:

- Tema del botón: cuando dices "me traslade al día de hoy" qué quieres decir exactamente: ¿Qué te vaya al último registro que haya con la fecha de hoy (si es que lo hay) o que te abra un nuevo registro y ya te ponga la fecha del día?

- Tema de arranque de la BD: la misma pregunta que para el botón. Si hay un último registro para ese día, ¿quieres ir al último registro o, independientemente de si lo hay o no, ir a un nuevo registro y que se te ponga la fecha de hoy?

Bueno, ya me dirás.

Referente al botón, quiero que me traslade al día de hoy, es decir que si existe un registro con fecha de hoy baya a él (no puede haber dos registro con la misma fecha puesto que las fechas no se repiten, cada día es un nuevo registro y es único para ese día además la tabla esta configurada "sin duplicados"en el campo fecha, por lo que al tratarse de un diario cada registro es un día diferente), si no existe el registro, es decir que el día no esté creado, pues me basta con que de un mensaje de aviso.

Para el arrenque de la BD: La respuesta a tu pregunta es si, es decir, si existe el registro con la fecha de hoy en la base de datos pues que arranque en ese registro y si no existe ese registro pues el sistema debe crearlo y que ponga fecha de hoy. Al igual que con el botón en la tabla de diario el campo fecha esta configurado "sin duplicados" porque cada día es registro nuevo y único.

Voy a hacer un par de suposiciones de nombres. Tú deberás adaptar esos nombres a los que efectivamente tengas en tu BD.

- Supongamos que la tabla donde se guarda la información se llama TDatos

- Supongamos que el campo donde se guarda la fecha se llama [Fecha]

Y, ahora, permíteme una reflexión: si cuando se abre la BD se carga un formulario que o bien se va al registro donde está la fecha o bien, si no existe, crea una de nueva. Hasta aquí bien. Luego, el botón, si usas la BD de manera "normal", siempre debería encontrarte un registro con la fecha actual.

De todas maneras el código que te voy a indicar para el botón prevé la posibilidad de que ese registro no exista y te lance un mensaje de aviso, aunque, como te decía, ese caso es totalmente improbable si usas la BD como dices que la vas a usar.

Empezaremos por el tema de abrir la BD...

Tienes que coger el formulario que se te abre al inicio y, en vista diseño, sacar sus propiedades e irte a la pestaña Eventos -> Al cargar, y generar el siguiente código:

...

Private Sub Form_Load()
'Declaramos las variables
Dim miFiltro As String
Dim existeFecha As Variant
Dim rst As DAO.Recordset
'Miramos si en la tabla existe esa fecha en la tabla
existeFecha = DLookup("Fecha", "TDatos", "Fecha=#" & Format(Date, "mm/dd/yyyy") & "#")
'Si no existe la fecha creamos un nuevo registro
If IsNull(existeFecha) Then
DoCmd.RunCommand acCmdRecordsGoToNew
'Asignamos la fecha actual al campo [Fecha] del formulario
Me.Fecha.Value = Date
Else 'si ya existe el registro
'Clonamos el recordset
Set rst = Me.Recordset.Clone
'Creamos el filtro de búsqueda
miFiltro = "[Fecha]=#" & Format(Date, "mm/dd/yyyy") & "#"
'Buscamos ese registro con la fecha actual
rst.FindFirst miFiltro
'Creamos el bookmark con el resultado
Me.Bookmark = rst.Bookmark
End If
End Sub

...

Ok. Vamos a por el botón. Sacamos las propiedades del botón y Pestaña Eventos -> Al hacer click, generamos este código:

...

Private Sub...
'Declaramos las variables
Dim miFiltro As String
Dim existeFecha As Variant
Dim rst As DAO.Recordset
'Miramos si en la tabla existe esa fecha en la tabla
existeFecha = DLookup("Fecha", "TDatos", "Fecha=#" & Format(Date, "mm/dd/yyyy") & "#")
'Si no existe la fecha avisamos y salimos
If IsNull(existeFecha) Then
MsgBox "No existe ningún registro con la fecha actual", vbInformation, "AVISO"
Exit Sub
Else 'si ya existe el registro
'Clonamos el recordset
Set rst = Me.Recordset.Clone
'Creamos el filtro de búsqueda
miFiltro = "[Fecha]=#" & Format(Date, "mm/dd/yyyy") & "#"
'Buscamos ese registro con la fecha actual
rst.FindFirst miFiltro
'Creamos el bookmark con el resultado
Me.Bookmark = rst.Bookmark
End If
End Sub

...

Recuerda repasar todos los códigos y cambiar los nombres de los campos que yo he supuesto por los que tú tengas en tu BD.

Ante cualquier duda me comentas.

1 respuesta más de otro experto

Respuesta

Hermano: Neckkito Nck

Muchas gracias por ese código. Le dio a mi app un toque profesional. Muchas gracias a dios por tu conocimiento. No podía ignorar la gran ayuda que he recibido. Por tanto muchas gracias

Espero que a pau_lloseta le halla funcionado perfectamente...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas