MS Access | Aplicando Função Concatenação de Valores nos Campos das Consultas

MS Access | Aplicando Função Concatenação de Valores nos Campos das Consultas


No desenvolvimento de soluções VBA para bancos de dados, frequentemente há a necessidade de agrupar informações de diferentes registros em uma única linha. Isso é particularmente útil quando se deseja exibir múltiplos valores relacionados a uma chave primária de forma concatenada, como listar todos os membros de uma família em uma só célula de uma consulta. A função ConcatenateFieldValues permite exatamente isso.


 Aprenda: 17 Passos Essenciais para Melhorar seu Código VBA 


Essa função tem como base uma consulta SQL (Structured Query Language) que seleciona os valores de um campo específico. O código percorre todos os registros retornados e concatena os valores, separando-os por um delimitador definido pelo usuário — que, por padrão, é uma vírgula. Isso torna o uso da função flexível e aplicável a diversas situações em que diferentes separadores podem ser exigidos, como ponto-e-vírgula ou até mesmo uma quebra de linha.


Public Function ConcatenateFieldValues(pstrSQL As String, _

      Optional pstrDelim As String = ", ") As String


' Criado por Duane Hookom, 2003

' Este código pode ser incluído em qualquer aplicação, desde que

'      esta declaração seja mantida.

'

' Exemplo de uso:

'      tblFamily com FamID como chave primária numérica

'      tblFamMem com FamID, FirstName, DOB,...

' Retorna uma lista separada por vírgulas de FirstNames para um FamID

'                  Exemplo: John, Mary, Susan

' Em uma consulta:

'      SELECT FamID,

'      ConcatenateFieldValues("SELECT FirstName

'      FROM tblFamMem WHERE FamID =" & [FamID]) AS FirstNames

'      FROM tblFamily;

' ---------------------

' Modificado por Ken Snell 29 October 2005

'

' *** ESTA FUNÇÃO CONSTRÓI UMA STRING CONCATENADA QUE CONTÉM OS

' *** VALORES DE UM CAMPO PARA CADA REGISTRO EM UMA TABELA OU

' *** CONSULTA, SEPARADOS POR UM DELIMITADOR ESPECIFICADO.


Dim strConcat As String ' String que armazenará os valores concatenados


' Comentário sobre o uso de DAO

Dim db As DAO.Database

Dim rs As DAO.Recordset ' Objeto Recordset que será utilizado para armazenar os resultados da consulta


On Error Resume Next ' Ignora erros


strConcat = "" ' Inicializa a string concatenada


' Abre o banco de dados atual e executa a consulta passada como parâmetro (pstrSQL)

Set db = CurrentDb

Set rs = db.OpenRecordset(pstrSQL)


' Verifica se o Recordset não está vazio e processa os resultados

With rs

      If Not .EOF Then ' Se não estiver no final do Recordset

            .MoveFirst ' Move para o primeiro registro

            Do While Not .EOF ' Continua até o final dos registros

                  strConcat = strConcat & .Fields(0) & pstrDelim ' Concatena o valor do campo com o delimitador

                  .MoveNext ' Move para o próximo registro

            Loop

      End If

      .Close ' Fecha o Recordset

End With


Set rs = Nothing ' Libera a memória utilizada pelo Recordset


db.Close ' Fecha a conexão com o banco de dados

Set db = Nothing ' Libera a memória utilizada pelo objeto Database


' Remove o último delimitador da string concatenada

If Len(strConcat) > 0 Then strConcat = _

      Left(strConcat, Len(strConcat) - Len(pstrDelim))


' Retorna a string concatenada final

ConcatenateFieldValues = strConcat


Exit Function

End Function



Um dos grandes diferenciais desta função é sua aplicabilidade em consultas dentro do Microsoft Access. Um exemplo clássico seria uma tabela que armazena os nomes de membros de uma família, vinculada a outra tabela que armazena as informações da própria família. Utilizando a função ConcatenateFieldValues, é possível gerar uma consulta que retorne os nomes dos membros separados por vírgulas, tudo em um só campo, para cada família.


 Que tal aprender estes códigos também: 


A função também é extremamente eficiente, aproveitando o mecanismo de objetos DAO (Data Access Objects) para trabalhar diretamente com os registros no banco de dados. Além disso, a função foi projetada para que possa ser facilmente modificada para trabalhar com ADO (ActiveX Data Objects), caso o desenvolvedor precise acessar dados de fontes externas ao Access. Essa flexibilidade permite que a função seja aplicada em diferentes contextos, desde bancos de dados locais até conexões remotas.


Outro ponto importante é o tratamento de erros. Embora o código original utilize a instrução On Error Resume Next, que ignora erros, é recomendável adicionar um tratamento de erros mais robusto em ambientes críticos. Isso ajudaria a capturar possíveis falhas de execução, como consultas malformadas ou falta de conexão com o banco de dados, proporcionando mais segurança e controle sobre o comportamento do aplicativo.


Em suma, a função ConcatenateFieldValues resolve um problema comum em bancos de dados relacionais e é uma excelente ferramenta para gerar relatórios dinâmicos. Sua flexibilidade, eficiência e simplicidade a tornam uma função valiosa para desenvolvedores que buscam agregar dados de forma elegante e intuitiva, sem a necessidade de recorrer a técnicas mais complexas de programação.


  Clique aqui e nos contate via What's App para avaliarmos seus projetos 

Envie seus comentários e sugestões e compartilhe este artigo!
brazilsalesforceeffectiveness@gmail.com


 Série Donut Project 
DONUT PROJECT: VBA - Projetos e Códigos de Visual Basic for Applications (Visual Basic For Apllication)eBook - DONUT PROJECT 2024 - Volume 03 - Funções Financeiras - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 02 - Conectando Banco de Dados - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 01 - André Luiz Bernardes


 Clique nas capas abaixo e compre também: 

DONUT PROJECT: VBA - Projetos e Códigos de Visual Basic for Applications (Visual Basic For Apllication)


Série Top 10 Funções: Top 10 Funções VBA para o Microsoft Excel (Série Top 10 Funções - Microsoft Excel)


eBook - DONUT PROJECT 2024 - Volume 03 - Funções Financeiras - André Luiz Bernardes

eBook - DONUT PROJECT 2024 - Volume 02 - Conectando Banco de Dados - André Luiz Bernardes

eBook - DONUT PROJECT 2024 - Volume 01 - André Luiz Bernardes

Nenhum comentário:

Postar um comentário

diHITT - Notícias