MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Retirar símbolo (; ou , ou * ou qq outro) do último registo de um campo concatenado

    Compartilhe

    Ricardo84
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 69
    Registrado : 18/01/2014

    [Resolvido]Retirar símbolo (; ou , ou * ou qq outro) do último registo de um campo concatenado

    Mensagem  Ricardo84 em 29/11/2018, 10:21

    Bom dia,

    Tenho um código retirado de um forum que concatena numa linha de uma consulta todos os registos registados num determinado campo de uma tabela/consulta. Os valores são separados por ";" ou outro símbolo que queiramos, mas põe também a seguir ao último.
    Por exemplo:

    João; Paulo; Rui; António;

    O que pretendia era que o último ";" não aparecesse...

    Fica aqui o código

    Código:
    '************ Início do Código **********
    ' Este código foi escrito originalmente por Dev Hashish
    ' Não pode ser alterado ou distribuído
    ' exceto como parte de um aplicativo.
    ' Use-o à vontade em qualquer aplicativo
    ' desde que esta nota de Copyright não seja alterada.
    '
    ' Código cortesia de
    ' Dev Hashish (http://www.mvps.org/access/)
    '
    ' Tradução e adaptação
    ' OsmarJr (jrosmar@yahoo.com.br)
    '=========================================

    Function fConcatFilho(strTabelaFilho As String, _
                        strNomeID As String, _
                        strCampoConcat As String, _
                        strTipoID As String, _
                        varValorID As Variant) _
                        As String

    ' Devolve o conteúdo de um campo da tabela Muitos de um
    ' relacionamento 1:M, concatenado e separados por ponto-e-vírgula
    '
    ' Exemplo de uso:
    '   ?fConcatFilho("Detalhes do Pedido", "NúmeroDoPedido", "Quantidade", _
    '                "Long", 10255)
    ' Onde
    '
    ' Detalhes do Pedido = Tabela Muitos
    '       NúmeroDoPedido = Chave primária da tabela Um
    '       Quantidade = Nome do campo a ser concatenado
    '       Long = Tipo de dados da chave primária
    '       10255 = Número do pedido que contém os detalhes
    '
    Dim db As Database
    Dim Rs As Recordset
    Dim varConcat As Variant
    Dim strCriteria As String
    Dim strSQL As String

    On Error GoTo Err_fConcatFilho
        
        varConcat = Null
        Set db = CurrentDb
        strSQL = "SELECT [" & strCampoConcat & "] FROM [" & strTabelaFilho & "]"
        strSQL = strSQL & " WHERE "
        
        Select Case strTipoID
            Case "String":
                strSQL = strSQL & "[" & strNomeID & "] = '" & varValorID & "'"
            Case "Long", "Integer", "Double":    'Autonumeração é tipo Inteiro Longo
                strSQL = strSQL & "[" & strNomeID & "] = " & varValorID
            Case Else
                GoTo Err_fConcatFilho
        End Select
        
        Set Rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
    ' Precisamos ter certeza que os registros Sub existem
        With Rs
            If .RecordCount <> 0 Then
            
                ' Começa a concatenar os registros
                Do While Not Rs.EOF
                    If Rs.RecordCount > 0 Then
                    varConcat = varConcat & Rs(strCampoConcat) & "; "
                    .MoveNext
                    Else
                     varConcat = varConcat & Rs(strCampoConcat) & " "
                    .MoveNext
                End If
                Loop
            End If
        End With
            
        ' Pronto… Já temos a string concatenada
        ' Agora limpamos o; no final da string
        fConcatFilho = Left(varConcat, Len(varConcat) - 1)

    Exit_fConcatFilho:
        Set Rs = Nothing
        Set db = Nothing
        Exit Function

    Err_fConcatFilho:
        Resume Exit_fConcatFilho
    End Function

    '************ Final do Código **********
    avatar
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10283
    Registrado : 04/11/2009

    Re: [Resolvido]Retirar símbolo (; ou , ou * ou qq outro) do último registo de um campo concatenado

    Mensagem  JPaulo em 29/11/2018, 11:39

    Teste por favor;

    Código:
    '************ Início do Código **********
    ' Este código foi escrito originalmente por Dev Hashish
    ' Não pode ser alterado ou distribuído
    ' exceto como parte de um aplicativo.
    ' Use-o à vontade em qualquer aplicativo
    ' desde que esta nota de Copyright não seja alterada.
    '
    ' Código cortesia de
    ' Dev Hashish (http://www.mvps.org/access/)
    '
    ' Tradução e adaptação
    ' OsmarJr (jrosmar@yahoo.com.br)
    '=========================================

    Function fConcatFilho(strTabelaFilho As String, _
                        strNomeID As String, _
                        strCampoConcat As String, _
                        strTipoID As String, _
                        varValorID As Variant) _
                        As String

    ' Devolve o conteúdo de um campo da tabela Muitos de um
    ' relacionamento 1:M, concatenado e separados por ponto-e-vírgula
    '
    ' Exemplo de uso:
    '  ?fConcatFilho("Detalhes do Pedido", "NúmeroDoPedido", "Quantidade", _
    '                "Long", 10255)
    ' Onde
    '
    ' Detalhes do Pedido = Tabela Muitos
    '      NúmeroDoPedido = Chave primária da tabela Um
    '      Quantidade = Nome do campo a ser concatenado
    '      Long = Tipo de dados da chave primária
    '      10255 = Número do pedido que contém os detalhes
    '
    Dim db As Database
    Dim Rs As Recordset
    Dim varConcat As Variant
    Dim strCriteria As String
    Dim strSQL As String

    On Error GoTo Err_fConcatFilho
       
        varConcat = Null
        Set db = CurrentDb
        strSQL = "SELECT [" & strCampoConcat & "] FROM [" & strTabelaFilho & "]"
        strSQL = strSQL & " WHERE "
       
        Select Case strTipoID
            Case "String":
                strSQL = strSQL & "[" & strNomeID & "] = '" & varValorID & "'"
            Case "Long", "Integer", "Double":    'Autonumeração é tipo Inteiro Longo
                strSQL = strSQL & "[" & strNomeID & "] = " & varValorID
            Case Else
                GoTo Err_fConcatFilho
        End Select
       
        Set Rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
    ' Precisamos ter certeza que os registros Sub existem
        With Rs
            If .RecordCount <> 0 Then
           
                ' Começa a concatenar os registros
                Do While Not Rs.EOF
                    If Rs.RecordCount > 0 Then
                    varConcat = varConcat & Rs(strCampoConcat) & "; "
                    .MoveNext
                    Else
                    varConcat = varConcat & Rs(strCampoConcat) & " "
                    .MoveNext
                End If
                Loop
            End If
        End With
           
        ' Pronto… Já temos a string concatenada
        ' Agora limpamos o; no final da string
        fConcatFilho = Left(varConcat, Len(Trim(varConcat)) - 1)

    Exit_fConcatFilho:
        Set Rs = Nothing
        Set db = Nothing
        Exit Function

    Err_fConcatFilho:
        Resume Exit_fConcatFilho
    End Function

    '************ Final do Código **********


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]

    Ricardo84
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 69
    Registrado : 18/01/2014

    Re: [Resolvido]Retirar símbolo (; ou , ou * ou qq outro) do último registo de um campo concatenado

    Mensagem  Ricardo84 em 30/11/2018, 00:11

    Boa noite,

    JPaulo, ficou resolvido... acho que não me iria lembrar de algo assim... e uso as funções Direita e Esquerda muitas vezes no excel...
    Obrigado
    avatar
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10283
    Registrado : 04/11/2009

    Re: [Resolvido]Retirar símbolo (; ou , ou * ou qq outro) do último registo de um campo concatenado

    Mensagem  JPaulo em 7/12/2018, 13:41

    Obrigado pelo retorno o forum agradece.


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]

      Data/hora atual: 16/12/2018, 11:24