Ms access DateSerial用作导致奇怪行为的查询参数

Ms access DateSerial用作导致奇怪行为的查询参数,ms-access,ms-access-2010,Ms Access,Ms Access 2010,这是针对Access 2007中开发的预算应用程序,目前正在运行2010。应用程序运行良好。我在一个查询中发现了一个逻辑错误。在修复时,我意识到我可以更改以下参数: Month(budget.capture_date) = [forms]![f_budget]![tglMonth] AND Year(budget.capture_date) = Year([forms]![f_budget]![capture_date]) 简单地说: budget.capture_date = DateSer

这是针对Access 2007中开发的预算应用程序,目前正在运行2010。应用程序运行良好。我在一个查询中发现了一个逻辑错误。在修复时,我意识到我可以更改以下参数:

Month(budget.capture_date) = [forms]![f_budget]![tglMonth]
AND
Year(budget.capture_date) = Year([forms]![f_budget]![capture_date])
简单地说:

budget.capture_date = DateSerial(Year([forms]![f_budget]![capture_date]),[forms]![f_budget]![tglMonth],1)
应该没问题吧?我的想法是,由于函数调用较少,它可能会稍微快一点

在打开查询时手动测试和键入参数时,查询工作正常

通过DoCmd.OpenForm和条件打开预算表单时,带有DateSerial参数的所有子表单显示为空。现场f_预算!参数中使用的捕获日期不包含值

手动打开表单时,每个子表单都出现以下错误(无错误代码):

此表达式键入错误或太复杂而无法计算。例如,数值表达式可能包含太多复杂的元素。尝试通过将表达式的一部分指定给变量来简化表达式

因此,在调查之后,如果您使用DateSerial打开一个参数查询并跳过这些参数,您将收到上述错误。如果手动输入日期,它将正常工作。如果我使用条件通过OpenForm打开表单,则没有错误,但所有子表单都为空。从那里,如果我切换到设计视图,然后在不关闭表单的情况下返回表单视图,表单将完美地工作。如果我关闭表单并手动打开它,我将收到每个具有DateSerial条件的子表单的上述错误

请注意,使用Year()或Month()并跳过查询的参数将不会返回任何结果,这不会导致上述错误

这件事把我难住了。我创建了一个新的数据库,导入了其中的所有内容,进行了反编译、修复,并将DateSerial添加到查询的参数列表中。没关系,行为是一致的。任何人都知道吗?

年()和月()函数允许传递NULL,而DateSerail需要有效的整数


因此,查询无法使用空参数运行。

我知道,我的观点是参数不是空的,子表单无论如何都失败了。字段[forms]是如何和何时运行的![f_预算]![capture_date]填充值?字段budget.capture_date是值,DoCmd.OpenForm…按钮后面的条件单击打开表单。DoCmd.OpenForm“f_预算”、“wbsid=”&Me!wbsid&“'和capture_date=#”&dateString&“#”和budget_date=#”&dateString&“#”其他注释:SQL Server后端。上面的dateString强制格式转换为yyyy-mm-dd以防止本地化问题。是否使用“wbsid=”&Me进行记录!打开表单时是否存在wbsid&“'和capture_date=#”&dateString&“#”和budget_date=#”&dateString&“#”?筛选规则中可能有错误?