Εμφάνιση ενός μόνο μηνύματος
  #4  
Παλιά 04-01-14, 08:27
kapetang Ο χρήστης kapetang δεν είναι συνδεδεμένος
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλημέρα

Χρήστο η λύση του προηγούμενου μηνύματος έχει αρκετά κουσούρια.

Για μια πιο ολοκληρωμένη λύση, θα πρότεινα τον παρακάτω κώδικα:

Κώδικας:
Private Sub fDate_BeforeUpdate(Cancel As Integer)
    Dim minDate As Date, maxDate As Date, strC As String
    If Me.NewRecord Then
        If Me.fDate <= Nz(DMax("[fDate]", "[tblDates]", "[EmpID] =" & [EmpID]), 0) Then
            MsgBox "Η ημερομηνία δεν υπερβαίνει τις προηγούμενες"
            Cancel = True
        End If
    Else
        'Αρχή σχολίων
        strC = "[EmpID] =" & [EmpID] & " And [ID] < " & Me.ID
        minDate = Nz(DMax("[fDate]", "[tblDates]", strC), 0)
        strC = "[EmpID] =" & [EmpID] & " And [ID] > " & Me.ID
        maxDate = Nz(DMin("[fDate]", "[tblDates]", strC), #1/1/9999#)
        If Me.fDate < minDate Or Me.fDate > maxDate Then
            MsgBox "Η νέα ημερομηνία πρέπει να είναι ανάμεσα στις υπάρχουσες"
            Cancel = True
        End If
        'τέλος σχολίων
    End If
End Sub
Το πεδίο ID στον κώδικα είναι το πρωτεύον κλειδί του πίνακα.

Με τον κώδικα επιβάλλεται:
  1. Στις νέες εγγραφές, η ημερομηνία που καταχωρείται για κάποιο εργαζόμενο να είναι μεγαλύτερη από τις ήδη καταχωρημένες.
  2. Στις παλιές εγγραφές (περίπτωση διόρθωσης) να είναι ανάμεσα στη μέγιστη των προηγούμενων εγγραφών και την ελάχιστη των επόμενων
Αν δε θέλεις τον τελευταίο περιορισμό κάνε τις γραμμές που υποδεικνύονται στον κώδικα σχόλια.

Φιλικά/Γιώργος
Απάντηση με παράθεση