如何为查询中的条件使用变量以将查询限制为活动表单?

Posted

技术标签:

【中文标题】如何为查询中的条件使用变量以将查询限制为活动表单?【英文标题】:How to use a variable for the criteria in a query to restrict the query to the active form? 【发布时间】:2021-02-05 20:08:35 【问题描述】:

我有一个名为“frmBond-MuniDetailsAE”的表格。它有一个名为“cboStep”的组合框。 cboSteps 的 Row Source 是一个嵌入式查询,它从名为“tblBond-Steps”的表中检索记录,它具有 Criteria - [表格]![frmBond-MuniDetailsAE]![SYM]。这将查询限制为 tblBond-Steps 中的记录,仅限于那些具有与表单中的该字段匹配的 SYM 字段的记录。这工作正常。但我希望能够为其他类型的债券复制和重用该表单,并且我不想在每个复制的表单中重写嵌入的查询。所以我想在查询条件中使用一个变量来引用当前表单。 在 *** 中How do I reference the current form in an expression in Microsoft Access? 给出的答案之后,我编写了一个名为“FormName()”的公共函数。这是函数:

Public Function FormName() As String
 Dim frmCurrentForm As Form
 Set frmCurrentForm = Screen.ActiveForm
 FormName = "[Form]![" & frmCurrentForm.Name & "]" & "![SYM]"

End Function

然后在组合框的嵌入查询中,我输入“FormName()”作为条件。这是该查询的 SQL:

SELECT [tblBond-Steps].SYM, [StepDate] & " @ " & [Cpn] AS Steps, Format([tblBond-Steps]. 
[StepCpn],"0.0000%") AS Cpn, [tblBond-Steps].StepDate
FROM [tblBond-Steps]
WHERE ((([tblBond-Steps].SYM)=FormName()))
ORDER BY [tblBond-Steps].StepDate;

但是,当我使用上述查询作为 cboSteps 的行源打开表单时,我收到 VBA 运行时错误“2475”:“您输入的表达式需要一个表单作为活动窗口。”

我不知道我做错了什么。有人可以帮我吗?

【问题讨论】:

感谢您尝试帮助我解决这个问题,Gustav,但在我更改公共函数 FormName() 以返回值而不是表达式后,我仍然遇到相同的错误 #2475。我一打开表单就会出现这个错误,它突出显示读取“Set frmCurrentForm = Screen.ActiveForm”的代码分配行。 更正之前的评论:我不知道我昨天在尝试使用 Gustav 的说明时在做什么。但是今天,使用他提供的更正代码,表单打开而不会导致运行时错误 #2475。非常感谢 Gustav 告诉我如何解决这个问题。 【参考方案1】:

你必须返回,而不是表达式:

Public Function FormName() As String

    Dim frmCurrentForm As Form

    Set frmCurrentForm = Screen.ActiveForm
    FormName = frmCurrentForm![SYM].Value

End Function

【讨论】:

以上是关于如何为查询中的条件使用变量以将查询限制为活动表单?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Hibernate 查询集成用户权限/限制?

如何为 Hibernate 查询注释添加限制?

如何编写查询以将两个帐户及其活动日志合并为一个? [关闭]

如何为复杂的 sql 查询获取中间数据。 PostgreSQL

如何为两个查询条件执行单个 Prepared Statement

如何为查询执行设置语句超时