Θέμα: Ερωτήματα Πρόβλημα με ένα query.

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

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

Η παρακάτω συνάρτηση, με βάση το φύλο των αθλητών, το έτος γέννησης και το βάρος τους, κατατάσσει τους αθλητές σε κατηγορίες σύμφωνα με το ζητούμενο.

Κώδικας:
Public Function CategoriesWeight(Sex As Variant, Etos As Variant, Baros As Variant) As String
'Sex = "A" (ελληνικό)για αγόρι και "Κ" για κορίτσι
'Etos = το έτος γέννησης
'Baros = το βάρος του αθλητή

    Dim i As Long, j As Long, c As Long
    Dim x(1 To 7) As Variant

    Sex = Nz(Sex, ""): Etos = Nz(Etos, 0): Baros = Nz(Baros, 0)


    x(1) = Array(33, 37, 41, 45, 49, 53, 57, 61, 65)
    x(2) = Array(29, 33, 37, 41, 44, 47, 51, 55, 59)
    x(3) = Array(45, 48, 51, 55, 59, 63, 68, 73, 78)
    x(4) = Array(42, 44, 46, 49, 52, 55, 59, 63, 68)
    '----------------------------------------------
    x(5) = Array(27, 30, 33, 37, 41, 45, 49, 53, 57)
    x(6) = Array(21, 24, 27, 30, 33, 37, 41, 45, 49)
    x(7) = Array(17, 20, 23, 26, 29, 33, 37, 41, 44)

    'Η διάκριση θα έπρεπε να γίνει με βάση την ηλικία του αθλητή.
    'Έγινε όμως με βάση το έτος γέννησης, σύμφωνα με το ζητούμενο

    Select Case Etos
    Case 2002, 2001, 2000
        If Sex = "Α" Then c = 1 Else c = 2
    Case 1999, 1998, 1997
        If Sex = "Α" Then c = 3 Else c = 4
    Case 2003, 2004
        c = 5
    Case 2005, 2006
        c = 6
    Case 2007, 2008, 2009
        c = 7
    Case Else
        Exit Function
    End Select

    For i = 0 To UBound(x(c))
        If Baros < x(c)(0) Then
            CategoriesWeight = "-" & x(c)(i)
            Exit Function
        ElseIf Baros >= x(c)(UBound(x(c))) Then
            CategoriesWeight = "+" & x(c)(UBound(x(c)))
        Else
            If Baros >= x(c)(i) And Baros < x(c)(i + 1) Then
                'Σύμφωνα με τα μαθηματικά το σύμβολο [ δείχνει ότι το κάτω όριο
                'περιλαμβάνεται, ενώ το ) δείχνει ότι το πάνω όριο δεν περιλαμβάνεται
                CategoriesWeight = "[" & CStr(x(c)(i)) & ", " & CStr(x(c)(i + 1)) & ")"
                Exit Function
            End If
        End If
    Next

End Function
Στη συνάρτηση:

1) Οι 12 περιπτώσεις, επειδή κάποιες ήταν όμοιες, περιορίστηκαν σε 7.

2) Στα διαστήματα των κατηγοριών η ελάχιστη τιμή περιλαμβάνεται, ενώ η μέγιστη όχι (ανήκει στην επόμενη κατηγορία).

Για παράδειγμα, αν 33<=Baros<37, ο αθλητής ανήκει στην κατηγορία: [33, 37).

Ενώ αν Baros=37 ανήκει στην κατηγορία: [37,41)

Στην επισυναπτόμενη ΒΔ, μπορούμε να δούμε ένα παράδειγμα χρήσης της συνάρτησης στο ερώτημα Categories

Φιλικά/Γιώργος

ΥΓ. Γιώργο, κάνε δοκιμές μήπως κάτι μου διέφυγε
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb Categories.mdb (384,0 KB, 26 εμφανίσεις)
Απάντηση με παράθεση