Ogni tanto vi tedio con la mia applicazione... portate pazienza
Ho due funzioni pubbliche nei Moduli che uso per scrivere un log dei valori che gli utenti modificano sul DB
La prima scrive una semplice riga di testo in un file log
Public Function ScriviLog(myTesto)
If Len(Dir(P_Path_Log)) > 0 Then
Open P_Path_Log For Append As #1
Else
Open P_Path_Log For Output As #1
End If
Print #1, Left(Now(), 10) & ";" & Right(Now(), 8) & ";" & P_User & ";" & P_Computer & ";" & myTesto
Close #1
End Function
La seconda, quella problematica, genera una riga di testo con i nomi dei campi ed i valori che sono stati modificati dall'utente
Public Function TutteLeModifiche(myMe)
' campi logici
' falso 0
' vero -1
Dim ctlC As Control
Dim myResp As String
Dim myCampo, myPrima, myDopo
myResp = ""
For Each ctlC In myMe
If ctlC.ControlType = acTextBox Or ctlC.ControlType = acCheckBox Or ctlC.ControlType = acComboBox Then
If ctlC.Enabled Then
myCampo = ctlC.Name
myDopo = ctlC.Value
myPrima = ctlC.OldValue
If ctlC.ControlType = acCheckBox Then
If myPrima <> myDopo Or IsNull(myPrima) Or IsNull(myDopo) Then
myPrima = IIf(IsNull(myPrima), myPrima, IIf(myPrima = 0, "F", "V"))
myDopo = IIf(IsNull(myDopo), myDopo, IIf(myDopo = 0, "F", "V"))
End If
End If
If myPrima <> myDopo Or (IsNull(myPrima) And Not IsNull(myDopo)) Or (Not IsNull(myPrima) And IsNull(myDopo)) Then
If myCampo = "NOTE_VELOCI" Or myCampo = "LISTINO" Or myCampo <> "NOTE" Then
myPrima = IIf(IsNull(myPrima), "", myPrima)
myDopo = IIf(IsNull(myDopo), "", myDopo)
myPrima = Replace(myPrima, Chr(10), Chr(32))
myPrima = Replace(myPrima, Chr(13), Chr(32))
myDopo = Replace(myDopo, Chr(10), Chr(32))
myDopo = Replace(myDopo, Chr(13), Chr(32))
End If
myResp = myResp & myCampo & ":" & myPrima & "->" & myDopo & ";"
End If
End If
End If
Next ctlC
TutteLeModifiche = myResp
End Function
Le richiamo alla chiusura di alcune forms dove l'utente puo' modificare dei valori nelle tabelle
ad esempio chiudendo la form cosi':
Private Sub pulExit_Click()
' qui non funziona per dati da piu' tabelle o query
Dim myTesto As String
If Me.Dirty Then
myTesto = TutteLeModifiche(Me.Controls)
ScriviLog ("MODIFICA ESITO ESAME GUIDA CANDIDATO;" & Me.ID_ANAGRAFE & ";" & Me.NOME & ";" & myTesto)
End If
DoCmd.Close
If PV_Mask <> "" Then
Forms(PV_Mask).Visible = True
End If
End Sub
Tutto funziona egregiamente finche' nella form sono editabili campi di una sola tabella
Ma quando nella form sono editabili campi di tabelle diverse, ovviamente collegate, mi esce in errore alla istruzione
myPrima = ctlC.OldValue
Ovviamente l'applicazione funziona correttamente ormai da un paio di anni
Ho solo aggiunto queste funzioni per tracciare il lavoro giornaliero e tutto ritorna a funzionare a dovere se 'taglio' la chiamata alle suddette funzioni e chiudo le forms senza chiamare
TutteLeModifiche()
Ho provato gia' a lavorare Controls direttamente dal codice della form senza trasmetterlo alla funzione ma l'errore rimane il medesimo
Avete suggerimenti???