【问题标题】:query criteria based on form field基于表单字段的查询条件
【发布时间】:2014-01-11 14:16:46
【问题描述】:

所以我有一个查询,我在其中选择一个字段并设置条件,以便它仅根据表单中特定字段的当前值选择记录。标准如下所示。

[Forms]![FORMAL_CERT_REVIEW_CHECK_FORM]![REVIEW_CHECK_ID] 

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

我很好奇我是否会遗漏一些东西,比如场地上的财产或我没有想到的东西。

【问题讨论】:

  • 当您尝试运行查询时表单是否已经打开?
  • 是的,表单已打开

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


【解决方案1】:

当您直接打开包含对表单控件的引用的查询时,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

【讨论】:

  • 好东西汉斯!谢谢你的时间,我真的很感激。虽然您的 VBA 解决方案很棒,但我实际上正在使用此查询作为组合框选择器的源,您知道我该如何解决这个问题吗?谢谢
  • 我将我的查询作为组合框的行源进行了测试,但 Access 并没有给出参数太少的抱怨。我不知道为什么它在你的情况下抱怨。如果您将数据库的副本上传到文件共享站点,我会看看。
  • 不幸的是,我被禁止在工作中使用此类网站,因此无法分享。这真的难倒我,我觉得查询应该可以工作,我真的不知道为什么它不工作。再次感谢汉斯
  • 恐怕我也被难住了。建议您修改您的问题以仅在将查询用作组合框的行源时才表明问题浮出水面……或者如果我误解了,那么请澄清它在哪里起作用以及在哪里不起作用。也许这会给你一些你可以使用的帮助。
  • 这可能是一个愚蠢的问题,但您是如何将查询设置为组合框的行源
【解决方案2】:

您的描述没有说明您的表单是简单表单还是子表单。我遇到了同样的问题,并意识到我只是在条件中输入了子表单的名称。

假设您在 PARENT_FORM 下有 FORMAL_CERT_REVIEW_CHECK_FORM 子表单,您的标准应为

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

我希望这对您或其他人有所帮助。在 Access 2016 中使用。

【讨论】:

    【解决方案3】:

    在对表单进行设计更改后,我曾多次遇到这种情况。你所做的没有错 - 这是访问损坏。解决方法是将数据库复制到另一个文件名,删除你的表格和查询,压缩和修复,然后再次导入表格和查询。这通常可以解决问题。似乎导入它会重置内部引用,从而使表单能够正常工作。

    【讨论】:

      【解决方案4】:

      这似乎从未解决过,我只是想出了同样的问题。我通过删除表单并重新创建它来解决它。就像你一样,[Forms]![MyForm]![ID] 并且突然开始要求用户输入我的列表框查询的条件。制作一个新表单并复制字段似乎已修复它。

      【讨论】:

        猜你喜欢
        • 2020-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-28
        相关资源
        最近更新 更多