2016-08-19 2 views
2

나는오류 3251 내가 현재 MS-액세스 2010 데이터베이스에 감사 추적을 추가하는 작업입니다

고민하고 이 기능은,571,416,994,142에 호출

Public Function auditChanges(RecordID As String, userAction As String, cForm As Form) 
    Dim db As DAO.Database 
    Dim rst As DAO.Recordset 
    Dim ctl As Control 
    Dim userLogin As String 

    Set db = CurrentDb 
    Set rst = db.OpenRecordset("SELECT * FROM T_AUDIT") 
    userLogin = getCurrentUser 

    Select Case userAction 
     Case "New" 
      With rst 
       .AddNew 
       ![Date] = Now() 
       ![utilisateur] = userLogin 
       ![nomFormulaire] = cForm.Name 
       ![Action] = userAction 
       ![RecordID] = cForm.Controls(RecordID).Value 
       .Update 
      End With 
     Case "Delete" 
      With rst 
       .AddNew 
       ![Date] = Now() 
       ![utilisateur] = userLogin 
       ![nomFormulaire] = cForm.Name 
       ![Action] = userAction 
       ![RecordID] = cForm.Controls(RecordID).Value 
       .Update 
      End With 
     Case "Edit" 
      For Each ctl In cForm.Controls 
       If (ctl.ControlType = acTextBox) Or (ctl.ControlType = acComboBox) Or (ctl.ControlType = acCheckBox) Then 
        If (Nz(ctl.Value, "") <> Nz(ctl.OldValue, "")) Then 
         With rst 
          .AddNew 
          ![Date] = Now() 
          ![utilisateur] = userLogin 
          ![nomFormulaire] = cForm.Name 
          ![Action] = userAction 
          ![RecordID] = cForm.Controls(RecordID).Value 
          ![champs] = ctl.ControlSource 
          ![ancienneValeur] = ctl.OldValue 
          ![nouvelleValeur] = ctl.Value 
          .Update 
         End With 
        End If 
       End If 
      Next ctl 
    End Select 
    rst.Close 
    db.Close 
    Set rst = Nothing 
    Set db = Nothing 
End Function 

: 여기

내 감사 추적 모듈의 코드, 주로 코드를 웹에서 오는 배치추적하려는 양식의 이벤트.

바운드 텍스트 상자를 편집하려고하면 오류가 발생합니다. 그리고 If (Nz(ctl.Value, "") <> Nz(ctl.OldValue, "")) Then 라인은 오류를 유발하는 라인입니다

이 양식은 일대 다 관계로 연결된 2 개의 테이블을 기반으로합니다. 이 함수는 테이블의 "One"부분에있는 필드를 편집 할 때 작동하지만 "Many"면의 필드를 편집 할 때 오류가 발생합니다. 자세한 내용

내 폼이 그 요청을 기반으로합니다 : 오류가 T_PROPOSITION.reference_simple 컨트롤에서 해고

SELECT T_REVISION.ID_revision, T_REVISION.fk_ID_proposition, T_REVISION.numero, T_REVISION.fk_etat_revision, T_REVISION.EOTP, T_PROPOSITION.reference_simple, T_PROPOSITION.libelle, T_REVISION.description_localisation 
FROM T_PROPOSITION INNER JOIN T_REVISION ON T_PROPOSITION.ID_proposition = T_REVISION.fk_ID_proposition 
ORDER BY T_REVISION.numero DESC; 

내가 충분히 명확 나는 희망

, 당신에게

편집 감사합니다. 내가 T_REVISION.EOTP, T_REVISION.description_localisation 필드를 편집하려고 : 때 오류 3251 을 발생합니다. 내가 T_PROPOSITION.reference_simple, T_PROPOSITION.libelle을 편집 할 때 오류 3251가 발생하지 않습니다!

그래서 : 관계의 "한"측면에서 오는 값을 편집하지만 난 "많은"을 편집 할 때 내가 oldValue입니다 재산

에게 액세스 할 수없는 것 같다 옆으로 수 I'am 이 문제를 어떻게 해결할 수 있습니까?

+0

오류가 발생한 행을 표시하면 도움이됩니다. –

+0

죄송합니다. \t 오류 3251을 실행하는 줄은'If (Nt (ctl.Value, ") <> Nz (ctl.OldValue,"))입니다. Then' – LostReality

+0

"많은" 사이드 필드? – dbmitch

답변

1
정확히

하지 대답하지만, 주석 지역은 적합하지 않습니다 ...

If (Nz(ctl.Value, "") <> Nz(ctl.OldValue, "")) Then 전에이 줄을 추가 할 경우 : 이것은 당신이 있는지 확인하기 위해 수

debug.print ctl.Name, ctl.value 
debug.print ctl.name, ctl.oldvalue 

오류가 특정 컨트롤 및 특정 속성에 연결되어 검색 범위를 좁힐 수 있습니다.


편집 : 당신은 문제가 당신이 가입의 "다"쪽에 발생하는 것을 나타내는 당신의 영업 이익을 편집 한 후, 나는 당신이 "main form - subform" architecture에 양식을 변경해야합니다 생각합니다. 이렇게하면 각 테이블에 대한 업데이트를 올바르게 추적 할 수 있습니다.

+0

내 OP – LostReality

+0

에 오류의 세부 정보를 추가했습니다. 임시 해결 방법을 사용하여 단일 테이블에 양식의 기초를두고 다른 테이블을 하위 폼에 넣어 두었습니다. 이제 예상대로 작동합니다! 고마워 – LostReality

1

오류가 발생하는 줄을 지정하지 않으면 오류의 원인을 정확히 알기는 어렵지만 확실한 가능성이 있습니다.

당신은

If (Nz(ctl.Value, "") <> Nz(ctl.OldValue, "")) Then 

그리고 더 중요한 것은 당신이

"("로 전면 괄호를 놓치고하여 제어 루프에서 널 위해 트래핑하고 그러나 당신은 그것을 위해 트랩을하지 않습니다 당신의 레코드에 컨트롤의 값과 이전 값을 할당 가능성.

![ancienneValeur] = ctl.OldValue 
![nouvelleValeur] = ctl.Value 

수행하여 필드 ancienneValeur를 및 nouvelleValeur null 또는 zero length 필드를 할당 할 수 있습니까?

어쨌든 테이블의 필드에 값을 할당하기 전에 일관성을 유지하고 null 값을 트랩해야합니다.

![ancienneValeur] = NZ(ctl.OldValue,"") 
![nouvelleValeur] = NZ(ctl.Value,"") 
+0

오류 3251을 실행하는 줄은'If (Nt (ctl.Value, ") <> Nz (ctl.OldValue," ")) Then' – LostReality

+0

앞 괄호에 대한 주석이있는 답이 업데이트되었습니다. – dbmitch

+0

아니면 그냥 귀하의 의견에 현지 오타가 있습니까? – dbmitch