MS Access查询条件根据表格中的字段
我在这一块上撞墙。如何让操作员在基于表单域的查询条件下工作?理想情况下,我想它是这样的:MS Access查询条件根据表格中的字段
IIf([Afloat]="No",<[Forms]![DASF]![Text222],"")
当我删除操作员发现任何东西正好在该领域的标准,但我尽量把操作员像大于或小于它不是一时工作。我试图找到所有记录小于该表单字段中的值。
有关如何解决此问题的任何建议?或者在MS Access中不可行?提前致谢。
QBF(Query By Form)无法接受公式中的运算符。您唯一的选择是即时编写查询。您可以使用CreateQueryDef方法在特定查询中定义SQL,并将表单或报表附加到特定查询名称。
喜欢的东西:
Dim db as Database
Dim rec as Recordset
Dim qdf As QueryDef
Dim strSQL as String
Set db = CurrentDB
On Error Resume Next
'First, delete the query if it exists
db.QueryDefs.Delete "MyQueryName"
'Then, set up the query string
strSQL = "Select * From MyTable Where MyField < " & [Forms]![DASF]![Text222] & " and [Afloat] = 'No' "
strSQL = strSQL & "UNION "
strSQL = strSQL & "Select * From MyTable Where MyField = '' and [Afloat] <> 'No' "
'Now, recreate the query
Set qdf = db.CreateQueryDef("MyQueryName", strSQL)
DoCmd.OpenQuery qdf.Name
此声明不正确“* QBF(Query By Form)无法接受运算符*”。当然,OP在尝试时不能使用它,但是在IIF声明之外使用操作符肯定有方法,并将它与其他标准行结合使用 – dbmitch
你可以尝试改变第一标准:
>IIf([Afloat]="No",[Forms]![DASF]![Text222])
然后在或LINE它下面添加第二个标准:
=IIf([Afloat]<>"No","")
我最终通过将它分解为两个单独的查询来解决我的问题。以下是我的步骤:
- 而不是有一个逻辑表达式来决定我将它分成 FLOAT和NONFLOAT查询。
-
然后我创建了一个命令按钮,根据组合框中的条件(是或否)打开 每个查询。 下面是代码:
私人小组Command2_Click()
DoCmd.SetWarnings假 如果Me.Combo272 = “是”,那么 DoCmd.OpenQuery “DASF_AGED_AS1_FLOAT”,acViewNormal,acEdit 否则 DoCmd.OpenQuery “DASF_AGED_AS1_NONFLOAT”,acViewNormal,acEdit
结束如果 结束小组
-
这创造了另一个问题,我仍然无法参考,我的查询条件必需的txt框。为了解决这个问题,我使用下面的VBA将所有文本框解除绑定,从而基于另一个组合框自动填充文本框。这里是我使用了VBA:
Me.Text220 =使用DLookup( “区”, “TDD_TABLE”, “[ID] =” & Me.Combo236)
希望这有助于任何人在未来!
如果您的问题与Access有关,请不要使用'mysql'标签。 – Barmar
你的'IIF()'表达式有一些错误。首先,第二个参数应该是一个值而不是逻辑表达式。其次,您在查询表单中应用了什么值?你需要一个左手价值。接下来,'IIF()'不是所有记录上的过滤器,而是列式逻辑。最后,你的总体目标是什么?请发布更完整的查询和一些上下文。 – Parfait
您有用于引用表单字段的正确语法 - 您只需将比较从IIF语句中提取出来并放在前面。不知道你想要的其他标准是什么,但我认为你希望它等于“”? - 看到我下面的答案 – dbmitch