你的紧急问题是缺少 # 日期分隔符,就像 @MicSim 给你展示的那样。但是我建议你考虑一种不同的 WHERE 子句方法。
在添加 # 分隔符后,你的 WHERE 子句类似于这个(使用今天的日期)。
Debug.Print "WHERE pdate not between #1-" & _
Format$(Now, "MMM") & "-" & Format$(Now, "YYYY") & _
"# and #20-" & Format$(Now, "MMM") & "-" & _
Format$(Now, "YYYY") & "#"
WHERE pdate not between #1-May-2011# and #20-May-2011#
一个重要问题是你的所有日期值是否都包含午夜作为时间组成部分。(日期/时间值始终包含时间组成部分。)这个问题之所以重要是因为对于2011年5月20日10:18:15 AM的日期,应该发生什么?你的WHERE子句将导致更新。但是那个日期仍然是5月20日...这是你想要的吗?
我认为使用修订后的WHERE子句风险更小。
Debug.Print "WHERE pdate < " & _
Format(DateSerial(Year(Date), Month(Date), 1), "\#yyyy-mm-dd#\") & _
" OR pdate >= " & _
Format(DateSerial(Year(Date), Month(Date), 21), "\#yyyy-mm-dd#\")
WHERE pdate < #2011-05-01# OR pdate >= #2011-05-21#
你的问题被标记为vb6。DateSerial()、Year()、Month()、Date()和Format()函数应该都可以从数据库引擎的沙盒模式中使用。(参见
Microsoft有关沙盒模式函数的页面)。
编辑: 感谢@Brian Camire提出的建议。
Debug.Print "WHERE pdate < " & _
"DateSerial(Year(Date), Month(Date), 1)" & _
" OR pdate >= " & _
"DateSerial(Year(Date), Month(Date), 21)"