Jak zobrazit více výsledků v jednom poli dotazu ve vašem přístupu

Sdílej nyní:

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

Paní AccessI 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

Kód VBAJak vidíte, kód je celkem srozumitelný. Začneme tím, že k sestavení dotazu použijeme zadané parametry. Jakmile je řetězec dotazu vytvořen, spustíme ho a projdeme výsledky, které zřetězíme dohromady a vytvoříme tak jeden požadovaný výsledný řetězec.

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

Sdílej nyní:

Komentáře jsou uzavřeny.