2015-03-25 5 views
1

Доброго день всемVBA несоответствие типов в доступе

Я attmepting реализовать аудит за небольшую базу данных здесь на работе, и я одолжил свой код с сайта Martin Зеленого Fontstuff Martin Green's Audit trail

поэтому у меня есть модуль кода, который constist из

Sub AuditChanges(IDField As String) 
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 
Dim strReason As String 
Dim strName As String 

Set cnn = CurrentProject.Connection 
Set rst = New ADODB.Recordset 
rst.Open "SELECT * FROM tblAuditTrail", cnn, adOpenDynamic, adLockOptimistic 
datTimeCheck = Now() 
strUserID = Environ("USERNAME") 

strReason = InputBox("Enter Reason", "Reason") 
'strName = InputBox("Enter Name", "Name") 

For Each ctl In Screen.ActiveForm.Controls 
    If ctl.Tag = "Audit" Then 
     If Nz(ctl.Value) <> Nz(ctl.OldValue) Then 
      With rst 
       .AddNew 
       ![DateTime] = datTimeCheck 
       ![UserName] = strUserID 
       ![FormName] = Screen.ActiveForm.Name 
       ![RecordID] = Screen.ActiveForm.Controls(IDField).Value 
       ![FieldName] = ctl.ControlSource 
       ![OldValue] = ctl.OldValue 
       ![NewValue] = ctl.Value 
       ![Reason] = strReason 
       ![Name] = CurrentUser() 
       .Update 
      End With 
     End If 
    End If 
Next ctl 

AuditChanges_Exit: 
On Error Resume Next 
rst.Close 
cnn.Close 
Set rst = Nothing 
Set cnn = Nothing 
Exit Sub 

AuditChanges_Err: 
MsgBox Err.Description, vbCritical, "ERROR!" 
Resume AuditChanges_Exit 
End Sub 

и короткая линия в перед методом обновления каждого элемента управления на форме следующим образом

If Not Me.NewRecord Then Call AuditChanges("ID") 

Моя проблема в том, что если я запустил базу данных на машине с Windows 7, все будет работать так, как должно.

У нас есть несколько компьютеров с XP, на которых должен быть доступ к дБ, и по какой-то причине я получаю ошибку несоответствия типа при выполнении кода, к сожалению, я не могу легко получить доступ к этим машинам, поскольку они находятся на другой сайт

Любые идеи?

Thanks

+0

unfortunatley У меня нет доступа к машине XP они находятся на другом сайте 60 миль –

+0

сделано спасибо за указатель Hans –

+2

Возможно ли это версия ADO? Windows 7, где вы разрабатываете, имеет доступ к более поздней версии, чем машина XP. https://msdn.microsoft.com/en-us/library/windows/desktop/ms676506%28v=vs.85%29.aspx – Sobigen

ответ

0

Это консолидация всех комментариев в ответ.

Проверьте версию удаленных компьютеров в ADO. Windows 7, где вы разрабатываете, имеет доступ к более поздней версии, чем машина XP. https://msdn.microsoft.com/en-us/library/windows/desktop/ms676506%28v=vs.85%29.aspx


От HansUp Вы можете задать удаленный пользователь выполнить это в одной строке в окне Access Immediate:

for i = 1 to references.count : ? references(i).Name, references(i).Major, references(i).Minor, references(i).IsBroken : next 

Если ничего не показывает Справедливо для IsBroken, версия библиотеки не является причиной вашей проблемы ,