Εμφάνιση ενός μόνο μηνύματος
  #3  
Παλιά 13-03-09, 09:32
kon73 Ο χρήστης kon73 δεν είναι συνδεδεμένος
Όνομα: Ηλιάδης Κωνσταντίνος
Έκδοση λογισμικού Office: Ms-Office 2010, Ms-Office 2013
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 13-12-2008
Περιοχή: Chicago
Μηνύματα: 119
Προεπιλογή Re: Αποθήκευση εγγραφής - μεταβολών φόρμας

Αγαπητέ φίλε 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
Απάντηση με παράθεση