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

Compartilhe agora:

Se você já precisou produzir uma lista delimitada de valores de campo/consulta junto com outras informações de seu banco de dados, você sabe que pode ser um desafio na melhor das hipóteses - e uma tarefa most as pessoas acham que não vai ser possível. Se, por exemplo, você foi solicitado a produzir um relatório de como foram os 5 principais vendedores - em ordem decrescente - para cada mês do ano, ou as 3 lojas mais próximas de cada cliente, então você pode ficar com disputas com consultas cruzadas ou combinação manual dos resultados fora do Access. Mas com a ajuda de um pouco de código VBA, você produzirá 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

Função pública 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 'Cria nossa string SQL usando os parâmetros fornecidos 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 'Percorre os resultados e cria a string para retornar 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 = Nada CategoryList = resultString End Function

O código – explicado

Código VBAComo você pode ver, o código é bastante auto-explicativo. nóstart usando os parâmetros fornecidos para construir nossa consulta. Depois que a string de consulta é criada, nós a executamos e percorremos os resultados, concatenando-os para formar a única string de resultado 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.