2016-06-08 31 views
0

来填充这个问题就是从这里继续。Add user input to Excel table upon upload to Access database使所有项目都必须填写在

现在,我有我的领域连接到一个表在我的数据库,我想确保每个人都充满他们一旦点击导入按钮,我想检查字段(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 

它应该工作,但继续给我

ERROR: 13. Type Mismatch

+0

错误在哪一行? – newguy

+0

我假设它在CheckInputs()函数的某个地方,但没有具体显示在调试器中。当所有的输入字段都是空的,它很高兴地接受上传,但是当我把它们全部填入(它们应该是的方式)时,我得到这个错误。 – cdomination

+0

在“如果Me.SANumber.Value或....”上添加一个断点。当代码暂停时,检查立即窗口中所有这些字段的值,看看是否有任何给你具体的错误。如果他们这样做,那些信息对我们诊断问题将会有帮助。 –

回答

2

您需要特别检查每个字段为空 - 你不能做这个方法:

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”有点不具说明性。

+0

我只是将其更改为:Me.SANumber.value = Null或Me.SerialNumber.value = Null或Me.CustomerName.value = Null或Me.LyoSize.value = Null ...我现在不再收到错误,但代码完全浏览了该函数(如果没有填充任何值,它仍然接受导入) – cdomination

+0

这很好。问题可能是因为我拥有我。*。价值?我也改变了函数名称。谢谢! – cdomination

+1

你的代码只测试了* last *字段的Null值 - 所有其他字段都只是针对“真实性”进行了有效测试(我不熟悉Access,所以我不能确切地说在实际中这将意味着什么) –

1

您的CheckInputs()函数逻辑不正确。或者如果满足任何一个条件将返回true。
要得到您想要的结果,您可以这样做:
如果Condition1 = true AND Condition2 = true AND ...
否则,您可以询问If Condition1 = false OR Condition2 = false OR ....
试试这个...

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 
1

此外,如果您通过进行类似于SANumber =“”的操作后清除,则可能无法测试Null。我会检查零值和空白。这是您可以使用的通用模板。

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 
相关问题