为了防止碰撞,这里的逻辑是非常简单的:发生
碰撞时:
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....
以上只是一个例子,我确定你会建立一个很好的表单, 提示用户预订日期。
所以上述简单的条件确实会返回任何冲突。而且写了这么多预订系统,我强烈建议你不要提前创建空白记录,而是使用上述正确的逻辑,因此只需将记录添加到预订系统中,而不必编写大量代码来创建一堆空白带时间片的记录等。
上面的简单查询可以防止碰撞。
约会最后一次? – 2012-02-08 14:02:29
可能在半小时到一小时之间。那么假设半小时的时间段是安全的? – mjsey 2012-02-08 14:06:25
将15小时的时间分配给15分钟的预约是否可以接受?最少约半个小时,半小时时间内约会是否增加? – Fionnuala 2012-02-08 15:14:29