Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Access > Access - Ερωτήσεις / Απαντήσεις > [ Συναρτήσεις ] Έλεγχος Παλαιότερης Ημερομηνίας

Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια!

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 05-01-14, 07:11
Όνομα: Χρήστος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 24-01-2010
Περιοχή: Φλώρινα
Μηνύματα: 164
Προεπιλογή

Γιώργο καλημέρα, είδα πώς το γύρισες στο ερώτημα για να βάλεις ημερομηνία λήξεις και όχι έναρξης και το οποίο βέβαια είναι το σωστό.

Τώρα ως προς τις διορθώσεις που αναφέρεις, δεν αξίζει τον κόπο διότι είναι μόλις δυο – τρείς τον χρόνο και τις κάνω εύκολα, η μάστιγα ήταν η παλαιότερη ημερομηνία που πάντα έπρεπε να ελέγχω και όλο και κάτι ξέφευγε και αυτό από μόνο του δημιουργούσε μελλοντικές διορθώσεις.

Εφόσον η βάση ξεκινήσει για το 2014 από το μηδέν και κάθε άδεια ελέγχεται πλέον τότε νομίζω πώς δεν θα υπάρχει πρόβλημα.

Όσον αφορά εσένα Γιώργο δεν ξέρω πώς μπορώ να σε ευχαριστήσω για πολλοστή φορά διότι μέσω αυτού του Forum με έχεις ξελασπώσει πάρα πολλές φορές…

Δεν νομίζω πώς αρκούν τα λόγια μα αφού μόνο αυτά διαθέτουμε μέσω του Forum Ευχαριστώ για άλλη μια φορά Γιώργο.

Υ.Γ. Θυμήσου αυτή η εφαρμογή δέχτηκε άπειρη βοήθεια από εσένα για να την στήσω (στην κανονική έκδοση).
Απάντηση με παράθεση
  #2  
Παλιά 05-01-14, 11:06
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλημέρα

Χρήστο σ’ ευχαριστώ κ’ εγώ.

Κοιτάζοντας σήμερα τον κώδικα, με πιο καθαρό μυαλό, διαπίστωσα ότι το λάθος ήταν στη γραμμή κώδικα: If Me.Start <= minDate Or me.fDate >= maxDate Then.

Η γραμμή είναι λάθος στη λέξη Me.fDate (το πεδίο fDate δεν υπάρχει στη δική σου ΒΔ, ξέμεινε από το παράδειγμά μου), αντί όμως ο μεταγλωττιστής να σημειώνει λάθος τη λέξη Me.FDate σημείωνε παραπειστικά την Me.Start και με τρέλανε.

Παρακάτω υπάρχει ο κώδικας που αντιμετωπίζει όλες τις περιπτώσεις (και την τροποποίηση της ημερομηνίας έναρξης και της διάρκειας της άδειας).

Κώδικας:
Private Sub numDays_BeforeUpdate(Cancel As Integer)
    On Error GoTo Err_Hander

    If Not Me.NewRecord Then
        If Not IsNull(Me.numDays) Then
            If IsNull(Me.Start) Then
                Exit Sub
            Else
                If IsInvalidDate Then
                    Cancel = True
                End If
            End If
        End If
    End If
Exit_Sub:
    Exit Sub
Err_Hander:
    MsgBox "Error #" & Err.Number & vbCrLf & Err.Description
    Resume Exit_Sub
End Sub

Private Sub Start_BeforeUpdate(Cancel As Integer)
' Έλεγχος παλαιότερης ημερομηνίας

    On Error GoTo Err_Handler

    'Η έναρξη πρέπει να είναι μεγαλύτερη από τη μέγιστη ημερομηνία [ΛήξηΆδειας]
    If IsNull(Me.Start) Then Exit Sub
    If Me.NewRecord Then
        If Me.Start <= Nz(DMax("[ΛήξηΆδειας]", "[qry_Adeies]", "[Μητρώο] ='" & Me.Μητρώο & "'"), 0) Then
            MsgBox "Η ημερομηνία δεν υπερβαίνει τις προηγούμενες"
            Cancel = True
        End If
    Else
        If Not IsNull(Me.numDays) Then
            If IsInvalidDate Then
                Cancel = True
            End If
        End If
    End If
Exit_Sub:
    Exit Sub
Err_Handler:
    MsgBox "Error #" & Err.Number & vbCrLf & Err.Description
    Resume Exit_Sub
End Sub

Private Function IsInvalidDate() As Boolean
    Dim LastDateSKA As Date, DatesHemi As Integer, DateEnd As Date
        Dim minDate As Date, maxDate As Date, strC As String
        
        If Me.Parent.Ημερήσιος Then
            LastDateSKA = LastWorkingAbsenceDate(Me.Start, Me.numDays)
        Else
            LastDateSKA = Me.Start - 1 + Me.numDays
        End If
        
        If Me.Parent.Ημερήσιος Then
            DatesHemi = countHmiargiwn(Me.Start, Me.numDays, LastDateSKA)
        Else
            DatesHemi = 0
        End If
        DateEnd = LastWorkingAbsenceDate(LastDateSKA + 1, DatesHemi, 1)
            
        strC = "[Μητρώο] ='" & Me.Μητρώο & "' And [ID] < " & Me.ID
        minDate = Nz(DMax("[ΛήξηΆδειας]", "[qry_Adeies]", strC), 0)
        strC = "[Μητρώο] ='" & Me.Μητρώο & "' And [ID] > " & Me.ID
        maxDate = Nz(DMin("[Start]", "[qry_Adeies]", strC), #1/1/9999#)
        
        If Me.Start <= minDate Or DateEnd >= maxDate Then
            MsgBox "Η νέα ημερομηνία πρέπει να είναι μεγαλύτερη από τη μέγιστη των ημερομηνιών [ΛήξηΆδειας]" _
        & vbCrLf & "των προηγούμενων αδειών και η [ΛήξηΆδειας] μικρότερη της ελάχιστης των [Start] των επόμενων"
            IsInvalidDate = True
        End If
   
End Function
Αν νομίζεις ότι αξίζει τον κόπο και έχεις χρόνο, μπορείς να τον προσθέσεις στην εφαρμογή και να τον δοκιμάσεις καλύτερα.

Φιλικά/Γιώργος
ΥΓ Φυσικά και θυμάμαι. Βέβαια δε θυμάμαι τις λεπτομέρειες των συναρτήσεων,γι' αυτό δοκίμασε καλύτερα τον κώδικα, αν τον χρησιμοποιήσεις
Απάντηση με παράθεση
Απάντηση στο θέμα


Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας


Παρόμοια Θέματα

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[VBA] Έλεγχος και συμπλήρωση Α.Φ.Μ. Spirosgr Excel samples - Χρήσιμα αρχεία & παραδείγματα 0 19-09-16 12:33
Έλεγχος Ποσού thanosgr Access - Ερωτήσεις / Απαντήσεις 4 25-02-16 13:26
Έλεγχος προσωπικών στοιχείων γιώργοςΚ Access - Ερωτήσεις / Απαντήσεις 3 02-01-16 19:47
ΕΛΕΓΧΟΣ ΣΕ ΔΥΟ ΠΙΝΑΚΕΣ NIC Access - Ερωτήσεις / Απαντήσεις 2 12-03-10 18:58


Η ώρα είναι 05:45.