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
Chociaż 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

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