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
Ä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

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