1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
Public Function fctSaveLocalRecord(ByVal sTypeEnr As String, _
ByVal sWkgTable As String, _
ByVal sTargetTable As String, _
ByVal sPK_name As String, _
ByVal intPK_id As Long) As Boolean
Dim oRs1 As DAO.Recordset, oRs2 As DAO.Recordset
Dim strErrMsg As String, strSql As String, i As Integer, l1 As Long
Dim lIdAccess05 As Long, lIdAccess07 As Long
' 23/02/2011 MN Creation
' 2015-07-12 MN Adapté à IG
' sTypeEnr : type pouvant servir à déterminer la table cible : pas utilisé ici.
' sWkgTable : table de travail (c'est une table avec la même structure (mais pas de numAuto !) que la table cible (table liée) dans laquelle je ne recopie que l'enregistrement à modifier et que je place en source du formulaire en mode Modification
' sTargetTable : table cible
' sPK_name : nom de la colonne de l'index de la table (doit être identique pour sWkgTable et sTargetTable)
' intPK_id : identifiant de l'enregistrement à Enregistrer ( INSERT (création) si = 0 ; sinon UPDATE)
If gMyDb Is Nothing Then Set gMyDb = CurrentDb
If Nz(intPK_id, 0) = 0 Then
' C'est une CREATION
l1 = InsertLocalRecord(sWkgTable, sTargetTable)
Else
' C'est une MODIFICATION
Set oRs1 = gMyDb.OpenRecordset(sWkgTable, dbOpenSnapshot)
If oRs1.Recordcount > 0 Then
oRs1.MoveLast
oRs1.MoveFirst
' 1 seule ligne
strSql = "SELECT * FROM " & sTargetTable & " WHERE " & sPK_name & " = " & intPK_id
Set oRs2 = gMyDb.OpenRecordset(strSql, dbOpenDynaset, dbSeeChanges)
If oRs2.Recordcount > 0 Then
oRs2.MoveLast
oRs2.MoveFirst
' 1 seule ligne
oRs2.Edit
For i = 1 To oRs1.Fields.Count - 1
'Debug.Print oRs2.Fields(i).Name
' On journalise seulement si c'est un champs modifié
' --------------------------------------------------
If i < oRs1.Fields.Count - 3 Then
' on n'enregistre pas les 2 dernières colonnes '..._dateModif' et '..._userModif'
If Nz(oRs2.Fields(i)) <> oRs1.Fields(i) Then
' Mettre ds un journal les champs modifiés
strSql = "INSERT INTO T_log_dataChange " _
& " (Obj_type, Tbl_name, Tbl_PK_name, Tbl_PK_value," _
& " Col_name, Col_type, OldValue, NewValue," _
& " Obj_dateModif, Obj_userModif) VALUES " _
& " ('UPDATE' ,'" & sTargetTable & "','" & sPK_name & "', " & intPK_id _
& " ,'" & oRs1.Fields(i).Name & "','" & gMyDb.TableDefs(sTargetTable).Fields(oRs1.Fields(i).Name).Type & "' ,'" & TraiterChaineSql(CStr(Nz(oRs2.Fields(i)))) & "','" & TraiterChaineSql(CStr(Nz(oRs1.Fields(i)))) _
& "', " & FormatDateUS(Now) & " ,'" & Environ("USERNAME") & "')"
Debug.Print strSql
gMyDb.Execute strSql
End If
End If
' on sauve la valeur dans la base distante
' ----------------------------------------
oRs2.Fields(i) = oRs1.Fields(i)
Next i
oRs2.Update
'End Select
End If
End If
End If
fctSaveLocalRecord = True
Exit_0:
Set oRs1 = Nothing: Set oRs2 = Nothing
Exit Function
Err_0:
fctSaveLocalRecord = False
Resume Exit_0
End Function |
Partager