1

我有一个表格,里面有 3 件事供我的用户填写:

  1. 一个名为的文本框ProjectName

  2. 两个 ActiveX 控件对象(Microsoft 时间和日期选择器 Control 6.0)分别调用ProjStartDateProjEndDate

在我的用户输入了上述任何一个之后,他们可以单击一个按钮,该按钮将对表单中的列表框对象调用重新查询,该表单将显示过滤结果。

我已将列表框的行源类型设置为“表/查询”,并将其行源设置为以下 SQL 查询:

SELECT p.Title
FROM Project AS p
WHERE
  p.Title = [Forms]![Search by project]![ProjectName] 
  OR (p.StartDate <= [Forms]![Search by project]![ProjStartDate]
      AND p.EndDate >= [Forms]![Search by project]![ProjEndDate])
ORDER BY
  p.ProjectId DESC; 

但是,每次我输入表单时,它都会提示我一个弹出框,要求我输入一个名为Forms!Search by project!ProjectName,Forms!Search by project!ProjStartDate和的参数Forms!Search by project!ProjEndDate。如果我输入参数,让我们正确地说项目名称,列表框将显示正确的过滤结果。

此外,即使我在ProjectName文本框中输入正确的关键字并重新查询,仍然会出现参数弹出框。有谁知道如何解决这个问题?提前非常感谢!

4

1 回答 1

2

我首先基于所有控件都包含在一个表单中的假设编写了这个答案。但是,如果列表框位于子窗体上,则父窗体的控件(例如[Forms]![Search by project]![ProjectName])在子窗体首次打开时尚不可用。如果是这种情况,您可以将列表框行源属性留空,并等到父窗体的表单加载事件将您的SELECT语句分配给列表框行源。或者将列表框行源留空,直到用户单击命令按钮。

这个答案的其余部分是关于诊断命名问题。由于您在评论中指出查询在特定时间运行时可以工作,所以我认为毕竟不涉及命名,但会留下它以防它可能对其他人有所帮助。

打开即时窗口 ( Ctrl+ g) 并调查数据库引擎为何找不到这些参数。

在表单视图中打开“按项目搜索”表单后,.Name只需检查其属性即可验证 Access 是否看到您期望的名称。如果您和 Access 都同意表单的名称,您将获得此...

? Forms![Search by project].Name
Search by project

OTOH,如果 Access 认为表单具有不同的名称,则该尝试将触发错误。如果发生这种情况,请检查 Access 看到的表单名称。这将为您提供所有打开表单的名称:

for each f in Forms : ? f.Name : next

最后,检查这些表单控件的值。假设“按项目搜索”确实是正确的表单名称......

? Forms![Search by project]!ProjectName
? Forms![Search by project]!ProjStartDate
? Forms![Search by project]!ProjEndDate
于 2013-01-04T18:18:58.463 回答