【问题标题】:MSACCESS 2010 VBA; Syntax Error in date in query expressionMSACCESS 2010 VBA;查询表达式中日期的语法错误
【发布时间】:2017-11-14 14:35:33
【问题描述】:

我正在创建一个简单的数据库来跟踪工作时间。这个想法是:

  1. 每天您只需输入员工没有工作的天数(startDate、endDate、absentType),
  2. 然后计算整个月或选定期间的工作日。

工作日的计算应考虑到Holiday表中的周末(周六、周日)和节假日。

我从 MSDN (Counting the Number of Working Days in Access 2007) 获取了一个函数示例,并将其放入我的 MS Access 2010 db 中的一个模块中,但每次运行查询时都会出现此错误。

尝试从某个地方在另一个示例数据库中运行查询通常会出现相同的错误。

问题出在 strWhere 子句中:

strWhere = "[Holiday] >=#" & startDate & "# AND [Holiday] <=#" & endDate & "#"

' Count the number of holidays.
nHolidays = DCount(Expr:="[Holiday]", Domain:=strHolidays, Criteria:=strWhere)
Workdays = nWeekdays - nHolidays

两个数据库的错误信息都可以在下面的链接中找到

查询表达式中日期的运行时错误 3075 语法错误

感谢任何帮助。

【问题讨论】:

  • 你在哪里?如果您不与美国共享日期格式,那么这很可能是问题的原因
  • 请显示startDateendDate的值和类型。
  • 欧盟/克罗地亚。我的本地日期格式是 dd.mm.yyyy,它适用于我以前的所有 Access 数据库。在这一个中,我使用了提到的代码,但其中没有指定其他格式。表格中的所有输入都是本地格式。
  • MS Access 与所有其他 Office 应用程序一样,与您的本地 CPU 区域语言设置保持一致,其中包括货币、日期/时间格式和其他项目。第一天不需要重新格式化。

标签: vba ms-access


【解决方案1】:

您必须对日期的字符串表达式强制使用格式。习惯使用 ISO 序列 yyyy-mm-dd,因为它适用于任何地方:

strHolidays = "NameOfYourTable"
strWhere = "[Holiday] >= #" & Format(startDate, "yyyy\/mm\/dd") & "# AND [Holiday] <= #" & Format(endDate, "yyyy\/mm\/dd") & "#"

' Count the number of holidays.
nHolidays = DCount("*", strHolidays, strWhere)

【讨论】:

  • 这行得通,但我真的需要解释为什么。因为我以前的所有数据库都运行良好。解释的链接就好了。谢谢大家。
  • 如果本地日期分隔符不是一个点,它很可能会起作用 - 除了 day month如果使用 dd-mm-yyyy 格式。
  • 所以我作为日期值呈现的是一回事,计算是另一回事。
  • 是的,用户界面已本地化 - 因此美国以外的大多数地方、日期/时间、货币等看起来都会有所不同。
【解决方案2】:

过去,我遇到过 VBA 并不总是尊重区域日期设置的问题。在连接之前尝试将其强制转换为美国格式

strWhere = "[Holiday] >=#" & Format(startDate, "MM/dd/yyyy") & "# AND [Holiday] <=#" & Format(endDate, "MM/dd/yyyy") & "#"

【讨论】:

  • 试过但没有改变。在我没有指定格式的代码中,它说“查询表达式中的语法错误'[Holiday] >=#01.02.2017# AND [Holiday] = #02.01.2017# AND [Holiday]
  • 您的问题是您没有转义 / ,它随后成为本地化的日期分隔符。您的语言环境使用打乱 SQL 的点。看我的回答。
【解决方案3】:
  1. 确保日期在 VBA 中按 MM/DD/YYYY 顺序排列。 始终。我一般用:

    strWhere = "[Holiday] &gt;= " &amp; Format(startDate,"\#mm\/dd\/yyyy\#")

  2. DCount 的第二个参数是 strHolidays。这看起来不像表/查询的名称。此参数应该是表/查询的名称。

【讨论】:

  • Answers: 1. 我之前的所有访问数据库的本地日期/时间格式为 dd/mm/yyyy,它们可以工作。只有这个没有。由于未指定 db 日期格式与我的本地 dd/mm/yyyy 不同,我看不出这可能是问题吗? 2. 当我用鼠标标记 strholidays 时,会出现一个弹出窗口,上面写着“strHolidays = 'Holidays'”,这是我的表的正确名称。
  • @Vedran 以我的经验,所有日期标准 IN VBA 必须处于美国模式。尝试使用模棱两可的日期,例如 #6/5/2017#。将被理解为 6 ​​月 5 日。
猜你喜欢
  • 1970-01-01
  • 2014-03-22
  • 2021-06-18
  • 2012-06-06
  • 1970-01-01
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
相关资源
最近更新 更多