MS Access基于表单字段的查询条件

时间:2016-09-15 18:10:22

标签: sql ms-access if-statement

我正撞在这个墙上撞墙。如何让操作员根据表单字段处理查询条件。理想情况下,我希望它是这样的:

IIf([Afloat]="No",<[Forms]![DASF]![Text222],"")

当我删除操作符时,它会找到与该字段中的条件完全相符的内容,但是当我尝试将操作符设置为大于或小于该值时,它将无效。我试图找到小于该表单字段中的值的所有记录。

关于如何解决此问题的任何建议?或者在MS Access中是不可能的?提前谢谢。

3 个答案:

答案 0 :(得分:0)

QBF(按表单查询)不能接受公式中的运算符。您唯一的选择是即时编写查询。您可以使用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

答案 1 :(得分:0)

您可以尝试将第一个条件更改为:

>IIf([Afloat]="No",[Forms]![DASF]![Text222])  

然后在Or行中添加第二个标准:

=IIf([Afloat]<>"No","")

答案 2 :(得分:0)

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

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

    Private Sub Command2_Click()

    DoCmd.SetWarnings False 如果Me.Combo272 =“是”那么 DoCmd.OpenQuery“DASF_AGED_AS1_FLOAT”,acViewNormal,acEdit 其他 DoCmd.OpenQuery“DASF_AGED_AS1_NONFLOAT”,acViewNormal,acEdit

    结束如果 End Sub

  3. 这造成了另一个问题,我仍然无法引用查询条件所需的txt框。为了解决这个问题,我使用下面的VBA将所有文本框解除绑定,以根据另一个组合框自动填充文本框。这是我使用的VBA:

    Me.Text220 = DLookup(“REGION”,“TDD_TABLE”,“[ID] =”&amp; Me.Combo236)

  4. 希望这有助于将来的任何人!