Чтобы предотвратить столкновения, логика здесь довольно проста:
Столкновение происходит, когда:
RequestStartDate <= EndDate
and
RequestEndDate >= StartDate
Таким образом, приведенный выше запрос является довольно простым.Если произойдет какое-либо столкновение, вышеприведенное вернет записи, и вы просто не разрешите бронирование.
Вышесказанное, конечно, можно ПРОДОЛЖИТЬ на время и даже на отдельную комнату.
Например:
RequestStartTime <= EndTime
and
RequestEndTime >= StartTime
And
RequestDate = BookingDate
И на самом деле в доступе, так как вы можете хранитьстолбец дата + время, тогда мы довольно сильно вернемся к первому примеру выше (и таким образом бронирование может занять несколько дней, если вы сделаете это).И, как уже отмечалось, если это было для конкретной комнаты, то просто добавьте условие комнаты к вышеприведенному.
В Access 2010 действительно есть триггеры таблиц и процедуры хранения, но, поскольку вам нужен пользовательский интерфейс для пользователя, введите кодкак это обычно делает свое дело:
dim strWhere as string
dim dtRequeestStartDate as date
dim dtRequestEndDate as date
dtRequestStartDate = inputbox("Enter start Date")
dtRequestEndDate = inputbox("Enter end date")
strWhere="#" & format(dtRequestStartDate,"mm/dd/yyyy") & "# <= EndDate" & _
" and #" & format(dtRequestEndDate,"mm/dd/yyyy") & "# >= StartDate"
if dcount("*","tableBooking",strWhere) > 0 then
msgbox "sorry, you cant book
...bla bla bla....
Выше приведен только пример, и я уверен, что вы бы создали хорошую форму, которая запрашивает у пользователя даты бронирования.
Таким образом, приведенные выше простые условия возвращают ЛЮБОЕ столкновение.И, написав так много систем резервирования, я настоятельно рекомендую вам НЕ создавать пустые записи заранее, а использовать вышеупомянутую правильную логику и, таким образом, ТОЛЬКО добавлять записи в систему бронирования и не нужно писать тонны кода, чтобы создать кучу пустыхзаписи с временными интервалами и т. д.
Приведенный выше простой запрос предотвратит столкновения.