Kuinka näyttää useita tuloksia yhdellä kyselykentällä Accessissa

Jos olet joskus joutunut luomaan rajatun luettelon kenttä-/kyselyarvoista sekä muista tietokannastasi löytyvistä tiedoista, tiedät, että se voi olla parhaimmillaankin haastavaa – ja tehtävä, jonka useimmat ihmiset uskovat olevan mahdotonta. Jos sinua on esimerkiksi pyydetty luomaan raportti siitä, ketkä olivat vuoden viisi parasta myyjää – laskevassa järjestyksessä – kunkin kuukauden osalta tai kolme lähimpänä olevaa myymälää kullekin asiakkaalle, joudut mahdollisesti painimaan ristiintaulukointikyselyiden kanssa tai yhdistämään tuloksia manuaalisesti Accessin ulkopuolella. Mutta pienen VBA-koodin avulla saat aikaan seuraavanlaisia ​​tuloksia muutamassa minuutissa…

Johannes John, Sally, Bill
helmikuu Sally, Adam, John
maaliskuu Adam, Sally, Bill

Usein on hyödyllistä pystyä näyttämään rajoitettu luettelo tuloksista osana suurempaa kyselyä - luettelo kolmen tärkeimmän asiakkaan kullekin myyntiedustajalle, lähin 3 myymälää jokaiselle eniten kuluttavalle asiakkaallesi , luetteloa jatketaan.

Lopeta raportin ompeleminen yhteen

rouva AccessVaikka on enemmän kuin mahdollista saada yksityiskohdat tällaisen raportin luomiseen, sinun on yleensä päädyttävä tulokset manuaalisesti yhteen Accessin ulkopuolella osana laskentataulukkoa tai raporttia.

Seuraava koodi poistaa tarpeen hioa kyselytuloksia Accessin ulkopuolella, ja sen sijaan voit tuottaa edellä esitetyt tulokset helposti.

Ensinnäkin hahmotellaan, mitä haluamme koodin pystyvän tekemään:

"Annetaan kysely, palauta x tulosten määrä yhdistettynä yhdeksi merkkijonoksi, jonka y rajaa"

Ennen kuin aloitamme

Ennen kuin tarkastelemme koodia, on tärkeää huomata, että vaikka on mahdollista luoda VBA-toiminto, joka on yleisempi ja pystyy käsittelemään mitä tahansa kyselyyhdistelmää, se johtaisi melko pitkään koodiin, joten mitä teemme tässä artikkelissa on määritellä esimerkkitapaus ja kirjoittaa toiminto tapauksen käsittelemiseksi. Kun teet sen tällä tavalla, koodin luominen on helpompaa, jotta se vastaa erityistarpeitasi.

Esimerkkitapaus

Meillä on myyntitietokanta, joka tallentaa tiedot asiakkaiden ostoista sekä tuoteryhmän, johon osto kuuluu. Haluamme tuottaa raportin, joka näyttää kuukausittain 3 tärkeintä luokkaa laskevassa järjestyksessä.

Yksinkertaisuuden vuoksi pidämme esimerkin yhdessä taulukossa, vaikka päämies toimii asennuksestasi riippumatta. Käytettävä taulukko on määritetty seuraavasti:

Myynti
Asiakkaan nimi
TransactionDate
TransactionValue
Luokka

Ilmeisesti tämä on liian yksinkertaistettu asennus, mutta saat idean.

Nyt - koodi

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

Koodi - selitetty

VBA-koodiKuten näet, koodi on melko itsestään selvää. Aloitamme käyttämällä annettuja parametreja kyselyn rakentamiseen. Kun kyselymerkkijono on luotu, suoritamme sen ja käymme tulokset läpi yhdistäen ne yhteen muodostaen etsimämme yhden tulosmerkkijonon.

Huomaat, että tarkistamme, pitäisikö meidän lisätä merkkijonoon erotinmerkki vai ei - ilman tätä tarkistusta päädyt joko huonosti muotoiltuun tulosmerkkijonoon tai joudut lisäämään koodin ei-toivottujen erottimien poistamiseksi - tällä tavoin pitää asiat alusta alkaen mukavana ja siistinä.

Itse toiminto voidaan tietysti kutsua kyselystä, raportista tai mistä tahansa haluamastasi Accessista.

Korjaa vioittunut pääsytietokanta

Jos kohtaat vioittuneet Access-tietokannat kun suoritat yllä olevan koodin, on parempi käyttää jotain erikoistyökalua niiden korjaamiseen ja palauttaa kaikki taulukot vioittuneista tietokannoista.

Tekijän esittely:

Mitchell Pond on tietojen palauttamisen asiantuntija DataNumen, Inc., joka on maailman johtava tietojen palautustekniikoissa, mukaan lukien korjata SQL-ongelma ja Excel-palautusohjelmistotuotteet. Lisätietoja osoitteessa www.datanumen.com

Kommenttien lisääminen on estetty.