Så här visar du flera resultat i ett enda frågefält i din åtkomst

Om du någonsin har behövt skapa en avgränsad lista med fält-/frågevärden tillsammans med annan information från din databas vet du att det i bästa fall kan vara utmanande – och en uppgift som de flesta tror inte kommer att vara möjlig. Om du till exempel har blivit ombedd att skapa en rapport om vilka som var de 5 bästa säljarna – i fallande ordning – för varje månad på året, eller de 3 butikerna närmast varje kund, då kan du bli tvungen att kämpa med korstabellfrågor eller manuellt kombinera resultaten utanför Access. Men med hjälp av lite VBA-kod kommer du att producera resultat som följande på några minuter…

jan John, Sally, Bill
februari Sally, Adam, John
mar Adam, Sally, Bill

Det är många gånger när det skulle vara användbart att kunna visa en avgränsad resultatlista som en del av en större fråga - en lista över de tre största kunderna för varje säljare, de 3 butikerna som ligger närmast var och en av dina kunder med högst utgifter , listan fortsätter.

Sluta sy ihop din rapport

MS AccessÄven om det är mer än möjligt att få detaljerna för att skapa den typen av rapport, skulle du vanligtvis behöva sy samman resultaten manuellt utanför Access som en del av ett kalkylblad eller en rapport.

Följande kod minskar behovet av att lura med frågeresultaten utanför Access, och i stället kan du enkelt producera den typ av resultat som visas ovan.

Låt oss först beskriva vad vi vill att koden ska kunna göra:

"Med en fråga, returnera x antal resultat, kombinerade till en enda sträng som avgränsas av y"

Innan vi börjar

Innan vi tittar på koden är det viktigt att notera att även om det är möjligt att skapa en VBA-funktion som är mer generisk och som kan hantera alla frågekombinationer, skulle det resultera i ganska lång kod så vad vi ska göra i den här artikeln är att definiera ett exempelfall och skriva funktionen för att hantera det fallet. Att göra det på detta sätt gör det mycket lättare för dig att kunna återskapa koden för att möta dina specifika behov.

Provfallet

Vi har en försäljningsdatabas som lagrar information om kundinköp, tillsammans med den produktkategori som köpet tillhör. Vi vill ta fram en rapport som visar de tre bästa kategorierna i fallande ordning per månad.

För enkelhetens skull håller vi exemplet till en enda tabell, även om huvudmannen fungerar oavsett din inställning. Tabellen vi kommer att använda är inställd enligt följande:

Utförsäljning
Köparens namn
Transaktions Datum
Transaktionsvärde
Kategori

Uppenbarligen är detta en alltför förenklad installation, men du får idén.

Nu - koden

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

Koden - förklarad

VBA-kodSom du kan se är koden ganska självförklarande. Vi börjar med att använda de angivna parametrarna för att bygga vår fråga. När frågesträngen har skapats kör vi den och loopar igenom resultaten, och sammanfogar dem för att bilda den enda resultatsträng vi letar efter.

Du kommer att märka att vi kontrollerar om vi ska lägga till en avgränsare i strängen eller inte - utan den här kontrollen skulle du ha antingen en dåligt formaterad resultatsträng, eller så måste du lägga till kod för att ta bort oönskade avgränsare - på det här sättet håller det snyggt och snyggt från början.

Själva funktionen kan naturligtvis kallas inifrån en fråga, en rapport eller var som helst du vill från Access.

Fix korrupt åtkomstdatabas

Om du stöter på skadade Access-databaser när du kör ovanstående kod är det bättre att använda något specialverktyg för att reparera dem och återställa alla tabeller från korrupta databaser.

Författarintroduktion:

Mitchell Pond är en dataåterställningsexpert i DataNumen, Inc., som är världsledande inom teknik för återställning av data, inklusive reparera SQL-problem och Excel-programvara för återställningsprogramvara. För mer information besök www.datanumen.com

Kommentarer är stängda.