Cum să afișați mai multe rezultate într-un singur câmp de interogare în accesul dvs

Dacă ați avut vreodată nevoie să produceți o listă delimitată de valori de câmp/interogare alături de alte informații din baza de date, veți ști că poate fi în cel mai bun caz o provocare – și o sarcină most oamenii cred că nu va fi posibil. Dacă, de exemplu, vi s-a cerut să realizați un raport despre cum au fost cei mai buni 5 oameni de vânzări – în ordine descrescătoare – pentru fiecare lună a anului sau cele mai apropiate 3 magazine de fiecare client, atunci este posibil să rămâneți cu dispute cu interogări încrucișate sau combinarea manuală a rezultatelor în afara Access. Dar cu ajutorul unui mic cod VBA, veți produce rezultate ca următoarele în câteva minute...

Jan John, Sally, Bill
februarie Sally, Adam, John
Tues. Adam, Sally, Bill

Există de multe ori când ar fi util să poți afișa o listă delimitată de rezultate ca parte a unei interogări mai ample – o listă cu primii 3 cei mai mari clienți pentru fiecare reprezentant de vânzări, cele mai apropiate 5 magazine de fiecare dintre clienții tăi cei mai mari cheltuieli , lista poate continua.

Nu vă mai legați raportul

Dna AccessDeși este mai mult decât posibil să obțineți detalii pentru a crea acest tip de raport, de obicei va trebui să combinați manual rezultatele în afara Access, ca parte a unei foi de calcul sau a unui raport.

Următorul cod elimină nevoia de a juca cu rezultatele interogării în afara Access și, în schimb, vă va permite să produceți cu ușurință genul de rezultate afișate mai sus.

Mai întâi, să descriem ce vrem să poată face codul:

„Dată o interogare, returnați un număr x de rezultate, combinate într-un singur șir care este delimitat de y”

Înainte de a începe

Înainte de a ne uita la cod, este important să rețineți că, deși este posibil să se creeze o funcție VBA care este mai generică și capabilă să gestioneze orice combinație de interogări, acest lucru ar duce la un cod destul de lung, așa că ceea ce vom face în acest articol este de a defini un exemplu de caz și de a scrie funcția care să gestioneze acel caz. Făcând acest lucru, vă va fi mult mai ușor să puteți recrea codul pentru a satisface nevoile dvs. specifice.

Cazul eșantion

Avem o bază de date de vânzări care stochează detalii despre achizițiile clienților, împreună cu categoria de produs căreia îi aparține achiziția. Dorim să realizăm un raport care să arate, pe lună, primele 3 categorii în ordine descrescătoare.

Pentru simplitate, vom păstra exemplul într-un singur tabel, deși principalul va funcționa indiferent de configurația dvs. Tabelul pe care îl vom folosi este configurat după cum urmează:

Vânzări
Numele clientului
Data tranzacției
Valoarea tranzacției
Categorii

Evident, aceasta este o configurație prea simplificată, dar înțelegeți ideea.

Acum – codul

Funcție publică 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 'Creați șirul nostru SQL folosind parametrii TOPSql furnizați = "SELECTS " & NumResults & " [categorie] FROM sales GROUP BY Format([TransactionDate],""mmm""), vânzări.Category HAVING (((Format([TransactionDate], ""mmm")) = """ & Month & """))" If SortAscending Then sSql = sSql & " ORDER BY Sum(sales.TransactionValue) DESC;" Set rst = CurrentDb.OpenRecordset(sSql) firstLine = True 'Recurgeți în buclă rezultatele și creați șirul pentru a returna Cu primul Do While Not .EOF If Not firstLine Then resultString = resultString & Delimiter & .Fields("category") Else resultString = resultString & .Fields("categorie") firstLine = False End If .MoveNext Loop End With Set rs = Nimic CategoryList = resultString End Function

Codul – explicat

Cod VBADupă cum puteți vedea, codul se explică de la sine. Noi start prin utilizarea parametrilor furnizați pentru a construi interogarea noastră. Odată ce șirul de interogare este creat, îl executăm și parcurgem rezultatele, concatenându-le împreună pentru a forma singurul șir de rezultat pe care îl căutăm.

Veți observa că verificăm dacă ar trebui sau nu să adăugăm un delimitator la șir sau nu - fără această verificare, veți ajunge fie cu un șir de rezultat prost formatat, fie ar trebui să adăugați cod pentru a elimina delimitatorii nedoriți - astfel menține lucrurile frumoase și ordonate de la început.

Funcția în sine poate fi apelată, desigur, dintr-o interogare, un raport sau oriunde doriți din Access.

Remediați baza de date cu acces corupt

Dacă întâlnești baze de date Access corupte când rulați codul de mai sus, atunci este mai bine să utilizați un instrument specializat pentru a le repara și a recupera toate tabelele din bazele de date corupte.

Introducerea autorului:

Mitchell Pond este un expert în recuperarea datelor DataNumen, Inc., care este lider mondial în tehnologiile de recuperare a datelor, inclusiv reparați problema SQL și produse software de recuperare Excel. Pentru mai multe informații vizitați www.datanumen.com

Lasă un comentariu

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate *