Ms Access 2010 DMax из другой таблицы (MS Access не может найти поле '| 1', указанное в вашем выражении) - PullRequest
0 голосов
/ 08 июня 2018

Я пытался получить Dmax, если это правильный метод, чтобы вернуть максимальное значение в столбце.Форма имеет элемент управления, который проверяет правильность введенного значения в событии On Change.Событие должно проверить другую таблицу (Material PO Datasheet), чтобы получить максимальное значение.Если значение в текстовом поле (PO_NUM) меньше, чем значение Max другой таблицы, появляется всплывающее окно с информацией о ситуации и отменяет ввод в поле.Однако я застрял на линии 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 голосов
/ 08 июня 2018
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
...