这是在 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_budget!capture_date 确实包含一个值。
手动打开表单时,每个子表单都会出现以下错误(无错误代码):
此表达式键入错误或太复杂而无法计算。例如,一个数值表达式可能包含太多复杂的元素。尝试通过将表达式的一部分分配给变量来简化表达式。
因此,经过调查,如果您使用 DateSerial 打开参数查询并跳过参数,您将收到上述错误。如果您手动输入日期,它将正常工作。如果我通过带有标准的 OpenForm 打开表单,则没有错误,但所有子表单都是空白的。从那里如果我更改为设计视图,然后在不关闭表单的情况下返回表单视图,表单将完美运行。如果我关闭表单并手动打开它,我将收到每个具有 DateSerial 标准的子表单的上述错误。
请注意,使用 Year() 或 Month() 并跳过查询的参数只会不返回任何结果,不会导致上述错误。
这个让我难住了。我创建了一个新的数据库并导入其中的所有内容,反编译,修复,将 DateSerial 添加到查询等的参数列表中。没关系,行为是一致的。任何人有任何见解?