我有一张表格,其中包含一年中的所有周(使用客户编号,因此第1周是在6月),以及他们开始的日期。有一个表单,他们可以选择他们想要查看的那一周,所以我使用了一个ComboBox,它可以获取他们在WeeklyHours表中输入数据的所有周数,使用 SELECT格式(WeeklyHours.Week,“0”)AS Expr1来自WeeklyHours GROUP BY WeeklyHours.Week;
这个组合框应该被用作我构建的几个查询的周过滤器,使用组合框值作为匹配标准。问题是当表单关闭时,那些查询无法运行,并为组合框值提供输入参数值错误。
为了解决这个问题,我尝试使用名为Week_Number的单个条目创建一个名为SelectedWeek的新表。然后有一些AfterUpdate代码将选定的组合框值保存到SelectedWeek的Week_Number字段。
然后我将查询更改为指向[SelectedWeek]![Week_Number],以便查询将始终使用最近选择的周。 但是,我一直收到SelectedWeek!Week_Number的输入参数值错误,我无法弄清楚原因。 任何帮助都将非常感激。
谢谢, 乔尔
答案 0 :(得分:0)
提示用户输入参数值的原因(顺便说一句,这不是错误)在两种情况下,Access SQL引擎都看不到任何引用的值。在第一种情况下,表单是关闭的,在第二种情况下,列未与查找正确对齐。
在第一种情况下,只需保持表单打开,用户在运行其他查询时从组合框中选择值。否则,表单上的所有内容都不可调用,因为它是从内存中关闭的:
SELECT * FROM TableName WHERE weeknumber = Forms!FormName!WeekNumber
在第二种情况下,使用域功能系列的DLookUp()部分。
SELECT * FROM TableName WHERE weeknumber = DLookUp("Week_Number", "SelectedWeek")
实际上,域函数可以在SQL中概括为子查询:
SELECT * FROM TableName
WHERE weeknumber IN (SELECT Week_Number FROM SelectedWeek)
更重要的是,您可以在两个表中运行交叉连接查询(在FROM
子句中用逗号分隔的表)并避免查找。下面假设SelectedWeek是一行,一列的表,但是WHERE
条件,处理长度,您可以在任一表中显式声明列:
SELECT *
FROM TableName, SelectedWeek
WHERE TableName.weeknumber = SelectedWeek.Week_Number