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ą
Nors 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

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