gpt4 book ai didi

sql - 日期范围在带有 ms Access 数据库的 vb 中不起作用

转载 作者:行者123 更新时间:2023-12-01 09:36:50 25 4
gpt4 key购买 nike

我需要更新 pdate(日期字段)不在当前月份和年份的第 1 天和第 20 天之间的行。

我正在使用下面编写的代码,但它给出了一个错误,提示“预期的参数太少 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, "MMM") & "-" & 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#

一个重要的问题是您的所有日期值是否都包含午夜作为时间部分。 (日期/时间值始终包含时间部分。)这可能很重要的原因是,对于 2011 年 5 月 20 日上午 10:18:15 的日期,本月应该发生什么?您的 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's page about sandbox mode functions)。

编辑:感谢@Brian Camire 的建议。

Debug.Print "WHERE pdate < " & _
"DateSerial(Year(Date), Month(Date), 1)" & _
" OR pdate >= " & _
"DateSerial(Year(Date), Month(Date), 21)"

关于sql - 日期范围在带有 ms Access 数据库的 vb 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6126003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com