Existe uma function group_concat em access ms?

Existe uma function group_concat em access ms ou algo semelhante?

Você deve se perguntar se precisa de uma solução genérica (a outra é de Allen Browne ) ou se é necessária apenas para o presente propósito. Se você realmente só precisa dessa vez, faça do jeito mais fácil.

Em uma nota lateral, ao concatenar listas em código VBA, tire proveito de um truque que o pesquisador de longa data Trevor Best me ensinou, e isso é colocar o delimitador no início de cada valor e então usar Mid () para retirá-lo fora. Em vez disso, dentro do seu loop através dos registros filhos:

If Len(strOutput) = 0 Then strOutput = NewValue Else strOutput = strOutput & ", " & NewValue End If 

… use isso dentro do loop:

  strOutput = strOutput & ", " & NewValue 

… e quando você sair do loop, retire o delimitador principal:

  strOutput = Mid(strOutput, 3) 

Isso tem implicações em todo o lugar e simplifica o código para concatenação em toda uma série de contextos.

Eu encontrei este post por Duane Hookum (um MVP da Microsoft) que afirma ser capaz de fazer o que quiser. Eu não testei embora.


By the way, no caso de você estar interessado, é assim que eu encontrei:

Primeira pesquisa: o access group_concat leva-me a esta mensagem com esta resposta, mas o link foi quebrado .

Em seguida, procurei novamente após o conteúdo que a resposta estava tentando vincular e encontrei: site: http: //www.rogersaccesslibrary.com/ concatenate .

Há uma function de access para agrupar vários valores em um valor (um agregado personalizado, eu acho). O link é http://www.rogersaccesslibrary.com/Otherdownload.asp?SampleName='Generic%20Function%20To%20Concatenate%20Child% 20Registros

mas o site está em baixo por enquanto. Se você procurar no google href, encontrará muitas referências e exemplos.

Não. O Access não possui uma function GROUP_CONCAT. No entanto, é possível criar uma function VBA que permitirá passar uma string contendo uma instrução SQL e obter a funcionalidade equivalente (não que eu a recomende, mas é possível).

Tomando minha própria máquina de wayback pessoal, aqui está um código que eu escrevi quando os dinossauros governaram a Terra:

 Public Function ListQuery(SQL As String _ , Optional ColumnDelimiter As String = " " _ , Optional RowDelimter As String = vbCrLf) As String 'PURPOSE: to return a combined string from the passed query 'ARGS: ' 1. SQL is a valid Select statement ' 2. ColumnDelimiter is the character(s) that separate each column ' 3. RowDelimiter is the character(s) that separate each row 'RETURN VAL: 'DESIGN NOTES: Const PROCNAME = "ListQuery" Const MAXROWS = 100 Const MAXCOLS = 10 Dim oConn As ADODB.Connection Dim oRS As ADODB.Recordset Dim oField As ADODB.Field Dim sRow As cString Dim sResult As cString On Error GoTo ProcErr Set sResult = New cString Set sRow = New cString Set oConn = GetADOConn() sResult.Clear Do Until oRS.EOF sRow.Clear For Each oField In oRS.Fields With sRow If .Length > 0 Then .Append ColumnDelimiter End If .Append Nz(oField.Value) End With Next oField sRow.Trim If sRow.Length > 0 Then With sResult .Append sRow .Append RowDelimter End With End If oRS.MoveNext Loop oRS.Close oConn.Close With sResult If .Right(Len(RowDelimter)).Value = RowDelimter Then .Length = .Length - Len(RowDelimter) End If End With FunctionResult: ListQuery = sResult.Value CleanUp: Set sResult = Nothing Set sRow = Nothing Set oField = Nothing Set oRS = Nothing Set oConn = Nothing Exit Function ProcErr: ' logging code... Resume CleanUp End Function 

A function GetADOConn é uma function centralizada para recuperar a conexão atual do database. cString é uma class que imita o comportamento da class StringBuilder do .NET, mas foi escrita muito antes de o .NET ser algo diferente de um TLD e do marketing. Como isso está sendo chamado em todas as linhas, a concatenação de cadeias incorporada do VBA será lenta e, portanto, algo como uma class StringBuilder será necessária. O código original (que eu modifiquei parcialmente) tinha um limite no número de linhas e colunas que poderiam ser usadas, sobre as constantes das constantes.