来自另一个表的Access 2010 DMax Ms(MS Access无法找到表达式中引用的字段'| 1')

时间:2018-06-08 16:54:38

标签: ms-access access-vba ms-access-2010

我一直试图让Dmax(如果这是正确的方法)返回列中的最大值。表单具有一个控件,用于检查以在On Change事件中验证输入的值。该事件应检查另一个表(Material PO数据表)以获取最大值。如果文本框中的值(PO_NUM)小于另一个表的最大值,则会弹出一个消息框,通知该情况并撤消该框中的输入。但是,我被困在Dmax线上。

Private Sub PO_Num_Change()

Dim MaxNum As Long
DoCmd.OpenTable "MATERIAL PO DATASHEET"

MaxNum = DMax([MATERIAL PO DATASHEET]![PO NUMBER], [MATERIAL PO DATASHEET])

If Me.PO_Num.Value <= MaxNum Then
    strMsg = "This PO Exists!"
        If MsgBox(strMsg, vbExclamation, "Confirm") = vbOK Then
            Me.Undo
        Else
            Me.Undo
        End If

End If
DoCmd.Close , "MATERIAL PO DATASHEET"
End Sub

我收到的错误是“运行时错误2465:MS Access无法找到表达式中引用的字段'| 1'”。这个错误让我觉得某些东西可能输错了,但所有字段似乎都匹配。该表在DoCmd行上打开(没有问题),并在DMax停止。

我也尝试过:

MaxNum = DMax([PO NUMBER], "MATERIAL PO DATASHEET")

MaxNum = DMax([PO NUMBER], [MATERIAL PO DATASHEET])

我感谢任何反馈,

谢谢,

迈克尔

1 个答案:

答案 0 :(得分:1)

Private Sub PO_Num_Change()
    Dim MaxNum As Long
    MaxNum = DMax("[PO NUMBER]", "[MATERIAL PO DATASHEET]")
    If Me.PO_Num.Value <= MaxNum Then
        strMsg = "This PO Exists!"
        If MsgBox(strMsg, vbExclamation, "Confirm") = vbOK Then
            Me.Undo
        Else
            Me.Undo
        End If
    End If
End Sub

Dxxxx函数的所有参数都必须在引号中

写这个的替代方法(没有不必要的变量)

Private Sub PO_Num_Change()
    If Me.PO_Num.Value <= DMax("[PO NUMBER]", "[MATERIAL PO DATASHEET]") Then
        strMsg = "This PO Exists!"
        If MsgBox(strMsg, vbExclamation, "Confirm") = vbOK Then
            Me.Undo
        Else
            Me.Undo
        End If
    End If
End Sub

我认为这甚至可能更简单

 IF IsNull(DLookup("[PO NUMBER]", "[MATERIAL PO DATASHEET]", "[PO Number]=" & Me.PO_Num))= False Then
     MsgBox "Found it"
 Else
     'Nothing
 END if