Access 2007 tengo un rango de fechas y un registro no puede pisar al anterior

Es un hotel. Si tengo HABITACIÓN, FECHA_DESDE, FECHA_HASTA quiero hacer que un registro no pueda estar dentro del rango de un registro anterior. Si un dato es

HAB1,20/09/2013,25/09/2013

quiero que no me permita

HAB1,21/09/2013,22/09/2013

Gracias

1 respuesta

Respuesta
1

Deberías crearte una función para comprobar, antes de grabar el nuevo registro, que las fechas son válidas.

Supongamos que tienes una tabla llamada "reservas" que tiene 3 campos: "habitación","fechaDesde" y "fechaHasta". La función sería algo así (intento explicar lo que hace en los comentarios):

Option Compare Database
Option Explicit
Function snOkNuevaReserva(ByVal numHabitacion As Integer, ByVal fDesde As Date, ByVal fHasta As Date) As Boolean
Dim txtSql As String
Dim rs As Recordset
Dim sDesde As String
Dim sHasta As String
' Si la fecha final es menor o igual que la inicial... malo
If fHasta snOkNuevaReserva = False
Exit Function
End If
' Ponemos las fechas como un texto con una llamada a una función
' que nos servirá para construir nuestra consulta
sDesde = "dateserial(" & Format$(fDesde, "yyyy,mm,dd") & ")"
sHasta = "dateserial(" & Format$(fHasta, "yyyy,mm,dd") & ")"
' Buscaremos reservas de esa habitación cuyas fechas se crucen
' con las de la reserva que intentamos hacer.
' Si hubiera alguna... malo, no nos serviría la reserva.
' ¿Cuando se cruzan las fechas?
' Diremos que se cruzan las fechas cuando:
' - la fecha Desde de la nueva reserva está entre la fecha Desde y la fecha Hasta -1 de una reserva ya hecha
' - la fecha Hasta de la nueva reserva está entre la fecha Desde +1 y la fecha Hasta de una reserva ya hecha
' El -1 y +1 se debe a que el día "hasta" de una reserva si puede coincidir con el "desde" de la siguiente
' y como la instrucción "between" incluye tanto el valor inicial como el final, usamos esa suma/resta para
' referirnos que llegue hasta el día anterior o siguiente (un poco lioso ¿no?)
txtSql = "SELECT * FROM reservas " & _
"WHERE habitación=" & numHabitacion & " and " & _
"(" & sDesde & " between fdesde and fhasta-1 or " & _
" " & sHasta & " between fdesde+1 and fhasta)"
Set rs = CurrentDb().OpenRecordset(txtSql)
snOkNuevaReserva = rs.EOF ' Si no lo encuentra la reserva es OK
rs.Close
End Function

Espero que, aunque es un poco liosa la explicación del tema de las fechas, te sea útil.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas