使用Access Forms Unbound文本框作为表中的Field过滤器

时间:2015-10-16 13:42:25

标签: sql vba reference ms-access-2013

Access 2013 - 在表单

上引用未绑定文本框

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

这是我现在在查询中使用的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中这样做,无论如何正确地完成过滤。

谢谢。

1 个答案:

答案 0 :(得分:0)

是:

SELECT * FROM Servers WHERE Forms.[DCM_Gap_Servers].[Text161] IS 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)

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