基于表单字段的查询条件

时间:2014-01-11 14:16:47

标签: sql forms ms-access ms-access-2007

所以我有一个查询,我在其中选择一个字段并设置标准,以便它只根据表单中特定字段的当前值选择记录。标准看起来像这样。

[Forms]![FORMAL_CERT_REVIEW_CHECK_FORM]![REVIEW_CHECK_ID] 

非常简单的东西。但我遇到的问题是,当我运行查询时,我得到提示,说我需要输入一个值。我知道这通常发生在您将标准设置为可能不存在或不正确拼写的情况时,但我已经检查了所有这些并且看起来一切看起来都很好。

我很好奇是否有一些我可能会遗失的东西,比如场上的财产或者我没想过的东西。

4 个答案:

答案 0 :(得分:3)

当您直接打开包含对表单控件的引用的查询时,Access可以在打开的表单上从该控件中检索查询的参数值。

但是,如果您尝试使用与记录集的源相同的查询,Access不会从打开的表单中解析查询参数。

例如,这是我的查询, qryREVIEW_CHECK_ID

SELECT f.id, f.datetime_field, f.some_text
FROM tblFoo AS f
WHERE f.id=[Forms]![FORMAL_CERT_REVIEW_CHECK_FORM]![REVIEW_CHECK_ID];

打开 FORMAL_CERT_REVIEW_CHECK_FORM 后,当我直接打开表单时一切正常......比如这样......

DoCmd.OpenQuery "qryREVIEW_CHECK_ID"

但是,使用该查询作为记录集的源会触发错误3061,“参数太少。预计为1.”

Dim db As DAO.database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("qryREVIEW_CHECK_ID")

解决方法是从QueryDef对象打开记录集。并包含Eval(),以便Access使用参数名称解​​析参数。

Dim qdf As DAO.QueryDef
Set qdf = db.QueryDefs("qryREVIEW_CHECK_ID")
qdf.Parameters(0) = Eval(qdf.Parameters(0).Name)
Set rs = qdf.OpenRecordset

答案 1 :(得分:0)

您的说明并未指明您的表单是简单表单还是子表单。我遇到了同样的问题,并意识到我只是在标准中输入子表单的名称。

假设您在PARENT_FORM下有FORMAL_CERT_REVIEW_CHECK_FORM子表格,您的标准应该是

[表格]![PARENT_FORM]![FORMAL_CERT_REVIEW_CHECK_FORM]![REVIEW_CHECK_ID]

我希望这可以帮助你或其他人。用于Access 2016。

答案 2 :(得分:0)

在对表单进行设计更改后,我已经多次经历过这种情况。你所做的事情没有错 - 这是一种访问腐败。解决方案是将数据库复制到另一个文件名,删除您的格式和查询,压缩和修复,然后再次导入表单和查询。这通常可以解决问题。它似乎导入它重置内部引用,允许表单按预期工作。

答案 3 :(得分:-2)

这似乎从未解决过,我只是想出了同样的问题。我通过删除表格并重新创建来解决它。像您一样,[Forms]![MyForm]![ID]毫无疑问地开始要求用户输入列表框查询中的条件。制作新表格并复制字段似乎已解决了该问题。