2016-09-15 91 views
0

我在这一块上撞墙。如何让操作员在基于表单域的查询条件下工作?理想情况下,我想它是这样的:MS Access查询条件根据表格中的字段

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

当我删除操作员发现任何东西正好在该领域的标准,但我尽量把操作员像大于或小于它不是一时工作。我试图找到所有记录小于该表单字段中的值。

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

+0

如果您的问题与Access有关,请不要使用'mysql'标签。 – Barmar

+0

你的'IIF()'表达式有一些错误。首先,第二个参数应该是一个值而不是逻辑表达式。其次,您在查询表单中应用了什么值?你需要一个左手价值。接下来,'IIF()'不是所有记录上的过滤器,而是列式逻辑。最后,你的总体目标是什么?请发布更完整的查询和一些上下文。 – Parfait

+0

您有用于引用表单字段的正确语法 - 您只需将比较从IIF语句中提取出来并放在前面。不知道你想要的其他标准是什么,但我认为你希望它等于“”? - 看到我下面的答案 – dbmitch

回答

0

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 
+0

此声明不正确“* QBF(Query By Form)无法接受运算符*”。当然,OP在尝试时不能使用它,但是在IIF声明之外使用操作符肯定有方法,并将它与其他标准行结合使用 – dbmitch

0

你可以尝试改变第一标准:

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

然后在或LINE它下面添加第二个标准:

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

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

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

    私人小组Command2_Click()

    DoCmd.SetWarnings假 如果Me.Combo272 = “是”,那么 DoCmd.OpenQuery “DASF_AGED_AS1_FLOAT”,acViewNormal,acEdit 否则 DoCmd.OpenQuery “DASF_AGED_AS1_NONFLOAT”,acViewNormal,acEdit

    结束如果 结束小组

  3. 这创造了另一个问题,我仍然无法参考,我的查询条件必需的txt框。为了解决这个问题,我使用下面的VBA将所有文本框解除绑定,从而基于另一个组合框自动填充文本框。这里是我使用了VBA:

    Me.Text220 =使用DLookup( “区”, “TDD_TABLE”, “[ID] =” & Me.Combo236)

希望这有助于任何人在未来!