Pokud jste někdy potřebovali vytvořit seznam hodnot polí/dotazů s oddělovači spolu s dalšími informacemi z vaší databáze, víte, že to může být v nejlepším případě náročné – a úkol, o kterém si většina lidí myslí, že nebude možný. Pokud jste například byli požádáni o vytvoření zprávy o tom, kdo bylo 5 nejlepších prodejců – sestupně – pro každý měsíc v roce nebo o 3 nejbližších prodejnách ke každému zákazníkovi, pak vám pravděpodobně zbývá jen zápolit s křížovými dotazy nebo ručně kombinovat výsledky mimo Access. Ale s pomocí malého kódu VBA budete během několika minut produkovat výsledky, jako je tento…
| leden | Johne, Sally, Bille |
| února | Sally, Adam, John |
| Mar | Adam, Sally, Bill |
Existuje mnoho případů, kdy by bylo užitečné mít možnost zobrazit oddělený seznam výsledků jako součást většího dotazu - seznam 3 největších zákazníků pro každého obchodního zástupce, 5 nejbližších obchodů každému z vašich zákazníků s nejvyššími výdaji , seznam pokračuje.
Přestaňte své zprávy spojovat
I když je více než možné získat podrobnosti k vytvoření tohoto druhu sestavy, obvykle byste nakonec museli výsledky ručně spojit mimo Access jako součást tabulky nebo sestavy.
Následující kód vystřihne potřebu manipulovat s výsledky dotazu mimo Access a místo toho vám umožní snadno vytvořit výše uvedené výsledky.
Nejprve načrtneme, co chceme, aby kód dokázal:
"Vzhledem k dotazu vraťte x počet výsledků kombinovaných do jednoho řetězce, který je ohraničen y"
Než začneme
Než se podíváme na kód, je důležité si uvědomit, že i když je možné vytvořit funkci VBA, která je obecnější a schopná zpracovat libovolnou kombinaci dotazů, výsledkem by byl docela zdlouhavý kód, takže to, co uděláme v tomto článku je definovat příklad případu a napsat funkci, která tento případ zvládne. Pokud to uděláte tímto způsobem, bude pro vás mnohem snazší znovu vytvořit kód, aby vyhovoval vašim konkrétním potřebám.
Ukázkový případ
Máme prodejní databázi, která ukládá podrobnosti o nákupech zákazníků spolu s kategorií produktů, ke kterým nákup patří. Chceme vytvořit sestavu, která zobrazuje podle měsíce 3 nejlepší kategorie v sestupném pořadí.
Pro zjednodušení si příklad necháme na jedné tabulce, ačkoli jistina bude fungovat bez ohledu na vaše nastavení. Tabulka, kterou použijeme, je nastavena následovně:
| Prodej |
| Jméno zákazníka |
| Datum transakce |
| TransactionValue |
| Kategorie |
Je zřejmé, že se jedná o příliš zjednodušené nastavení, ale máte představu.
Nyní - kód
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
Kód - vysvětleno

Všimnete si, že kontrolujeme, zda bychom měli do řetězce přidat oddělovač či nikoli - bez této kontroly byste skončili buď s nesprávně naformátovaným řetězcem výsledků, nebo byste museli přidat kód, abyste odstranili nežádoucí oddělovače - Tímto způsobem budete mít věci hned od začátku pěkné a uklizené.
Samotnou funkci lze samozřejmě volat z dotazu, sestavy nebo z libovolného místa v rámci Accessu.
Opravte poškozenou databázi přístupu
Pokud narazíte poškozené databáze Accessu při spuštění výše uvedeného kódu je lepší použít nějaký specializovaný nástroj k jejich opravě a obnovení všech tabulek z poškozených databází.
Úvod autora:
Mitchell Pond je expert na obnovu dat v DataNumen, Inc., která je světovým lídrem v oblasti technologií pro obnovu dat, včetně opravit problém s SQL a excelové softwarové produkty pro obnovu. Pro více informací navštivte www.datanumen.com