我正在使用MS创建一个数据库,允许用户选择一个人和一个星期,并查看该人将要做的轮班。
我的问题是,代码使用DLookup来使用pid搜索工作人员,并搜索特定的一天,如下所示:
'Look up shifts
If IsNull(DLookup("Monday", "tblShifts", "[SPID]= " & SPID)) Then
MsgBox "Sorry missing shifts", vbCritical, "Error"
Else
selectedDate = Form_frmMain.cboWeekCommencing.Value
'MsgBox selectedDate 'shows selected date
MonShift = DLookup("Monday", "tblShifts", "[SPID]= " & SPID & " AND [WeekBegin]= #" & selectedDate & "#")
TueShift = DLookup("Tuesday", "tblShifts", "[SPID]= " & SPID & " AND [WeekBegin]= #" & selectedDate & "#")
WedShift = DLookup("Wednesday", "tblShifts", "[SPID]= " & SPID & " AND [WeekBegin]= #" & selectedDate & "#")
ThurShift = DLookup("Thursday", "tblShifts", "[SPID]= " & SPID & " AND [WeekBegin]= #" & selectedDate & "#")
FriShift = DLookup("Friday", "tblShifts", "[SPID]= " & SPID & " AND [WeekBegin]= #" & selectedDate & "#")
SatShift = DLookup("Saturday", "tblShifts", "[SPID]= " & SPID & " AND [WeekBegin]= #" & selectedDate & "#")
End If数据库中使用的表格图像:

DLookup中使用的表的选择:

从上面的图像中,从表单加载的以下代码中填充日期下拉:
thisWeek = Date - Weekday(Date, vbMonday) + 1
nextWeek = Date - Weekday(Date, vbMonday) + 8
weekAfter = Date - Weekday(Date, vbMonday) + 15
cboWeekCommencing.AddItem (thisWeek)
cboWeekCommencing.AddItem (nextWeek)
cboWeekCommencing.AddItem (weekAfter)这些都与22/05/2017,29/05/2017,05/06/2017开始的一周有关。当列表框或下拉框被更改时,将调用顶部函数来填充移位,但是当我选择22/05/2017和29/05/2017的周时,工作正常,但是当选择05/06/2017时,DLookup返回空值。
我尝试过的一些事情是将周更改为后几周,如果日期设置为19/06/2017或26/06/2017,但当使用12/06/2017作为日期时,它还是可以正常工作的。
当只使用员工ID时,一切都正常。
有人知道为什么会发生这种事吗?
发布于 2017-05-27 20:24:38
在MS Access SQL查询中编写#XX/YY/ZZZZ#表达式时。MS试图识别日期。首先,MS Access试图识别#MM/DD/YYYY#格式的日期。只有在尝试失败时,它才会尝试识别#DD/MM/YYYY#格式的日期。
在你的例子中,2017年6月19日被承认为2017年6月19日,而05/ 06 /2017年被确认为2017年5月6日。
我建议您每次在MS Access SQL查询中使用#MM/DD/YYYY#格式。
https://stackoverflow.com/questions/44221057
复制相似问题