MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

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


3 participantes

    [Resolvido]Como Concatenar valores de linhas Diferentes em uma Consulta?

    avatar
    uepapedro
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 9
    Registrado : 07/02/2014

    [Resolvido]Como Concatenar valores de linhas Diferentes em uma Consulta? Empty [Resolvido]Como Concatenar valores de linhas Diferentes em uma Consulta?

    Mensagem  uepapedro 6/4/2014, 19:43

    Olá Pessoal, sou iniciante no Access e no VBA, trabalho no departamento pessoal da Secretaria de Educação da minha Cidade. Como são mais de 1.500,00 servidores, preciso ter um controle de lotação para cada servidor, pois um servidor pode ser lotado em vários Locais ou departamentos, Exemplo: Um professor pode ter 40h na escola X, 80h na escola Y e 60h na Escola W. Também preciso ter um controle das horas totais de cada Servidor, pois um servidor não pode ultrapassar o total de280h.

    Tenho Três Tabelas: (Servidores, Carga Horária e Lotação)com relacionamento entre elas
    1 Servidor pode ter várias cargas horárias, e várias lotações

    Fiz uma consulta e adicionei uma Linha Total onde ela soma as horas que o servidor recebe na tabela carga horária.
    O problema está aqui, a consulta só agrupa o servidor e soma os valores das linhas se o local de lotação for o mesmo em cada linha. Gostaria  de Agrupar todos os locais onde ele for lotado na mesma linha, tipo concatenar as lotações que ele vir a receber separados por uma barra tipo: (Escola Carlos Ribeiro/Escola Palma Muniz/Escola Rui Barbosa) , pois no relatório que irei criar baseado em numa consulta, os dados do servidor  terão que ser agrupados em uma única linha.

    Se puderem me ajudar, agradeço muito.

    Cópia do BD.

    Projeto em Andamento
    avatar
    Convidado
    Convidado


    [Resolvido]Como Concatenar valores de linhas Diferentes em uma Consulta? Empty Re: [Resolvido]Como Concatenar valores de linhas Diferentes em uma Consulta?

    Mensagem  Convidado 6/4/2014, 22:12

    Olá. primeiro cria um módulo e cola no módulo isso:
    '************ 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
                   varConcat = varConcat & rs(strCampoConcat) & "/"
                   .MoveNext
               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 **********

    Salva o módulo como o nome Mod_Concatena ou outro nome se assim desejar. A seguir  cria uma consulta em modo designe, entra no modo sql dessa consulta e cola isso:
    SELECT Servidores.CódigoServidor, Servidores.NomeServidor, IIf(IsNull([CódigoServidor]),0,DSum("[Fundamental_I]","[Carga Horária]","[CódigoServidor]=" & [CódigoServidor])) AS Fundamental_I, IIf(IsNull([CódigoServidor]),0,DSum("[Fundamental_II]","[Carga Horária]","[CódigoServidor]=" & [CódigoServidor])) AS Fundamental_II, IIf(IsNull([CódigoServidor]),0,DSum("[EducaçãoInfantil]","[Carga Horária]","[CódigoServidor]=" & [CódigoServidor])) AS EducaçãoInfantil, IIf(IsNull([CódigoServidor]),0,DSum("[EJA]","[Carga Horária]","[CódigoServidor]=" & [CódigoServidor])) AS EJA, IIf(IsNull([CódigoServidor]),0,DSum("[LabInformática]","[Carga Horária]","[CódigoServidor]=" & [CódigoServidor])) AS Laboratorio_Info, IIf(IsNull([CódigoServidor]),0,DSum("[Substituição]","[Carga Horária]","[CódigoServidor]=" & [CódigoServidor])) AS Substituicao, fConcatFilho("Carga Horária","CódigoServidor","Lotação","Long",[CódigoServidor]) AS Lotacao
    FROM Servidores
    WHERE (((IIf(IsNull([CódigoServidor]),0,DSum("[Fundamental_I]","[Carga Horária]","[CódigoServidor]=" & [CódigoServidor]))) Is Not Null)) OR (((IIf(IsNull([CódigoServidor]),0,DSum("[Fundamental_II]","[Carga Horária]","[CódigoServidor]=" & [CódigoServidor]))) Is Not Null)) OR (((IIf(IsNull([CódigoServidor]),0,DSum("[EducaçãoInfantil]","[Carga Horária]","[CódigoServidor]=" & [CódigoServidor]))) Is Not Null)) OR (((IIf(IsNull([CódigoServidor]),0,DSum("[EJA]","[Carga Horária]","[CódigoServidor]=" & [CódigoServidor]))) Is Not Null)) OR (((IIf(IsNull([CódigoServidor]),0,DSum("[LabInformática]","[Carga Horária]","[CódigoServidor]=" & [CódigoServidor]))) Is Not Null)) OR (((IIf(IsNull([CódigoServidor]),0,DSum("[Substituição]","[Carga Horária]","[CódigoServidor]=" & [CódigoServidor]))) Is Not Null));
    ai é só salvar a consulta e testar para ver se é isso que deseja.

    "Lembrete: Não retire o cabeçalho do módulo"
    avatar
    uepapedro
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 9
    Registrado : 07/02/2014

    [Resolvido]Como Concatenar valores de linhas Diferentes em uma Consulta? Empty Re: [Resolvido]Como Concatenar valores de linhas Diferentes em uma Consulta?

    Mensagem  uepapedro 6/4/2014, 22:53

    Primeiramente, muito obrigado por doar um pouco do seu tempo pra nos ajudar!

    Colei o código na consulta e deu um erro de compilação, postei a descrição do erro logo abaixo.

    Gostaria de saber se tenho que mudar alguma coisa no código do módulo ou só colar como está?

    Tenho como o Sr. demonstrar no modelo do Projeto que postei para que eu possa estudar como funciona?


    esse é o erro: Erro de Compilação. Na expressão de consulta ‘IIf(IsNull([CódigoServidor]),0,DSum("[Fundamental_I]","[Carga Horária]","[CódigoServidor]=" & [CódigoServidor])’)’
    avatar
    Convidado
    Convidado


    [Resolvido]Como Concatenar valores de linhas Diferentes em uma Consulta? Empty Re: [Resolvido]Como Concatenar valores de linhas Diferentes em uma Consulta?

    Mensagem  Convidado 6/4/2014, 23:06

    Amigo, é só seguir o que indiquei, colar a função em novo módulo criar uma consulta em modo sql e colar o select na área do sql e salvar. abre o exemplo, a consulta em questão é a "teste".
    avatar
    uepapedro
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 9
    Registrado : 07/02/2014

    [Resolvido]Como Concatenar valores de linhas Diferentes em uma Consulta? Empty Re: [Resolvido]Como Concatenar valores de linhas Diferentes em uma Consulta?

    Mensagem  uepapedro 6/4/2014, 23:12

    Nossa! Era isso mesmo que eu queria! ficou perfeito. Muito Obrigado.

    Vou verificar direitinho onde fiz algo errado, pois quero entender como funciona.
    avatar
    Convidado
    Convidado


    [Resolvido]Como Concatenar valores de linhas Diferentes em uma Consulta? Empty Re: [Resolvido]Como Concatenar valores de linhas Diferentes em uma Consulta?

    Mensagem  Convidado 6/4/2014, 23:48

    Saudações do fórum pelo retorno e fechamento do tópico.
    avatar
    santosj1966
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 9
    Registrado : 15/09/2015

    [Resolvido]Como Concatenar valores de linhas Diferentes em uma Consulta? Empty exemplo

    Mensagem  santosj1966 28/2/2023, 19:34

    Olá,

    Não se arranja um exemplo? O download dá erro.

    Obrigado
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8449
    Registrado : 05/11/2009

    [Resolvido]Como Concatenar valores de linhas Diferentes em uma Consulta? Empty Re: [Resolvido]Como Concatenar valores de linhas Diferentes em uma Consulta?

    Mensagem  Alexandre Neves 7/3/2023, 19:03

    Boa tarde
    santosj1966 mantenha o cabeçalho para resumo da dúvida


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    Conteúdo patrocinado


    [Resolvido]Como Concatenar valores de linhas Diferentes em uma Consulta? Empty Re: [Resolvido]Como Concatenar valores de linhas Diferentes em uma Consulta?

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 10/5/2024, 13:40