Ms access 使所有字段都必须填写

Ms access 使所有字段都必须填写,ms-access,vba,Ms Access,Vba,这个问题从这里继续: 现在,我已经将字段连接到数据库中的一个表,我希望确保每个人都填写它们。单击导入按钮后,我想检查字段(SANumber、SerialNumber、CustomerName和LyoSize)以确保它是“有效上载” 到目前为止,我有以下代码: Function CheckInputs() As Boolean If Me.SANumber.value Or Me.SerialNumber.value Or Me.CustomerName.value Or Me.LyoSize.

这个问题从这里继续:

现在,我已经将字段连接到数据库中的一个表,我希望确保每个人都填写它们。单击导入按钮后,我想检查字段(SANumber、SerialNumber、CustomerName和LyoSize)以确保它是“有效上载”

到目前为止,我有以下代码:

Function CheckInputs() As Boolean

If Me.SANumber.value Or Me.SerialNumber.value Or Me.CustomerName.value Or Me.LyoSize.value = Null Then
 CheckInputs = True
Else
 CheckInputs = False
End If

 End Function

'Import MCL Files Code
Private Sub ImportMCL_Click()

On Error GoTo ErrorHandler
'disable ms access warnings
DoCmd.SetWarnings False

Call CheckInputs
If CheckInputs = True Then
MsgBox "All inputs must be entered!"
Exit Sub
Else

'load spreadsheet in .xls format
DoCmd.TransferSpreadsheet acImport, 8, "_MCL_UPLOAD", selectFile(), True
DoCmd.OpenQuery "UpdateMCL"
Call InsertInto_MASTER_UPLOAD
Call Delete_MCL_UPLOAD
MsgBox "MCL Imported Successfully!"
're-enable ms access warnings
DoCmd.SetWarnings True    
End If

Exit Sub

ErrorHandler:
MsgBox "There was an Error: " & Err & ": " & Error(Err)

End Sub
它应该会起作用,但会继续给我动力

错误:13。类型不匹配


您需要专门检查每个字段是否为空-您不能这样做:

If Me.SANumber.value Or Me.SerialNumber.value Or _
   Me.CustomerName.value Or Me.LyoSize.value = Null Then
差不多

If IsNull(Me.SANumber) Or IsNull(SerialNumber) Or _
   IsNull(Me.CustomerName) Or IsNull(Me.LyoSize) = Null Then

您应该将函数重命名为类似“EmptyInputs”的名称,以使代码更具自文档性。“CheckInputs”有点非描述性。

您需要专门检查每个字段是否为空-您不能这样做:

If Me.SANumber.value Or Me.SerialNumber.value Or _
   Me.CustomerName.value Or Me.LyoSize.value = Null Then
差不多

If IsNull(Me.SANumber) Or IsNull(SerialNumber) Or _
   IsNull(Me.CustomerName) Or IsNull(Me.LyoSize) = Null Then
您应该将函数重命名为类似“EmptyInputs”的名称,以使代码更具自文档性。“CheckInputs”有点非描述性。

您的CheckInputs()函数逻辑不正确。如果满足任何一个条件,则返回true
要获得您想要的结果,您可以询问does:
如果条件1=true,条件2=true,并且……
否则,您可以询问条件1是否为false或条件2是否为false或……
试试这个

Function isFormValid() As Boolean

    If isTextFieldInvalid(Me.SANumber) Or isTextFieldInvalid(Me.SerialNumber) Or isTextFieldInvalid(Me.CustomerName.Value) Or Me.LyoSize.Value = Null Then
        isFormValid = False
    Else
        isFormValid = True
    End If

End Function

Function isTextFieldInvalid(FieldControl) As Boolean
    If Not IsNull(FieldControl) Then
        If Len(Trim(FieldControl.Value)) Then
            isFieldValid = True
        End If
    End If
End Function

'Import MCL Files Code
Private Sub ImportMCL_Click()

    On Error GoTo ErrorHandler
    'disable ms access warnings
    DoCmd.SetWarnings False

    If isFormValid Then
        MsgBox "All inputs must be entered!"
        Exit Sub
    Else

        'load spreadsheet in .xls format
        DoCmd.TransferSpreadsheet acImport, 8, "_MCL_UPLOAD", selectFile(), True
        DoCmd.OpenQuery "UpdateMCL"
        Call InsertInto_MASTER_UPLOAD
        Call Delete_MCL_UPLOAD
        MsgBox "MCL Imported Successfully!"
        're-enable ms access warnings
        DoCmd.SetWarnings True
    End If

    Exit Sub

ErrorHandler:
    MsgBox "There was an Error: " & Err & ": " & Error(Err)

End Sub
CheckInputs()函数的逻辑不正确。如果满足任何一个条件,则返回true
要获得您想要的结果,您可以询问does:
如果条件1=true,条件2=true,并且……
否则,您可以询问条件1=false或Condition2=false或….
试试这个

