Hvis du noen gang har hatt behov for å lage en avgrenset liste over felt-/spørringsverdier sammen med annen informasjon fra databasen din, vet du at det i beste fall kan være utfordrende – og en oppgave most folk tror det ikke kommer til å være mulig. Hvis du for eksempel har blitt bedt om å lage en rapport om hvem som var de 5 beste selgerne – i synkende rekkefølge – for hver måned i året, eller de 3 nærmeste butikkene til hver kunde, er du potensielt igjen med å krangle med krysstabellspørringer eller manuelt kombinere resultatene utenfor Access. Men ved hjelp av litt VBA-kode, vil du produsere resultater som følgende i løpet av minutter...
jan | John, Sally, Bill |
Februar | Sally, Adam, John |
mar | Adam, Sally, Bill |
Det er mange ganger når det ville være nyttig å kunne vise en avgrenset liste med resultater som en del av et større søk – en liste over de tre største kundene for hver selger, de 3 nærmeste butikkene til hver av kundene dine med høyest forbruk. , listen fortsetter.
Slutt å sy rapporten sammen
Selv om det er mer enn mulig å få detaljene for å lage den typen rapporter, vil du vanligvis ende opp med å sette sammen resultatene manuelt utenfor Access som en del av et regneark eller en rapport.
Følgende kode eliminerer behovet for å fikle med søkeresultatene utenfor Access, og vil i stedet tillate deg å produsere den typen resultater vist ovenfor med letthet.
Først, la oss skissere hva vi vil at koden skal kunne gjøre:
"Gi et søk, returner x antall resultater, kombinert til en enkelt streng som er avgrenset med y"
Før vi begynner
Før vi ser på koden, er det viktig å merke seg at selv om det er mulig å lage en VBA-funksjon som er mer generisk og i stand til å håndtere en hvilken som helst søkekombinasjon, vil dette resultere i ganske lang kode, så det vi skal gjøre i denne artikkelen er å definere en eksempelsak og skrive funksjonen for å håndtere den saken. Å gjøre det på denne måten vil gjøre det mye enklere for deg å kunne gjenskape koden for å møte dine spesifikke behov.
Eksempelsaken
Vi har en salgsdatabase som lagrer detaljer om kundekjøp, sammen med produktkategorien som kjøpet tilhører. Vi ønsker å lage en rapport som viser, etter måned, de 3 beste kategoriene i synkende rekkefølge.
For enkelhets skyld holder vi eksemplet til en enkelt tabell, selv om prinsippet vil fungere uavhengig av oppsettet ditt. Tabellen vi skal bruke er satt opp som følger:
salgs~~POS=TRUNC |
Kundenavn |
Transaksjonsdato |
Transaksjonsverdi |
Kategori |
Selvfølgelig er dette et altfor forenklet oppsett, men du skjønner ideen.
Nå – koden
Offentlig funksjonskategoriliste(måned som streng, tallresultater som heltall, sorteringsascending som boolsk, skilletegn som streng) Som streng Dim sSql, resultatstreng som streng Dim rst As Recordset Dim firstLine As Boolsk 'Opprett SQL-strengen vår ved å bruke de oppgitte parameterne sSql = "SELECT TOP " & NumResults & " [category] FROM sales GROUP BY Format([TransactionDate],""mmm""), sales.Category HAVING (((Format([TransactionDate], ""mmm")) = """ & Måned & """))" If SortAscending Then sSql = sSql & " ORDER BY Sum(sales.TransactionValue) DESC;" Sett rst = CurrentDb.OpenRecordset(sSql) firstLine = True 'Sløyfe gjennom resultatene, og lag strengen for å returnere med 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 – forklart
Som du kan se, er koden ganske selvforklarende. Vi start ved å bruke parameterne som er oppgitt for å bygge søket vårt. Når spørringsstrengen er opprettet, kjører vi den og går gjennom resultatene, og setter dem sammen for å danne den eneste resultatstrengen vi leter etter.
Du vil legge merke til at vi sjekker om vi skal legge til et skilletegn i strengen eller ikke - uten denne kontrollen ville du ende opp med enten en dårlig formatert resultatstreng, eller du må legge til kode for å fjerne uønskede skilletegn - på denne måten holder det pent og ryddig fra første stund.
Selve funksjonen kan selvfølgelig kalles fra en spørring, en rapport, eller hvor som helst du vil fra Access.
Reparer ødelagt tilgangsdatabase
Hvis du møter ødelagte Access-databaser når du kjører koden ovenfor, er det bedre å bruke et spesialverktøy for å reparere dem og gjenopprette alle tabellene fra de korrupte databasene.
Forfatterintroduksjon:
Mitchell Pond er en datagjenopprettingsekspert innen DataNumen, Inc., som er verdensledende innen datagjenopprettingsteknologier, inkludert reparere SQL-problem og excel-programvareprodukter for gjenoppretting. For mer informasjon besøk www.datanumen. Med
Legg igjen en kommentar