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

Distribuie acum:

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

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

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

Cod VBADupă cum puteți vedea, codul este destul de explicit. Începem prin a folosi parametrii furnizați pentru a construi interogarea noastră. Odată ce șirul de interogare este creat, îl executăm și parcurgem rezultatele, concatenându-le pentru a forma șirul de rezultate unic 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

Distribuie acum:

Comentariile sunt închise.