Я работаю над базой данных 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
. Есть идеи?