3001: неверный аргумент - обязательные поля - PullRequest
0 голосов
/ 16 января 2019

Я работаю над базой данных Access, которую я хотел бы получить, чтобы получить больший контроль над сохранением записи. Одна из вещей, которую я хотел бы сделать, это проверить, что все обязательные поля в любой форме, вызывающей мою функцию SaveResponse, заполнены. Вот соответствующие фрагменты кода, которые я придумал.

Private Sub Form_BeforeUpdate(Cancel As Integer)
    SaveResponse(Form.Recordset)
End Sub

Public Function SaveResponse(rs As Recordset) As Long
    Dim response As VbMsgBoxResult, fld As Field    
    response = MsgBox("Do you want to save changes to this record?", vbQuestion + vbYesNo, "Save Record")

    If response = vbYes Then
        For Each fld In rs.Fields
            If fld.Required = True And Nz(fld, "") = "" Then
                MsgBox "The " & fld.Name & " field is required."
                SaveResponse = 2
                Exit Function
            End If
        Next
    ElseIf response = vbNo Then
        CodeContextObject.Undo
        SaveResponse = 1
        Exit Function
    End If
End Function

При запуске выдается ошибка: «3001: неверный аргумент»

Я думаю, что я сузил эту проблему до того места, где я на самом деле проверяю, является ли данное поле в наборе записей нулевым (код ниже).

Nz(fld, "") = ""

Я попробовал следующие варианты без удачи ...

Nz(fld.Value, "") = ""

Nz(rs.Fields(fld.Name).Value, "") = ""

IsNull(fld.Value)

IsNull(rs.Fields(fld.Name).Value)

Что мне не хватает? Как проверить обязательные поля в наборе записей на наличие нулевых значений?

Редактировать: Новый код ниже обращается к новым записям, которых еще нет в наборе записей, но возвращает «3265 Элемент не найден в этой коллекции».

Private Sub Form_BeforeUpdate(Cancel As Integer)
    SaveResponse(Form)
End Sub

Public Function SaveResponse(frm as Form) As Long
    Dim response As VbMsgBoxResult, rs as Recordset, ctl As Control, fldName As String   
    response = MsgBox("Do you want to save changes to this record?", vbQuestion + vbYesNo, "Save Record")

    If response = vbYes Then
        Set rs = frm.Recordset
        For Each ctl In frm.Controls
            fldName = ctl.ControlSource
            If rs(fldName).Required And Nz(fldName, "") = "" Then
                MsgBox "The " & fldName & " field is required."
                SaveResponse = 2
                Exit Function
            End If
        Next
    ElseIf response = vbNo Then
        CodeContextObject.Undo
        SaveResponse = 1
        Exit Function
    End If
End Function

На этот раз, я думаю, проблема в строке If rs(fldName).Required. Есть идеи?

...