MSACCESS 2010 VBA;查询表达式中的日期出现语法错误

MSACCESS 2010 VBA;查询表达式中的日期出现语法错误,vba,ms-access,Vba,Ms Access,我正在创建一个简单的数据库来跟踪工作时间。其想法是: 每天只需输入员工未工作的天数(开始日期、结束日期、缺勤类型) 然后计算整个月或所选期间的工作日 工作日的计算应考虑假日表中的周末(周六、周日)和假日 我从MSDN()中获取了一个函数示例,并将其放入我的msaccess2010db中的一个模块中,但每次运行查询时都会出现此错误 通常,从某处尝试在另一个示例数据库中运行查询时会出现相同的错误 问题在于strWhere条款: strWhere=“[Holiday]>=#”&startDate&“#

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

  • 每天只需输入员工未工作的天数(开始日期、结束日期、缺勤类型)
  • 然后计算整个月或所选期间的工作日 工作日的计算应考虑假日表中的周末(周六、周日)和假日

    我从MSDN()中获取了一个函数示例,并将其放入我的msaccess2010db中的一个模块中,但每次运行查询时都会出现此错误

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

    问题在于strWhere条款:


    strWhere=“[Holiday]>=#”&startDate&“#”和[Holiday]过去,我遇到过VBA不总是遵守区域日期设置的问题。在连接之前,请尝试将其强制为美国格式

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

    strWhere=“[Holiday]>=#”和格式(起始日期,“MM/dd/yyyy”)&“#和[Holiday]过去我遇到过VBA不总是遵守区域日期设置的问题。在连接之前,请尝试将其强制转换为US格式

    strWhere = "[Holiday] >=#" & Format(startDate, "MM/dd/yyyy") & "# AND [Holiday] <=#" & Format(endDate, "MM/dd/yyyy") & "#"
    
    strWhere=“[Holiday]>=#”和格式(起始日期,“MM/dd/yyyy”)&“#和[Holiday]
    
  • 确保日期以VBA中的MM/DD/YYYY顺序排列。始终。我通常使用:

    strWhere=“[Holiday]>=”&格式(起始日期,\\\\/mm\/dd\/yyyy\\”

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

  • 确保日期以VBA中的MM/DD/YYYY顺序排列。始终。我通常使用:

    strWhere=“[Holiday]>=”&格式(起始日期,\\\\/mm\/dd\/yyyy\\”

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


  • 必须对日期的字符串表达式强制设置格式。请习惯使用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)
    
    strHolidays=“表格名称”
    
    strWhere=“[Holiday]>=#”和Format(startDate,“yyyy\/mm\/dd”)&“#和[Holiday]必须对日期的字符串表达式强制设置格式。习惯使用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)
    
    strHolidays=“表格名称”
    

    strWhere=“[Holiday]>=#”和格式(起始日期,“yyyy\/mm\/dd”)和“#和[Holiday]您的总部在哪里?如果您没有与我们共享日期格式,那么这很可能是问题的原因。请显示startDate和endDate.EU/Croacia的值和类型。我的本地日期格式是dd.mm.yyyy,它适用于我以前的所有Access数据库。在这一版本中,我使用了前面提到的代码,但其中没有其他格式在指定的时间。表中的所有输入均为本地格式。MS Access与所有其他Office应用程序一样,与您的本地CPU区域语言设置(包括货币、日期/时间格式和其他项)保持一致。第一天不需要重新格式化。您在哪里?如果您没有与我们共享日期格式,则很可能是这样问题的原因请显示startDate和endDate.EU/Croadia的值和类型。我的本地日期格式是dd.mm.yyy,它在我以前的所有Access数据库中都可以使用。在这个数据库中,我使用了前面提到的代码,但其中没有指定其他格式。表中的所有输入都是本地格式。MS Access与所有其他Office applic一样设置与您的本地CPU区域语言设置(包括货币、日期/时间格式和其他项)一致。不需要重新设置日期首选项的格式。答案:1.我以前访问的所有数据库的本地日期/时间格式都为dd/mm/yyyy,它们都可以工作。只有这一个不工作。因为在数据库中,日期格式与我的本地日期格式不同dd/mm/yyyy,我不认为这是问题所在?2.当我用鼠标标记strholidays时,弹出窗口显示“strholidays=‘假日’“,这是我表的正确名称。@根据我的经验,VBA中的所有日期条件都必须处于US模式。试着选择一个模棱两可的日期,比如2017年6月5日。将理解为6月5日。我以前的所有访问数据库都具有本地日期/时间格式,如dd/mm/yyyy,它们可以工作。只有这个没有。由于在db中指定的日期格式与我的本地dd/mm/yyyy没有区别,我看不出这可能是问题所在?2.当我用鼠标标记strholidays时,弹出窗口显示“strholidays='Holidays'”,这是我表格的正确名称。@根据我的经验,VBA中的所有日期条件都必须处于US模式。试着选择一个模棱两可的日期,比如2017年6月5日。它将被理解为6月5日,但没有变化。在我没有指定格式的代码中,它表示“查询表达式中的语法错误”[Holiday]>=#01.02.2017#和[Holiday]=#02.01.2017#和[Holiday]你的问题是,你没有逃过/,它会成为本地化的日期分隔符。你的区域设置使用了一个点来对SQL进行置乱。请参阅我的答案。尝试过但没有更改。在我没有指定格式的代码中,它会说“querry表达式中的语法错误”[Holiday]>=#01.02.2017#和[Holiday]=#02.01.2017#和[Holiday]您的问题是,您没有跳过/,然后它将成为本地化的日期分隔符。您的区域设置使用了一个点来扰乱SQL。看看我的答案。这很有效,但我真的需要解释一下原因。因为我以前所有的数据库都工作得很好。一个解释的链接就可以了。谢谢大家。如果本地日期分隔符不是一个点,它很可能会起作用-除了日期是天的日期,所以我显示为日期值是一回事,计算是另一回事。是的,用户界面是本地化的-因此美国以外的大多数地方、日期/时间、货币等看起来都会不同。这很有效,但我真的需要解释原因。因为我以前所有的数据库都工作得很好。解释的链接是