如何解决日期范围在ms Access数据库中的vb中不起作用
| 我需要更新the0ѭ(日期字段)不在当前月份和年份的第一天和第二十天之间的行。 我正在使用下面编写的代码,但是它给出了一个错误消息:“期望的参数太少1”。我正在使用MS Access 2007作为数据库。cn.Execute \"update water set prel = (prel + (mmt * (tx / 100))) where pdate not between 1-\" & Format$(Now,\"MMM\") & \"-\" & Format$(Now,\"YYYY\") & \" and 20-\" & Format$(Now,\"YYYY\") & \" \"
解决方法
您的直接问题是缺少#日期分隔符,如@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#
一个重要的问题是您的所有pdate值是否都将午夜作为时间成分。 (“日期/时间”值始终包含时间部分。)之所以如此重要,是因为本月5/20/2011 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),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),1)\" & _
\" OR pdate >= \" & _
\"DateSerial(Year(Date),21)\"
,您必须使用哈希或单引号来分隔日期,具体取决于所使用的数据库接口。对ANSI 92或ADO / OLEDB使用散列(#
):
cn.Execute \"update water set prel = (prel + (mmt * (tx / 100)))
where pdate not between
#1-\" & Format$(Now,\"YYYY\") & \"#
and #20-\" & Format$(Now,\"YYYY\") & \"# \"
不过,在这种情况下,我建议使用通用格式yyyy-mm-dd hh:mm:ss
或yyyy-mm-dd
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。