Kaip jūsų prieigos prie vienos užklausos lauke parodyti kelis rezultatus

Bendrinti dabar:

Jei kada nors jums teko sukurti apribotą laukų / užklausų reikšmių sąrašą kartu su kita informacija iš jūsų duomenų bazės, žinote, kad tai gali būti sudėtinga užduotis – ir dauguma žmonių mano, kad ji neįmanoma. Pavyzdžiui, jei jūsų paprašė parengti ataskaitą apie tai, kas buvo 5 geriausi pardavimų vadybininkai (mažėjančia tvarka) kiekvieną metų mėnesį arba 3 artimiausias parduotuves kiekvienam klientui, tuomet jums gali tekti vargti su kryžminėmis užklausomis arba rankiniu būdu sujungti rezultatus ne „Access“ programoje. Tačiau pasitelkę nedidelį VBA kodą, per kelias minutes gausite tokius rezultatus kaip šie...

Sau Džonas, Sally, Bilas
vasaris Sally, Adomas, Jonas
sugadinti Adomas, Sally, Billas

Daug kartų būtų naudinga pateikti atskirtą rezultatų sąrašą kaip didesnės užklausos dalį – 3 didžiausių klientų sąrašą kiekvienam pardavėjui, 5 artimiausias parduotuves kiekvienam daugiausiai išleidžiančiam klientui. , sąrašas tęsiasi.

Nustokite derinti ataskaitą

Ponia AccessNors norint sukurti tokią ataskaitą yra daugiau nei įmanoma gauti išsamios informacijos, paprastai tektų rankiniu būdu sujungti rezultatus ne programoje „Access“ kaip skaičiuoklės ar ataskaitos dalį.

Šis kodas pašalina poreikį ieškoti užklausos rezultatų už „Access“ ribų, o vietoj to leis lengvai gauti tokius rezultatus, kaip parodyta aukščiau.

Pirmiausia apibūdinkime, ką norime, kad kodas galėtų atlikti:

„Atsižvelgiant į užklausą, grąžinkite x skaičių rezultatų, sujungtų į vieną eilutę, kurią skiria y“

Prieš pradedant

Prieš žiūrint į kodą, svarbu pažymėti, kad nors galima sukurti VBA funkciją, kuri yra bendresnė ir galinti apdoroti bet kokį užklausų derinį, tai padarius kodas būtų gana ilgas, todėl ką mes darysime šiame straipsnyje. yra apibrėžti atvejo pavyzdį ir parašyti funkciją, kuri tvarkytų tą atvejį. Jei tai padarysite, jums bus daug lengviau atkurti kodą, kad jis atitiktų jūsų konkrečius poreikius.

Bylos pavyzdys

Turime pardavimo duomenų bazę, kurioje saugoma išsami informacija apie klientų pirkinius, taip pat produkto kategorija, kuriai pirkinys priklauso. Norime parengti ataskaitą, kurioje pagal mėnesį būtų rodomos 3 populiariausios kategorijos mažėjančia tvarka.

Paprastumo dėlei pavyzdį paliksime vienoje lentelėje, nors pagrindinis veiksmas veiks nepriklausomai nuo jūsų sąrankos. Lentelė, kurią naudosime, yra sudaryta taip:

Pardavimas
Kliento vardas
Pervedimo data
Transakcijos vertė
Kategorija

Akivaizdu, kad tai pernelyg supaprastinta sąranka, bet jūs suprantate idėją.

Dabar – kodas

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

Kodas – paaiškino

VBA kodasKaip matote, kodas yra gana aiškus. Pradedame nuo pateiktų parametrų naudojimo užklausai sukurti. Sukūrus užklausos eilutę, ją vykdome ir peržiūrime rezultatus, sujungdami juos, kad sudarytume vieną ieškomą rezultatų eilutę.

Pastebėsite, kad tikriname, ar turėtume pridėti skirtuką prie eilutės, ar ne – be šio patikrinimo gautumėte arba prastai suformatuotą rezultatų eilutę, arba turėsite pridėti kodą, kad pašalintumėte nepageidaujamus skyriklius. Taip nuo pat pradžių viskas bus graži ir tvarkinga.

Pačią funkciją, žinoma, galima iškviesti iš užklausos, ataskaitos arba bet kur, kur tik norite, iš „Access“.

Pataisykite sugadintą prieigos duomenų bazę

Jei susidursi sugadintos Access duomenų bazės kai paleidžiate aukščiau pateiktą kodą, geriau naudoti kokį nors specializuotą įrankį, kad juos pataisytumėte ir atkurtumėte visas lenteles iš sugadintų duomenų bazių.

Autoriaus įvadas:

Mitchell Pond yra duomenų atkūrimo ekspertas DataNumen, Inc., kuri yra pasaulyje duomenų atkūrimo technologijų lyderė, įskaitant pataisyti SQL problemą ir Excel atkūrimo programinės įrangos produktai. Norėdami gauti daugiau informacijos, apsilankykite WWW.datanumen.com

Bendrinti dabar:

Komentarai yra uždaryti.