Hvis du nogensinde har haft brug for at producere en afgrænset liste over felt-/forespørgselsværdier sammen med andre oplysninger fra din database, ved du, at det i bedste fald kan være udfordrende – og en opgave, som de fleste tror ikke vil være mulig. Hvis du for eksempel er blevet bedt om at producere en rapport over, hvem de 5 bedste sælgere var – i faldende rækkefølge – for hver måned i året, eller de 3 butikker, der var tættest på hver kunde, så står du potentielt tilbage med at kæmpe med krydstabuleringsforespørgsler eller manuelt kombinere resultaterne uden for Access. Men med hjælp fra lidt VBA-kode vil du kunne producere resultater som følgende på få minutter…
| Jan | John, Sally, Bill |
| februar | Sally, Adam, John |
| Mar | Adam, Sally, Bill |
Der er mange gange, hvor det ville være nyttigt at kunne vise en afgrænset resultatliste som en del af en større forespørgsel - en liste over de tre største kunder for hver salgsrepræsentant, den nærmeste 3 butikker til hver af dine mest udgiftskunder , listen fortsætter.
Stop med at sy din rapport sammen
Selv om det er mere end muligt at få detaljerne til at oprette den slags rapport, vil du normalt ende med at skulle sy resultaterne manuelt sammen uden for Access som en del af et regneark eller en rapport.
Den følgende kode klipper behovet for at rode med forespørgselsresultaterne uden for Access og giver dig i stedet mulighed for let at producere den slags resultater, der er vist ovenfor.
Lad os først skitsere, hvad vi ønsker, at koden skal kunne:
"Givet en forespørgsel, returner x antal resultater kombineret til en enkelt streng, der er afgrænset af y"
Før vi begynder
Før vi ser på koden, er det vigtigt at bemærke, at selvom det er muligt at oprette en VBA-funktion, der er mere generisk og i stand til at håndtere enhver forespørgselskombination, vil det resultere i temmelig lang kode, så hvad vi gør i denne artikel er at definere et eksempel på en sag og skrive funktionen til at håndtere denne sag. At gøre det på denne måde vil gøre det meget lettere for dig at være i stand til at genskabe koden for at imødekomme dine specifikke behov.
Prøvesagen
Vi har en salgsdatabase, der gemmer detaljer om kundekøb sammen med den produktkategori, som købet tilhører. Vi ønsker at producere en rapport, der viser de tre øverste kategorier i faldende rækkefølge efter måned.
For at gøre det nemmere holder vi eksemplet til et enkelt bord, selvom hovedmanden fungerer uanset din opsætning. Tabellen, vi vil bruge, er opsat som følger:
| Sales |
| Kundenavn |
| Overførselsdato |
| TransaktionVærdi |
| Kategori |
Dette er åbenbart en alt for forenklet opsætning, men du får ideen.
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 - forklaret

Du bemærker, at vi kontrollerer, om vi skal tilføje en afgrænser til strengen eller ej - uden denne kontrol vil du ende med enten en dårligt formateret resultatstreng, eller du bliver nødt til at tilføje kode for at fjerne uønskede afgrænsere - denne måde holder tingene pæne og pæne fra starten.
Selve funktionen kan selvfølgelig kaldes fra en forespørgsel, en rapport eller hvor som helst du vil inden for Access.
Ret korrupt adgangsdatabase
Hvis du støder på beskadigede Access-databaser Når du kører ovenstående kode, er det bedre at bruge et specielt værktøj til at reparere dem og gendanne alle tabellerne fra de korrupte databaser.
Forfatter Introduktion:
Mitchell Pond er en datagendannelsesekspert i DataNumen, Inc., som er verdens førende inden for datagendannelsesteknologier, herunder reparere SQL-problem og excel-genopretningssoftwareprodukter. For mere information besøg www.datanumen.com