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

Καλημέρα στην παρέα

Βασίλη, στην επισυναπτόμενη ΒΔ, ο Τάσος (Διαχειριστής) και εγώ, επιχειρήσαμε μια προσέγγιση του ζητούμενου.

Για τον υπολογισμό της μείωσης των αδειών εφαρμόζονται 3 τρόποι:

1. Το ερώτημα «qryForm1» παίρνει τα απαιτούμενα στοιχεία από τη φόρμα «Form1».
Συνεπώς για να λειτουργήσει, η φόρμα πρέπει να είναι ανοιχτή.

2. Το ερώτημα «qryContitions» παίρνει τα απαιτούμενα στοιχεία από τον πίνακα «Contitions».
Συνεπώς για να λειτουργήσει, δεν απαιτείται να είναι ανοιχτή κάποια φόρμα.

Στις παραπάνω περιπτώσεις, δεν επιτρέπονται null τιμές στα πεδία που συμμετέχουν στις συνθήκες.

Επίσης οι αριθμοί, που ορίζουν τα διαστήματα στα οποία κατατάσσονται οι άδειες, θα πρέπει να είναι διαφορετικοί και σε φθίνουσα σειρά.

3. Το ερώτημα «qryVBA» παίρνει τα απαιτούμενα στοιχεία από τη συνάρτηση «Reduce()», που φαίνεται παρακάτω:
Κώδικας:
Public Function Reduce(X As Variant) As Variant
    Dim i As Long, varCont As Variant
    Dim blnExit As Boolean, varMinus As Variant

    '==========================================
    'Οι αριθμοί στις συνθήκες είναι διαφορετικοί
    'καιταξινομημένοι κατά φθίνουσα σειρά
    varCont = Array(100, 50, 20, 10)
    'Οι αντίστοιχες τιμές μείωσης
    varMinus = Array(10, 8, 6, 3)
    '==========================================
    If Not IsNumeric(X) Then blnExit = True
    If UBound(varCont) <> UBound(varMinus) Then blnExit = True
    For i = 0 To UBound(varCont) - 1
        If varCont(i) <= varCont(i + 1) Then
            blnExit = True
            Exit For
        End If
    Next
    If Not blnExit Then
        For i = 0 To UBound(varCont)
            If X >= varCont(i) Then Exit For
        Next
        If i > UBound(varCont) Then
            Reduce = 0
        Else
            Reduce = varMinus(i)
        End If
    End If

End Function
Επειδή στη μέθοδο αυτή γίνεται καλύτερος χειρισμός των δεδομένων και επειδή εύκολα μπορεί να αφαιρεθούν ή να προστεθούν συνθήκες, θεωρείται καλύτερη.

Φιλικά/Γιώργος
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb Contitions.mdb (312,0 KB, 56 εμφανίσεις)
Απάντηση με παράθεση