Come visualizzare più risultati in un singolo campo di query nel tuo accesso

Condividi ora:

Se vi è mai capitato di dover generare un elenco delimitato di valori di campi/query insieme ad altre informazioni dal vostro database, saprete che può essere un'impresa ardua, se non impossibile. Ad esempio, se vi viene chiesto di creare un report che elenchi i 5 migliori venditori, in ordine decrescente, per ogni mese dell'anno, o i 3 negozi più vicini a ciascun cliente, potreste trovarvi a dover gestire query a doppia entrata o a combinare manualmente i risultati al di fuori di Access. Ma con l'aiuto di un po' di codice VBA, potrete ottenere risultati come il seguente in pochi minuti...

Gen John, Sally, Bill
Febbraio Sally, Adamo, John
Mar Adam, Sally, Bill

Ci sono molte volte in cui sarebbe utile poter visualizzare un elenco delimitato di risultati come parte di una query più ampia: un elenco dei primi 3 maggiori clienti per ogni rappresentante di vendita, i 5 negozi più vicini a ciascuno dei tuoi clienti che spendono di più , l'elenco potrebbe continuare.

Smetti di ricucire il tuo rapporto

signora accessoSebbene sia più che possibile ottenere i dettagli per creare quel tipo di rapporto, di solito si finisce per dover unire manualmente i risultati al di fuori di Access come parte di un foglio di calcolo o di un rapporto.

Il codice seguente elimina la necessità di giocherellare con i risultati della query al di fuori di Access e, invece, ti consentirà di produrre facilmente il tipo di risultati sopra indicato.

Per prima cosa, descriviamo cosa vogliamo che il codice sia in grado di fare:

"Data una query, restituisce un numero x di risultati, combinati in un'unica stringa delimitata da y"

Prima di iniziare

Prima di esaminare il codice, è importante notare che sebbene sia possibile creare una funzione VBA più generica e in grado di gestire qualsiasi combinazione di query, ciò comporterebbe un codice piuttosto lungo, quindi cosa faremo in questo articolo è definire un caso di esempio e scrivere la funzione per gestire quel caso. In questo modo sarà molto più facile per te essere in grado di ricreare il codice per soddisfare le tue esigenze specifiche.

Il caso campione

Abbiamo un database delle vendite che memorizza i dettagli degli acquisti dei clienti, insieme alla categoria di prodotto a cui appartiene l'acquisto. Vogliamo produrre un report che mostri, per mese, le prime 3 categorie in ordine decrescente.

Per semplicità terremo l'esempio su una singola tabella, anche se il principal funzionerà indipendentemente dalla tua configurazione. La tabella che useremo è impostata come segue:

Sales
Nome del cliente
Data transazione
Valore transazione
Categoria

Ovviamente questa è una configurazione eccessivamente semplificata, ma hai avuto l'idea.

Ora - il codice

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

Il codice – spiegato

Codice VBACome potete vedere, il codice è piuttosto autoesplicativo. Iniziamo utilizzando i parametri forniti per costruire la nostra query. Una volta creata la stringa di query, la eseguiamo e scorriamo i risultati, concatenandoli per formare la singola stringa di risultato che stiamo cercando.

Noterai che controlliamo se aggiungere o meno un delimitatore alla stringa o meno - senza questo controllo ti ritroveresti con una stringa di risultato formattata male o dovresti aggiungere codice per rimuovere delimitatori indesiderati - in questo modo mantiene le cose belle e ordinate fin dall'inizio.

La funzione stessa può ovviamente essere richiamata da una query, un report o ovunque tu voglia da Access.

Correggi il database di Access danneggiato

Se incontri database di Access corrotti quando esegui il codice sopra, allora è meglio usare uno strumento specializzato per ripararli e recuperare tutte le tabelle dai database corrotti.

Introduzione dell'autore:

Mitchell Pond è un esperto di recupero dati in DataNumen, Inc., che è il leader mondiale nelle tecnologie di recupero dati, tra cui riparare il problema SQL ed eccellere prodotti software di recupero. Per maggiori informazioni visita www.datanumen.com

Condividi ora:

I commenti sono chiusi.