access dlookup multiple criteria返回布尔值和ordertype不等于

时间:2018-04-04 20:37:49

标签: vba ms-access access-vba

Private Function AllowPurge(FileID As String) As Boolean
Dim result As Boolean
Dim i As Integer

i = DLookup("COUNT(*)", "OrderMaster", "OrderStatus='S' AND FileID=" & FileID, "AND OrderType='E'")
If i > 0 Then
    result = False
Else
    result = True
End If

AllowPurge = result
End Function

OrderStatus标记为已发货或已开启' S'或者' O'。

我需要:

  • 允许清除 - 如果除E订单之外的每个订单仍处于打开状态。
  • 不允许清除 - 如果任何订单(E订单除外)标记为已发货。

3 个答案:

答案 0 :(得分:0)

DLookup用于查找单个值。

DCount用于计算。

试试这个:

Function AllowPurge(FileID As String) As Boolean

    AllowPurge = (0 = DCount("FileID", "OrderMaster", "OrderStatus='S' _
        AND FileID='" & FileID "' AND OrderType='E'"))

Exit Function

(假设该表名为OrderMaster

你非常接近,除了在字符串周围缺少单引号,并且缺少空格,并且有一个额外的逗号。

逻辑会以同样的方式发挥作用,这只是一种替代(更短)的形式。

<子> <子> Thanks Lee Mac!

答案 1 :(得分:0)

根据您陈述的逻辑:

  

我需要:

     
      
  • 允许清除 - 如果除E订单之外的每个订单仍处于打开状态。
  •   
  • 不允许清除 - 如果任何订单(E订单除外)标记为已发货。
  •   

我建议如下:

Function AllowPurge(FileID As String) As Boolean
    AllowPurge = IsNull(DLookup("FileID", "OrderMaster", "OrderStatus='S' AND FileID='" & FileID & "' AND OrderType<>'E'"))
End Function

此处,只有每个非电子订单(True)被标记为已发货(OrderType<>'E')时,该功能才会返回OrderStatus='S'

您当前的代码似乎正在测试已发货的“电子订单”,而不是检查每个非电子订单是否已打开。

答案 2 :(得分:0)

感谢您的回复

我尝试了这个并且似乎正在运作:

i = DLookup("COUNT(*)", "OrderMaster", "OrderType'E' AND OrderStatus='S' AND FileID=" & FileID)