我已经建立了一个数据库,下面的审核跟踪代码可以在Access 2010中的表单和子表单中正常使用。但是,由于现在我又在另一个数据库中使用了它,因此我首先收到一个错误“ Argument Not Optional” Call
。如果这两个数据库都以相同的精确方式创建了子表单,为什么要在一个数据库而不是另一个数据库中工作呢?除了不太有用的错误代码之外,我无法获得该数据库来为我提供更多信息。我最好的猜测是,这与它有关,Sub TrainingEntryAuditChanges(IDField As String, UserAction As String, FormToAudit As Form)
但我不能真正说出来。就像我说的那样,它只能在一个数据库中工作,但由于某种原因,它不能在一个数据库中工作。有任何想法吗?
模块代码:
***ABOVE CODE OMITTED INTENTIONALLY***
'Audit module code for employee training entry form's sub form
Sub TrainingEntryAuditChanges(IDField As String, UserAction As String, FormToAudit As Form)
On Error GoTo AuditChanges_Err
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim ctl As Control
Dim datTimeCheck As Date
Dim strUserID As String
Set cnn = CurrentProject.Connection
Set rst = New ADODB.Recordset
rst.Open "SELECT * FROM tblAuditTrail", cnn, adOpenDynamic, adLockOptimistic
datTimeCheck = Now()
strUserID = Forms!Login!cboUser.Column(1)
'Get computer IP address
Dim myWMI As Object, myobj As Object, itm
Set myWMI = GetObject("winmgmts:\\.\root\cimv2")
Set myobj = myWMI.ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True")
For Each itm In myobj
getMyIP = itm.IPAddress(0)
Next
'If user is editing an existing record:
Select Case UserAction
Case "EDIT"
For Each ctl In FormToAudit
If ctl.Tag = "Audit" Then
If Nz(ctl.Value) <> Nz(ctl.OldValue) Then
With rst
.AddNew
![DateTime] = datTimeCheck
![UserName] = strUserID
![UserComputer] = getMyIP
![FormName] = FormToAudit.Name
![Action] = UserAction
![RecordID] = FormToAudit.Controls(IDField).Value
![FieldName] = ctl.ControlSource
![OldValue] = ctl.OldValue
![NewValue] = ctl.Value
.Update
End With
End If
End If
Next ctl
'If a user is creating a new record:
Case Else
With rst
.AddNew
![DateTime] = datTimeCheck
![UserName] = strUserID
![UserComputer] = getMyIP
![FormName] = FormToAudit.Name
![Action] = UserAction
![RecordID] = FormToAudit.Controls(IDField).Value
.Update
End With
End Select
AuditChanges_Exit:
On Error Resume Next
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
Exit Sub
'If error then:
AuditChanges_Err:
Dim strError As String
Dim lngError As Long
Dim intErl As Integer
Dim strMsg As String
strError = Err.Description
lngError = Err.Number
intErl = Erl
strMsg = "Line : " & intErl & vbCrLf & _
"Error : (" & lngError & ")" & strError
MsgBox strMsg, vbCritical
Resume AuditChanges_Exit
End Sub
子窗体上的Before_Update代码:
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Me.NewRecord Then
Call TrainingEntryAuditChanges("ID", "NEW") ***ERROR THROWN HERE***
Else
Call TrainingEntryAuditChanges("ID", "EDIT")
End If
End Sub
在Argument Not Optional
当你调用与该程序所需的参数不正确的数字常规异常。
在你的代码中
Sub TrainingEntryAuditChanges(IDField As String, UserAction As String, FormToAudit As Form)
需要三个参数,IDField
,UserAction
,和FormToAudit
。
但是,在您的 Call
Call TrainingEntryAuditChanges("ID", "NEW") ***ERROR THROWN HERE***
您只传递了两个参数:ID
,NEW
。您需要将第三个参数传递给它(看起来像是form
)。尝试me
将第三个参数用作传递正在更新的“当前”格式,因此调用例程。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句