Function isFormValid() As Boolean

    If isTextFieldInvalid(Me.SANumber) Or isTextFieldInvalid(Me.SerialNumber) Or isTextFieldInvalid(Me.CustomerName.Value) Or Me.LyoSize.Value = Null Then
        isFormValid = False
    Else
        isFormValid = True
    End If

End Function

Function isTextFieldInvalid(FieldControl) As Boolean
    If Not IsNull(FieldControl) Then
        If Len(Trim(FieldControl.Value)) Then
            isFieldValid = True
        End If
    End If
End Function

'Import MCL Files Code
Private Sub ImportMCL_Click()

    On Error GoTo ErrorHandler
    'disable ms access warnings
    DoCmd.SetWarnings False

    If isFormValid Then
        MsgBox "All inputs must be entered!"
        Exit Sub
    Else

        'load spreadsheet in .xls format
        DoCmd.TransferSpreadsheet acImport, 8, "_MCL_UPLOAD", selectFile(), True
        DoCmd.OpenQuery "UpdateMCL"
        Call InsertInto_MASTER_UPLOAD
        Call Delete_MCL_UPLOAD
        MsgBox "MCL Imported Successfully!"
        're-enable ms access warnings
        DoCmd.SetWarnings True
    End If

    Exit Sub

ErrorHandler:
    MsgBox "There was an Error: " & Err & ": " & Error(Err)

End Sub

此外,如果您在事后通过类似SANumber=“”的方式进行清理,那么测试空值可能不起作用。我会检查空值和空值。这是您可以使用的通用模板

Dim LResponse As Integer
If (Nz(Me.SANumber.Value) = "") Then
    MsgBox "Please enter a SA Number.", vbCritical + vbOKOnly, "Error"
ElseIf (Nz(Me.SerialNumber.Value) = "") Then
   MsgBox "Please enter a Serial Number.", vbCritical + vbOKOnly, "Error"

'All criteria met
Else
    LResponse = MsgBox("Would you like to submit? ", vbQuestion + vbYesNo, "Question")
    If LResponse = vbYes Then
        'enter code here
    ElseIf LResponse = vbNo Then
        MsgBox ("Not submitted.")
    End If
End If

此外,如果您在事后通过类似SANumber=“”的方式进行清理,那么测试空值可能不起作用。我会检查空值和空值。这是您可以使用的通用模板

Dim LResponse As Integer
If (Nz(Me.SANumber.Value) = "") Then
    MsgBox "Please enter a SA Number.", vbCritical + vbOKOnly, "Error"
ElseIf (Nz(Me.SerialNumber.Value) = "") Then
   MsgBox "Please enter a Serial Number.", vbCritical + vbOKOnly, "Error"

'All criteria met
Else
    LResponse = MsgBox("Would you like to submit? ", vbQuestion + vbYesNo, "Question")
    If LResponse = vbYes Then
        'enter code here
    ElseIf LResponse = vbNo Then
        MsgBox ("Not submitted.")
    End If
End If

哪一行出错?我假设它在CheckInputs()函数中的某个地方,但在调试器中没有显示任何特定内容。当所有输入字段都为空时,它会愉快地接受上载,但当我将它们全部填写(按预期的方式)时,我会出现此错误。在“If Me.SANumber.Value or…”上添加一个断点。当代码暂停时,检查立即窗口中所有这些字段的值,并查看是否有特定错误。如果他们这样做,这些信息将有助于我们诊断问题。错误在哪一行?我假设它在CheckInputs()函数中的某个位置,但调试器中没有显示任何特定的内容。当所有输入字段都为空时,它会愉快地接受上载,但当我将它们全部填写(按预期的方式)时,我会出现此错误。在“If Me.SANumber.Value or…”上添加一个断点。当代码暂停时,检查立即窗口中所有这些字段的值,并查看是否有特定错误。如果他们这样做,这些信息将有助于我们诊断问题。我只是将其更改为:Me.SANumber.value=Null或Me.SerialNumber.value=Null或Me.CustomerName.value=Null或Me.LyoSize.value=Null。。。我现在不再得到错误,但是代码完全忽略了函数(如果没有填充任何值,它仍然接受导入),这工作得非常好。这个问题可能是因为我有自己的价值?我还更改了函数名。非常感谢。您的代码只测试了最后一个字段的Null值——所有其他字段都经过了有效的“真实性”测试(我对Access不太熟悉,所以我不能确切地说这在实践中意味着什么)我刚刚将其更改为:Me.SANumber.value=Null或Me.SerialNumber.value=Null或Me.CustomerName.value=Null或Me.LyoSize.value=Null。。。我现在不再得到错误,但是代码完全忽略了函数(如果没有填充任何值,它仍然接受导入),这工作得非常好。这个问题可能是因为我有自己的价值?我还更改了函数名。非常感谢。您的代码只测试了最后一个字段的Null值——所有其他字段都经过了有效的“真实性”测试(我对Access不太熟悉,所以我不能确切地说这在实践中意味着什么)