Dacă ați avut vreodată nevoie să creați o listă delimitată de valori de câmp/interogare alături de alte informații din baza de date, știți că poate fi cel mult o provocare - și o sarcină pe care majoritatea oamenilor o consideră imposibilă. Dacă, de exemplu, vi s-a cerut să creați un raport despre cine au fost primii 5 agenți de vânzări - în ordine descendentă - pentru fiecare lună a anului sau cele mai apropiate 3 magazine de fiecare client, atunci este posibil să vă confruntați cu interogări de tip tabel încrucișat sau cu combinarea manuală a rezultatelor în afara Access. Dar cu ajutorul unui mic cod VBA, veți produce rezultate precum 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
Deș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
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
Codul – explicat

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