Predeterminar en un campo "fecha" de una tabla, un valor calculado

Quisiera saber si es posible (Con una Expresión) en una base de datos en Access, Predeterminar en un campo fecha, un valor que sea mayor al ultimo registro sin perder la secuencia, por ejemplo en un campo llamado periodo el ultimo registro contiene la fecha 01-01-2012, la idea es que el nuevo registro me dé un valor mayor sin perder la secuencia... 01-02-2012, 01-03-2012, 01-04-2012, etc...
Agradezco la colaboración que me puedan brindar ya que no tengo mucha experiencia.

Respuesta
2

Lo que pides es posible, con la solución que te planteo, si introduces los datos desde un formulario. Te explico cómo:

1º/ Abres el formulario sobre el que introduces los datos a la tabla en Vista Diseño.

2º/ Sacas sus propiedades y vas a la pestaña Eventos.

3º/ Eliges Al activar registro, le das al botón que aparece a la derecha con 3 puntos, y eliges generar código.

4º/ En el editor de visual basic que se abre, escribes esto:

Private Sub Form_Current()
Dim vAutofec, vUltimo As Variant
vAutofec = Me.Fecha.Value
If Not IsNull(vAutofec) Then Exit Sub
vUltimo = DMax("[Fecha]", "T-Yimaga")
If IsNull(vUltimo) Then
vUltimo = Date
End If
vAutofec = vUltimo + 1
Me.Fecha.Value = vAutofec
End Sub

Lo que hace este código es simular un campo autonumérico, pero con fechas. Si la tabla está vacía, pone la fecha actual del sistema, y si ya hay algún registro, busca el valor máximo de la fecha y le suma uno.

Hola experto Sveinbjorn, muchas gracias por prestar atención a mi solicitud y darme tu valiosa respuesta, el código que has enviado es fabuloso, ya lo probé como me explicaste y ¡¡Funciona!! al aplicarlo para el día a día, sin embargo quisiera explicarte ya que me das la oportunidad; en mi caso es necesario que el código me dé un resultado periódico (Mensual) debido a que los datos que guardo en esa tabla son por decirlo así, totales de cada mes.

Estuve probando con el código que me enviaste, colocando un rango de 30 días, después de 31 días y el resultado que me da me estaría causando problemas en un determinado lapso de tiempo, ya que las fechas se van corriendo, y estaría asignando meses erróneos a los datos que introduzcan los usuarios en un futuro.

Lo que busco en sí, es que el formulario asigne un día fijo de cada mes para evitar el inconveniente antes mencionado y evitarles a los usuarios introducir los mismos errores al digitar la información correspondiente, y así estar seguro que los cálculos que realice la BD de ahí en adelante sean correctos.

Nuevamente mil y mil gracias por tu tiempo y conocimiento dedicado a mi caso.

Vaya, interpreté mal tu consulta por leerla de prisa..., a ver si así:

Private Sub Form_Current()
Dim vUltimo As Variant
Dim vDia, vMes, vAño As Integer
'Si ya hay un valor, salimos sin mas
If Not IsNull(Me.Fecha.Value) Then Exit Sub
'Buscamos el último valor
vUltimo = DMax("[Fecha]", "NombreDeTuTabla")
'Si no hay registros, ponemos la fecha actual del sistema y salimos
If IsNull(vUltimo) Then
Me.Fecha.Value = Date
Exit Sub
End If
'Si no, descomponemos la fecha en partes
vDia = DatePart("d", vUltimo)
vMes = Month(vUltimo)
vAño = Year(vUltimo)
'Añadimos un mes más, teniendo en cuenta el cambio de año:
If vMes < 12 Then
Me.Fecha.Value = CDate(vDia & "/" & vMes + 1 & "/" & vAño)
Else
Me.Fecha.Value = CDate(vDia & "/01/" & vAño + 1)
End If
End Sub

Este código te funcionará perfectamente siempre que el día que elijas del mes no sea 29,30 o 31, en cuyo caso, habría que complicar el código.

Ya me dices, un saludo

PD: si quieres fijar el día del mes actual cuando la tabla está vacía, donde pongo:
If IsNull(vUltimo) Then
Me.Fecha.Value = Date
Exit Sub
End If
podrías poner, si quieres que el día sea el 5, por ejemplo:
If IsNull(vUltimo) Then
Me.Fecha.Value = CDate("05/" & Month(Date) & "/" & Year(Date))
Exit Sub
End If

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas