繁体   English   中英

如何将基于表单字段的条件添加到 Access 查询?

[英]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","")

我最终通过将它分成两个单独的查询来解决我的问题。 以下是我的步骤:

  1. 我没有用逻辑表达式来决定,而是将它分成了 FLOAT 和 NONFLOAT 查询。
  2. 然后我创建了一个命令按钮,根据组合框中的条件(是或否)打开每个查询。 这是代码:

     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
  3. 这产生了另一个问题,我仍然无法引用查询条件所需的 txt 框。 为了解决这个问题,我通过使用下面的 VBA 自动填充基于另一个组合框的文本框来取消所有文本框的绑定。 这是我使用的VBA:

     Me.Text220 = DLookup("REGION", "TDD_TABLE", "[ID]= " & Me.Combo236)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM