Jak wyświetlić wiele wyników w jednym polu zapytania w programie Access

Podziel się teraz:

Jeśli kiedykolwiek musiałeś wygenerować rozdzieloną listę wartości pól/zapytań wraz z innymi informacjami z bazy danych, wiesz, że w najlepszym razie może to być trudne – i zadanie, które większość ludzi uważa za niewykonalne. Na przykład, jeśli poproszono Cię o wygenerowanie raportu o tym, kto był najlepszym sprzedawcą – w kolejności malejącej – w każdym miesiącu roku lub o 3 sklepach najbliżej każdego klienta, prawdopodobnie pozostaje Ci zmaganie się z zapytaniami krzyżowymi lub ręcznym łączeniem wyników poza Accessem. Jednak z pomocą odrobiny kodu VBA w ciągu kilku minut uzyskasz wyniki takie jak poniżej…

Styczeń Johna, Sally, Billa
LUT Sally, Adam, John
MRZ Adama, Sally, Billa

Wiele razy przydałaby się możliwość wyświetlenia rozdzielonej listy wyników w ramach większego zapytania - listy 3 największych klientów dla każdego przedstawiciela handlowego, 5 sklepów najbliżej każdego z klientów, którzy wydają najwięcej. , i tak dalej.

Przestań zszywać raport

Pani AccessChociaż uzyskanie szczegółów w celu utworzenia tego rodzaju raportu jest więcej niż możliwe, zwykle kończy się to ręcznym połączeniem wyników poza programem Access w ramach arkusza kalkulacyjnego lub raportu.

Poniższy kod eliminuje potrzebę majstrowania przy wynikach zapytań poza programem Access, a zamiast tego pozwala z łatwością generować wyniki pokazane powyżej.

Najpierw nakreślmy, co chcemy, aby kod mógł zrobić:

„Biorąc pod uwagę zapytanie, zwróć x liczbę wyników połączonych w jeden ciąg rozdzielony y”

Zanim zaczniemy

Zanim przyjrzymy się kodowi, ważne jest, aby pamiętać, że chociaż możliwe jest utworzenie funkcji VBA, która jest bardziej ogólna i zdolna do obsługi dowolnej kombinacji zapytań, spowodowałoby to dość długi kod, więc co zrobimy w tym artykule jest zdefiniowanie przykładowej sprawy i napisanie funkcji obsługującej ten przypadek. Zrobienie tego w ten sposób znacznie ułatwi Ci odtworzenie kodu w celu spełnienia określonych potrzeb.

Przykładowy przypadek

Posiadamy sprzedażową bazę danych, która przechowuje szczegóły zakupów klientów wraz z kategorią produktu, do której należy zakup. Chcemy stworzyć raport pokazujący miesięcznie 3 najpopularniejsze kategorie w porządku malejącym.

Dla uproszczenia przykład będziemy przechowywać w jednej tabeli, chociaż jednostka główna będzie działać niezależnie od konfiguracji. Tabela, której będziemy używać, jest skonfigurowana w następujący sposób:

Sprzedaż
Nazwa klienta
Data dokonania transakcji
Wartość transakcji
Kategoria

Oczywiście jest to zbyt uproszczona konfiguracja, ale masz pomysł.

Teraz - kod

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

Kod - wyjaśniony

Kod VBAJak widać, kod jest dość oczywisty. Zaczynamy od użycia dostarczonych parametrów do zbudowania zapytania. Po utworzeniu ciągu zapytania, wykonujemy go i przechodzimy przez wyniki, łącząc je w jeden ciąg wynikowy, którego szukamy.

Zauważysz, że sprawdzamy, czy powinniśmy dodawać separator do ciągu, czy nie - bez tego sprawdzenia skończyłbyś się albo słabo sformatowanym ciągiem wynikowym, albo musiałbyś dodać kod, aby usunąć niechciane ograniczniki - w ten sposób od samego początku wszystko jest w porządku i porządku.

Samą funkcję można oczywiście wywołać z poziomu zapytania, raportu lub dowolnego innego miejsca w programie Access.

Napraw uszkodzoną bazę danych dostępu

Jeśli napotkasz uszkodzone bazy danych programu Access po uruchomieniu powyższego kodu lepiej jest użyć specjalistycznego narzędzia do ich naprawy i odzyskania wszystkich tabel z uszkodzonych baz danych.

Wprowadzenie autora:

Mitchell Pond jest ekspertem w dziedzinie odzyskiwania danych w DataNumen, Inc., która jest światowym liderem w technologiach odzyskiwania danych, w tym napraw problem SQL i doskonałe oprogramowanie do odzyskiwania. po więcej informacji odwiedź www.datanumen.com

Podziel się teraz:

Możliwość dodawania komentarzy nie jest dostępna.