[英]How can I add criteria based on a form field to an Access query?
如何让运算符在基于表单字段的查询条件中工作。 理想情况下,我希望它是这样的:
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
您可以尝试将第一个条件更改为:
>IIf([Afloat]="No",[Forms]![DASF]![Text222])
然后在 Or 行中在其下方添加第二个条件:
=IIf([Afloat]<>"No","")
我最终通过将它分成两个单独的查询来解决我的问题。 以下是我的步骤:
然后我创建了一个命令按钮,根据组合框中的条件(是或否)打开每个查询。 这是代码:
Private Sub Command2_Click() DoCmd.SetWarnings False If Me.Combo272 = "Yes" Then DoCmd.OpenQuery "DASF_AGED_AS1_FLOAT", acViewNormal, acEdit Else DoCmd.OpenQuery "DASF_AGED_AS1_NONFLOAT", acViewNormal, acEdit End If End Sub
这产生了另一个问题,我仍然无法引用查询条件所需的 txt 框。 为了解决这个问题,我通过使用下面的 VBA 自动填充基于另一个组合框的文本框来取消所有文本框的绑定。 这是我使用的VBA:
Me.Text220 = DLookup("REGION", "TDD_TABLE", "[ID]= " & Me.Combo236)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.