使用非VBA运算符

使用非VBA运算符,vba,boolean,Vba,Boolean,我有一个我认为很简单的问题。如果我没有正确地使用或缺少其他内容,则不会。如果我的记录集: 有两个字段 ADO记录集中至少有一个字段具有非空值 值(如果两个字段的IsNull均为真,则执行Elseblock) 否则,我需要执行Else块 If rSetFlag.Fields.Count = 2 And _ Not (IsNull(rSetFlag.Fields(0)) And IsNull(rSetFlag.Fields(1))) Then QueryFlag

我有一个我认为很简单的问题。如果我没有正确地使用
或缺少其他内容,则不会。如果我的记录集:

  • 有两个字段
  • ADO记录集中至少有一个字段具有非空值 值(如果两个字段的
    IsNull
    均为真,则执行
    Else
    block)
  • 否则,我需要执行
    Else

        If rSetFlag.Fields.Count = 2 And _
           Not (IsNull(rSetFlag.Fields(0)) And IsNull(rSetFlag.Fields(1))) Then
    
           QueryFlags = rSetFlag.Fields(0) & "|" & rSetFlag.Fields(1)
        Else
            QueryFlags = rSetFlag.Fields(0)
        End If
    
    我没有得到正确的运算符优先级吗?我尝试了其他几种方法,包括
    IsNull
    语句中
    Debug.Print
    返回以下内容(不需要前两项):


    那么让我们简单一点。。。。使用以下方法:如果仍然失败,请放置断点并检查值

    If rSetFlag.Fields.Count = 2 Then
        If IsNull(rSetFlag.Fields(0)) And IsNull(rSetFlag.Fields(1)) Then
            QueryFlags = rSetFlag.Fields(0)
        Else
            QueryFlags = rSetFlag.Fields(0) & "|" & rSetFlag.Fields(1)
        End If
    Else
        QueryFlags = rSetFlag.Fields(0)
    End If
    
    试试这个:

    If (rSetFlag.Fields.Count = 2) And ((Not IsNull(rSetFlag.Fields(0))) Or (Not IsNull(rSetFlag.Fields(1)))) Then
    
       QueryFlags = rSetFlag.Fields(0) & "|" & rSetFlag.Fields(1)
    Else
        QueryFlags = rSetFlag.Fields(0)
    End If
    

    rSetFlag.Fields.Count=2且不为(IsNull(rSetFlag.Fields(0))和IsNull(rSetFlag.Fields(1))时,
    是否为真?如果
    rSetFlag.Fields.Count=2
    IsNull(rSetFlag.Fields(0))和IsNull(rSetFlag.Fields(1))
    为FALSE。当两者都不为null时,第二个为false。如果要在其中一个字段至少为非空时执行,则必须使用
    Not(IsNull(rSetFlag.Fields(0)))或Not(IsNull(rSetFlag.Fields(1))
    而不是
    Not(IsNull(rSetFlag.Fields(0))和IsNull(rSetFlag.Fields(1))
    此处的
    &
    符号错误。
    也许 吧: 尝试使用
    rSetFlag.Fields(1.value)检查
    也许 吧:
    前两个条目在这里,因为字段中的值不是
    NULL
    ,而是
    的空字符串。
    如果没有值,可以使用
    Len(Nz(rSetFlag.Fields(1).value,vbNullString))=0检查它。
    可能的解决办法:

    If rSetFlag.Fields.Count = 2 And _
       Not (Len(Nz(rSetFlag.Fields(0).value, vbNullString)) = 0 _
            And _
            Len(Nz(rSetFlag.Fields(1).value, vbNullString)) = 0) Then
    
        QueryFlags = rSetFlag.Fields(0) & "|" & rSetFlag.Fields(1)
    Else
        QueryFlags = rSetFlag.Fields(0)
    End If
    

    我尝试了这个,但它仍然返回
    |
    ,两边都没有数据。我更改了答案以简化逻辑。如果仍然失败,请设置断点。您是否有“Option Explicit”并编译了所有代码?这也会返回
    |
    。这不起作用,我需要对这两个字段进行相等的计算。在上面的
    Debug.Print
    image中,
    Poufs和附件|
    | Exclude
    足以执行
    if
    块。感谢您为我指明了正确的方向。我忘了提到我在Excel中使用VBA。新西兰在Access图书馆。现在解决了吗?通过使用
    len(IIF(IsNull(rSetFlag.Fields(0)),“”,rSetFlag.Fields(0))=0
    ?或者其他方式?是的,谢谢你的帮助!虽然我会说我的ADO查询返回空格和null on和off。