Αγαπητέ φίλε Meteora, Tassos,
Παρουσιάζω την δική μου εκδοχή για τον εντοπισμό αλλαγών μίας εγγραφής.
Μία εγγραφή για να εντοπίσουμε ότι έχει αλλαγές μπορούμε να ελένξουμε την τιμή την παλιά .oldvalue που είχε με την καινούργια .value σε κάθε αντικείμενο μίας φόρμας που επιδέχεται την ιδιότητα value και oldvalue.
Επομένως πριν αναζητήσουμε για αλλαγές σε όλα τα αντικείμενα της φόρμας ελέγχουμε μόνο τα αντικείμενα να είναι text box ή Combobox ή ListBox ή όποια δέχονται την τιμή value (Και τυχόν μου έχουν ξεφύγει στο εδώ παράδειγμα). Στο παράδειγμα ελέγχω μόνο για textbox και Combobox μπορούμε να προσθέσουμε ότι θέλουμε.
Tονίζω ότι για μένα το ListBox σε αναφορές που έχω κάνει το χρησιμοποιώ και ως bound control (Δηλαδή να αποθηκεύει και αυτό τιμές και μάλιστα να δύναται να έχει και πολλαπλές τιμές)
Το Event της φόρμας είναι το BeforeUpdate πριν δηλαδή γίνει η ενημέρωση.
Σε αυτό καλούμε την ρουτίνα Change δίνοντας τιμές στο FrmName.
Στο Event Before Update της Φόρμας
Κώδικας:
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim CurrFrmName As Form
Set CurrFrmName = Screen.ActiveForm
Call change(CurrFrmName)
End Sub
Και η ρουτίνα
Κώδικας:
Public Sub Change(FrmName As Form)
Dim response As Integer, blnChanged As Boolean, id As Object
On Error Resume Next
blnChanged = False
If FrmName.NewRecord = False Then
For Each id In FrmName.Controls
If id.ControlType = acComboBox Or id.ControlType = acTextBox Then
If id.Value <> id.OldValue or IsNull(id.Value <> id.OldValue) Then blnChanged = True
End If
Next
If blnChanged = True Then response = MsgBox("Έγιναν αλλαγές να καταχωρηθούν ;", vbQuestion + vbDefaultButton2 + vbYesNo, "Τροποποίηση εγγραφής")
If response = vbNo Then
FrmName.Undo
End If
End If
End Sub
Αυτά και να έχεται ένα καλό Σαββατοκύριακο.
Φιλικά
iliadisk / kon73