Τρόπος εμφάνισης πολλαπλών αποτελεσμάτων σε ένα πεδίο ερωτήματος στην πρόσβασή σας

Κοινή χρήση τώρα:

Αν ποτέ χρειαστεί να δημιουργήσετε μια οριοθετημένη λίστα τιμών πεδίων/ερωτημάτων μαζί με άλλες πληροφορίες από τη βάση δεδομένων σας, θα γνωρίζετε ότι μπορεί να είναι στην καλύτερη περίπτωση δύσκολο - και μια εργασία που οι περισσότεροι άνθρωποι πιστεύουν ότι δεν θα είναι δυνατή. Αν, για παράδειγμα, σας ζητηθεί να δημιουργήσετε μια αναφορά για το ποιοι ήταν οι 5 κορυφαίοι πωλητές - σε φθίνουσα σειρά - για κάθε μήνα του έτους ή τα 3 καταστήματα που βρίσκονται πλησιέστερα σε κάθε πελάτη, τότε ενδεχομένως να χρειαστεί να ασχοληθείτε με ερωτήματα διασταύρωσης ή να συνδυάσετε χειροκίνητα τα αποτελέσματα εκτός της Access. Αλλά με τη βοήθεια λίγου κώδικα VBA, θα παράγετε αποτελέσματα όπως τα ακόλουθα σε λίγα λεπτά...

Ιανουάριος Τζον, Σάλι, Μπιλ
Φεβρουάριος Σάλι, Αδάμ, Τζον
Μάρτης Adam, Sally, Μπιλ

Υπάρχουν πολλές φορές που θα ήταν χρήσιμο να εμφανίσετε μια οριοθετημένη λίστα αποτελεσμάτων ως μέρος ενός μεγαλύτερου ερωτήματος - μια λίστα με τους 3 κορυφαίους μεγαλύτερους πελάτες για κάθε αντιπρόσωπο πωλήσεων, τα πλησιέστερα 5 καταστήματα σε καθένα από τους πελάτες με τις υψηλότερες δαπάνες , η λίστα συνεχίζεται.

Σταματήστε να συνδυάζετε την αναφορά σας μαζί

Κα ΠρόσβασηΠαρόλο που είναι περισσότερο από δυνατό να λάβετε τις λεπτομέρειες για τη δημιουργία αυτού του είδους αναφοράς, συνήθως θα πρέπει να συρράψετε τα αποτελέσματα με μη αυτόματο τρόπο εκτός της Access ως μέρος ενός υπολογιστικού φύλλου ή αναφοράς.

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

Αρχικά, ας περιγράψουμε τι θέλουμε να κάνει ο κώδικας:

"Με δεδομένο ένα ερώτημα, επιστρέψτε τον αριθμό των αποτελεσμάτων, σε συνδυασμό με μία συμβολοσειρά που οριοθετείται από το y"

Πριν ξεκινήσουμε

Πριν εξετάσουμε τον κώδικα, είναι σημαντικό να σημειωθεί ότι ενώ είναι δυνατόν να δημιουργήσουμε μια συνάρτηση VBA πιο γενική και ικανή να χειριστεί οποιονδήποτε συνδυασμό ερωτημάτων, κάτι τέτοιο θα είχε ως αποτέλεσμα έναν αρκετά μεγάλο κώδικα, οπότε αυτό που θα κάνουμε σε αυτό το άρθρο είναι να ορίσετε ένα παράδειγμα υπόθεσης και να γράψετε τη συνάρτηση για να χειριστείτε αυτήν την περίπτωση. Αν το κάνετε με αυτόν τον τρόπο, θα είναι πολύ πιο εύκολο για εσάς να μπορείτε να δημιουργήσετε ξανά τον κώδικα για να ικανοποιήσετε τις συγκεκριμένες ανάγκες σας.

Η περίπτωση δείγματος

Διαθέτουμε βάση δεδομένων πωλήσεων που αποθηκεύει λεπτομέρειες σχετικά με τις αγορές πελατών, καθώς και την κατηγορία προϊόντος στην οποία ανήκει η αγορά. Θέλουμε να δημιουργήσουμε μια αναφορά που δείχνει, ανά μήνα, τις 3 πρώτες κατηγορίες σε φθίνουσα σειρά.

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

ΕΚΠΤΩΣΕΙΣ
Ονομα πελάτη
Ημερομηνία Συναλλαγής
Αξία συναλλαγής
Κατηγορία

Προφανώς πρόκειται για μια υπερβολικά απλοποιημένη ρύθμιση, αλλά έχετε την ιδέα.

Τώρα - ο κωδικός

Public Function CategoryList(Month As String, NumResults As Integer, SortAscending As Boolean, Delimiter As String) As String
    Dim sSql, resultString As String
    Dim rst As Recordset
    Dim firstLine As Boolean
    
    'Create our SQL string using the supplied parameters
    sSql = "SELECT TOP " & NumResults & " [category] FROM sales GROUP BY Format([TransactionDate],""mmm""), sales.Category HAVING (((Format([TransactionDate], ""mmm"")) = """ & Month & """))"
    If SortAscending Then sSql = sSql & " ORDER BY Sum(sales.TransactionValue) DESC;"
    
    Set rst = CurrentDb.OpenRecordset(sSql)
    
    firstLine = True
    
    'Loop through the results, and create the string to return
    With rst
        Do While Not .EOF
            If Not firstLine Then
                resultString = resultString & Delimiter & .Fields("category")
            Else
                resultString = resultString & .Fields("category")
                firstLine = False
            End If
            
        .MoveNext
        Loop
    End With
    
    Set rs = Nothing
    CategoryList = resultString
End Function

Ο κωδικός - εξήγησε

Κωδικός VBAΌπως μπορείτε να δείτε, ο κώδικας είναι αρκετά αυτονόητος. Ξεκινάμε χρησιμοποιώντας τις παραμέτρους που παρέχονται για να δημιουργήσουμε το ερώτημά μας. Μόλις δημιουργηθεί η συμβολοσειρά ερωτήματος, την εκτελούμε και επαναλαμβάνουμε τα αποτελέσματα, συνενώνοντάς τα για να σχηματίσουμε τη μοναδική συμβολοσειρά αποτελέσματος που αναζητούμε.

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

Η ίδια η λειτουργία μπορεί φυσικά να κληθεί μέσα από ένα ερώτημα, μια αναφορά ή οπουδήποτε θέλετε από την Access.

Διορθώστε τη βάση δεδομένων κατεστραμμένης πρόσβασης

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

Εισαγωγή συγγραφέα:

Ο Mitchell Pond είναι ειδικός στην ανάκτηση δεδομένων στο DataNumen, Inc., η οποία είναι ο παγκόσμιος ηγέτης στις τεχνολογίες ανάκτησης δεδομένων, συμπεριλαμβανομένων επιδιορθώστε το πρόβλημα SQL και υπερέχουν προϊόντα λογισμικού ανάκτησης. Για περισσότερες πληροφορίες επισκεφθείτε www.datanumen.com

Κοινή χρήση τώρα:

Τα σχόλια είναι κλειστά.