Если бронирование присутствует в базе данных 12/27/2011 в 17:00 в течение 2 часов, и я пытаюсь сделать новое бронирование 12/27/2011 с 17:00 до 19:00, тогда мой код выдает сообщение об ошибке , Даже если я попытаюсь забронировать в 4:00 вечера на 2 часа, он выдаст сообщение об ошибке, поскольку 2-й час будет перекрываться с уже сделанным бронированием с 5:00 до 7:00.
Теперь наступает проблемная часть. При смене дня сообщение об ошибке не генерируется, т. Е. Если бронирование было 12/27/2011 в 23:00 в течение 3 часов, оно не должно разрешать новое бронирование до 28/12/2011 2:00, но когда попытаться забронировать 28/12/2011 в 1:00 утра, он сохраняет его в базе данных и не генерирует сообщение об ошибке. Мне нужно сообщение об ошибке, сгенерированное в таком случае.
Я использую два отдельных поля в базе данных, одно для времени и одно для даты. Оба имеют тип данных DateTime.
новое время относится ко времени, в которое я пытаюсь сделать новое бронирование
добавленное время относится ко времени после добавления продолжительности ко времени, в которое я пытаюсь сделать новое бронирование
Addeddbtime содержит только значение времени (после добавления продолжительности бронирования в базе данных), извлеченное из поля даты и времени, хранящегося в базе данных
newdate относится к следующей дате, так как день меняется в 12:00, поэтому, если резервирование базы данных происходит в 23:00 12.12.2011, в новой дате будет указываться 13.12.2011
Проблема заключается в последней части условия If, которое проверяет перекрывающиеся заказы, если бронирование охватывает более двух дней
Вот мой код:
Dim newtime, addednewtime, addeddbtime, changetime, newdate As DateTime 'defines variables
addeddbtime = dbonlytime.AddHours(dbdur)
newtime = TxtBookTime.Text
addednewtime = newtime.AddHours(TxtBookDur.Text)
changetime = "12:00:00 AM"
newdate = dbdate.AddDays(1)
If TxtBookDate.Text = dbdate And TxtPoolNo.Text = dbpoolno And TxtCrtNo.Text = dbcrtno And TxtTblNo.Text = dbtblno And CmboGame.SelectedItem = dbgame And ((newtime > dbonlytime And newtime < addeddbtime) Or (addednewtime > dbonlytime And addednewtime < addeddbtime) Or (newtime < dbonlytime And addeddbtime > changetime And addednewtime < dbonlytime And addednewtime <= addeddbtime And TxtBookDate.Text = newdate)) Then
MessageBox.Show("The date and time you have entered has already been booked " & vbCrLf & " Try Again!", "Bookings Overlapped", MessageBoxButtons.OK, MessageBoxIcon.Stop)
Exit Sub
End If