Propósito

✔ Programação GLOBAL® - Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog devem ser tratados como consultoria freelance. Queiram contatar-nos: brazilsalesforceeffectiveness@gmail.com | ESTE BLOG NÃO SE RESPONSABILIZA POR QUAISQUER DANOS PROVENIENTES DO USO DOS CÓDIGOS AQUI POSTADOS EM APLICAÇÕES PESSOAIS OU DE TERCEIROS.

Mostrando postagens com marcador Consultas. Mostrar todas as postagens
Mostrando postagens com marcador Consultas. Mostrar todas as postagens

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
diHITT - Notícias