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


2 participantes

    função PROCVMÚLTIPLO

    mucascosta
    mucascosta
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 32
    Registrado : 22/01/2010

    função PROCVMÚLTIPLO Empty função PROCVMÚLTIPLO

    Mensagem  mucascosta 15/12/2018, 18:36

    Como usar a função abaixo, originalmente do EXCEL, no ACCESS?
    Necessito usar numa consulta e/ou em relatório.
    RESUMO: Converte todos os dados, com a mesma data, de uma coluna em uma linha.

    A função PROCVMÚLTIPLO(NomePesquisa; IntervaloPesquisa; IntervaloRetorno) pesquisa um valor num intervalo e retorna todas as ocorrências correspondentes num outro 'intervalo informado, separadas por ponto e vírgula.


    Function PROCVMÚLTIPLO(NomePesquisa As String, IntervaloPesquisa As Range, IntervaloRetorno As Range) As String
    Dim Valor, Nome
    Dim k As Long
    Application.Volatile
    k = 1
    For Each Nome In IntervaloPesquisa
    If Nome = NomePesquisa Then
    Valor = IntervaloRetorno(k, 1)
    PROCVMÚLTIPLO = PROCVMÚLTIPLO & Valor & "; "
    End If
    k = k + 1
    Next Nome
    PROCVMÚLTIPLO = Left(PROCVMÚLTIPLO, Len(PROCVMÚLTIPLO) - 2)
    End Function
    mucascosta
    mucascosta
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 32
    Registrado : 22/01/2010

    função PROCVMÚLTIPLO Empty Função PROCVMÚLTIPLO

    Mensagem  mucascosta 16/12/2018, 19:04

    Explicando melhor:
    Tabela: tbl_Teste
    Colunas: Data, Hora, Tipo
    DADOS DA TABELA:
    Data: 01/12/2018, Hora, 08:00, Tipo: A
    Data: 01/12/2018, Hora, 08:10, Tipo: A
    Data: 01/12/2018, Hora, 08:20, Tipo: B
    Data: 02/12/2018, Hora, 08:00, Tipo: D
    Data: 02/12/2018, Hora, 08:10, Tipo: E
    Data: 03/12/2018, Hora, 08:00, Tipo: A
    Data: 03/12/2018, Hora, 08:10, Tipo: B
    Data: 03/12/2018, Hora, 08:20, Tipo: C
    Resultado pretendido:
    Data: 01/12/2018, Campo pretendido: 08:00-A, 08:10-A, 08:20-B
    Data: 02/12/2018, Campo pretendido: 08:00-D, 08:10-E
    Data: 03/12/2018, Campo pretendido: 08:00-A, 08:10-B, 08:20-C

    Tentei a função abaixo: Porém, numa consulta, ela repete, em todas as datas, sempre os dados da primeira data: 08:00-A, 08:10-A, 08:20-B
    Ficando assim:
    Data: 01/12/2018, Campo pretendido: 08:00-A, 08:10-A, 08:20-B
    Data: 02/12/2018, Campo pretendido: 08:00-A, 08:10-A, 08:20-B
    Data: 03/12/2018, Campo pretendido: 08:00-A, 08:10-A, 08:20-B

    Public Function GeralinhaUnica() As String
    Dim strRetorno As String
    Dim ssql As String
    Dim rst As DAO.Recordset
    strRetorno = ""
    ssql = ""
    ssql = "SELECT tbl_Teste.Hora, tbl_Agenda.Tipo FROM tbl_Teste;"

    Set rst = CurrentDb.OpenRecordset(ssql)
    While Not rst.EOF
    strRetorno = strRetorno & """" & rst("Hora").Value & """-""" & rst("Tipo").Value & """" & ","
    rst.MoveNext
    Wend
    rst.Close
    GeralinhaUnica = strRetorno
    End Function
    mucascosta
    mucascosta
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 32
    Registrado : 22/01/2010

    função PROCVMÚLTIPLO Empty função PROCVMÚLTIPLO

    Mensagem  mucascosta 17/12/2018, 21:54

    Solução perfeita! dada por Damasceno Jr no Fórum: http://www.redeaccess.com.br

    SQL da consulta que traz o resultado pretendido:
    Código:

    SELECT Data, fncGeraLinhaUnica([Data]) AS [Campo pretendido]
    FROM tbl_Teste
    GROUP BY Data, fncGeraLinhaUnica([Data]);
    ===============================================================

    Função que faz o serviço:

    Código:

    Public Function fncGeraLinhaUnica(dtData As Date) As String

    Dim rs As DAO.Recordset
    Dim strResultado As String

    Set rs = CurrentDb.OpenRecordset("select format(Hora,'hh:nn') & '-' & Tipo as [Campo pretendido] " & _
    "from tbl_Teste " & _
    "where Data = #" & Format(dtData, "mm/dd/yyyy") & "#;", 8, 4)

    While Not rs.EOF
    strResultado = strResultado & ", " & rs("Campo pretendido").Value
    Call rs.MoveNext
    Wend

    Call rs.Close: Set rs = Nothing

    fncGeraLinhaUnica = Mid(strResultado, 3)

    End Function
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    função PROCVMÚLTIPLO Empty Re: função PROCVMÚLTIPLO

    Mensagem  Alexandre Neves 21/12/2018, 19:53

    Boa noite

    Se resolveu, marque o "Resolvido"


    .................................................................................
    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


    função PROCVMÚLTIPLO Empty Re: função PROCVMÚLTIPLO

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 23/11/2024, 15:50