【问题标题】:Use an Access Forms Unbound text box as a Field filter in a table使用 Access Forms Unbound 文本框作为表中的字段过滤器
【发布时间】:2015-10-16 13:42:24
【问题描述】:

Access 2013 - 引用表单上的未绑定文本框

我目前正在尝试在表单名称 [DCM_Gap_Servers] 上使用未绑定的文本框 [Text161] 来对表格中的信息进行排序。我希望我创建的查询能够将来自[DCM_Gap_Servers]![Text161] 的用户输入作为从表名“服务器”中排序的字段。

这是我现在在查询中使用的 SQL:

SELECT * FROM Servers WHERE "Forms![DCM_Gap_Servers]![Text161]" IS NULL

** 我已经尝试过了:

"Forms![DCM_Gap_Servers]![Text161]" ; (Forms![DCM_Gap_Servers]![Text161]); Forms.[DCM_Gap_Servers]![Text161]     

如果我用我正在使用的实际字段名称替换文本框引用,这将随时可用,但由于有数百种字段组合,我需要引用才能工作。

我翻遍了,似乎找不到正确的答案。如果需要,我愿意在 VBA 中执行此操作,以正确完成过滤。

谢谢。

【问题讨论】:

    标签: sql vba reference ms-access-2013


    【解决方案1】:

    它是:

    SELECT * FROM Servers WHERE Forms.[DCM_Gap_Servers].[Text161] IS NULL
    

    但只要您的文本框为 Null,那只会选择所有记录。

    其实是这样的:

    SELECT * FROM Servers WHERE SomeField = Forms.[DCM_Gap_Servers].[Text161] 
    

    要将表单值用作字段名,必须使用串联 SQL:

    strSQL = "SELECT * FROM Servers WHERE " & Forms![DCM_Gap_Servers]![Text161].Value & " IS NULL"
    

    您可以将其传递给现有查询对象的 SQL 属性:

    MyQueryDef.SQL = strSQL
    

    或者:

    Constant SQL As String = "SELECT * FROM Servers WHERE {0} IS NULL"
    FieldName = Forms![DCM_Gap_Servers]![Text161].Value
    MyQueryDef.SQL = Replace(strSQL, "{0}", FieldName)
    

    当然,请注意字段名称不是零长度字符串。

    【讨论】:

    • 不幸的是,这仍然不起作用。当我尝试运行查询时,会出现一个“输入参数值”框。看来我不认为这是答案。
    • 仍然不知道你想完成什么。如果过滤某个字段,请将SomeField 替换为该字段的名称。
    • 这就是我的问题所在。我试图对每个表进行一个查询,但每个表都有超过 25 个字段。我试图避免为每个字段名称创建一个唯一的查询,这就是为什么我试图让文本框更改查询中的值,以便我可以使用一个查询。对不起,如果我的问题有点令人困惑,这似乎是一个独特的情况。
    • 请看我的扩展答案。
    • 所以我假设您打算使用 VBA 完成此操作?我正在尝试跟随,但是当我使用 VBA 时,我继续收到“需要对象”的错误。我正在表单上创建一个按钮,然后将该代码应用于该按钮,以便在该框(字段名称)中输入文本时,宏将运行代码以应用过滤器。你介意告诉我我做错了什么吗?
    猜你喜欢
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多