Como exibir vários resultados em um único campo de consulta no seu Access

Compartilhe agora:

Se você já precisou gerar uma lista delimitada de valores de campos/consultas juntamente com outras informações do seu banco de dados, sabe que pode ser um desafio e, na melhor das hipóteses, uma tarefa que a maioria das pessoas considera impossível. Se, por exemplo, você foi solicitado a gerar um relatório com os 5 melhores vendedores – em ordem decrescente – de cada mês do ano, ou as 3 lojas mais próximas de cada cliente, você provavelmente terá que lidar com consultas de tabela cruzada ou combinar os resultados manualmente fora do Access. Mas com um pouco de código VBA, você poderá gerar resultados como os seguintes em minutos…

Jan John, Sally, Bill
Fev Sally, Adam, John
Mar Adam, Sally, Bill

Muitas vezes seria útil poder exibir uma lista delimitada de resultados como parte de uma consulta maior – uma lista dos 3 maiores clientes para cada representante de vendas, as 5 lojas mais próximas de cada um de seus clientes que gastam mais , A lista continua.

Pare de costurar seu relatório

Sra. AccessEmbora seja mais do que possível obter os detalhes para criar esse tipo de relatório, você geralmente acaba tendo que unir manualmente os resultados fora do Access como parte de uma planilha ou relatório.

O código a seguir elimina a necessidade de mexer nos resultados da consulta fora do Access e, em vez disso, permitirá que você produza o tipo de resultado mostrado acima com facilidade.

Primeiro, vamos descrever o que queremos que o código seja capaz de fazer:

“Dada uma consulta, retorna x número de resultados, combinados em uma única string delimitada por y”

Antes de começarmos

Antes de examinarmos o código, é importante observar que, embora seja possível criar uma função VBA mais genérica e capaz de lidar com qualquer combinação de consulta, isso resultaria em um código bastante longo. é definir um caso de exemplo e escrever a função para lidar com esse caso. Fazer dessa maneira facilitará muito a recriação do código para atender às suas necessidades específicas.

O exemplo de caso

Temos um banco de dados de vendas que armazena detalhes das compras dos clientes, juntamente com a categoria de produto a que pertence a compra. Queremos produzir um relatório que mostre, por mês, as 3 principais categorias em ordem decrescente.

Para simplificar, manteremos o exemplo em uma única tabela, embora o principal funcione independentemente de sua configuração. A tabela que usaremos está configurada da seguinte maneira:

Vendas
Nome do cliente
Data da Transação
Valor da Transação
Categoria

Obviamente, esta é uma configuração excessivamente simplificada, mas você entendeu.

Agora - o código

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

O código – explicado

Código VBAComo você pode ver, o código é bastante autoexplicativo. Começamos usando os parâmetros fornecidos para construir nossa consulta. Uma vez criada a string de consulta, nós a executamos e percorremos os resultados, concatenando-os para formar a string de resultado única que estamos procurando.

Você notará que verificamos se devemos ou não adicionar um delimitador à string ou não - sem essa verificação, você terminaria com uma string de resultado mal formatada ou teria que adicionar código para remover delimitadores indesejados - desta forma mantém as coisas agradáveis ​​e organizadas desde o início.

A função em si pode, é claro, ser chamada de dentro de uma consulta, um relatório ou de qualquer lugar que você desejar no Access.

Corrigir banco de dados de acesso corrompido

Se você encontrar bancos de dados do Access corrompidos quando você executa o código acima, é melhor usar alguma ferramenta especializada para repará-los e recuperar todas as tabelas dos bancos de dados corrompidos.

Introdução do autor:

Mitchell Pond é um especialista em recuperação de dados em DataNumen, Inc., líder mundial em tecnologias de recuperação de dados, incluindo reparar problema de SQL e produtos de software de recuperação do Excel. Para mais informações visite www.datanumen.com

Compartilhe agora:

Comentários estão fechados.