MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    [Resolvido]Função Split

    Edgar Massa
    Edgar Massa
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 74
    Registrado : 08/01/2017

    [Resolvido]Função Split Empty [Resolvido]Função Split

    Mensagem  Edgar Massa em 23/9/2019, 19:39

    senhores
    me ajudem please.

    como uso a função split para pegar nomes completos dentro de um campo, onde os nomes estão separados por vírgula?


    Última edição por Edgar Massa em 23/9/2019, 20:03, editado 1 vez(es)
    Marcelo David
    Marcelo David
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3206
    Registrado : 21/04/2011

    [Resolvido]Função Split Empty Re: [Resolvido]Função Split

    Mensagem  Marcelo David em 23/9/2019, 19:48

    Regras do Fórum:

    1. Tenha paciência com quem coloca aqui as suas duvidas.
    2. Clareza nos títulos dos tópicos e duvidas, evite a linguagem MSN.
    3. Não colocar diversas vezes a mesma dúvida.
    4. Explicar detalhadamente o problema e informar a versão do seu Office + Sistema Operativo.
    5. Retorne sempre se deu certo, esse retorno é muito importante.
    6. Respeite toda a equipe Staff e demais membros deste fórum.
    7. Use sempre o botão Busca, sempre que tiver uma dúvida e antes de abrir tópicos.
    8. Não usar palavras como "Urgente". O fórum é livre e ninguém é obrigado a responder com urgência.
    9. A publicidade é proíbida e só pode ser feita pelo Administrador ou depois de aprovada pelo Administrador.
    10. Se o seu tópico não for respondido, tem o direito de fazer um Up ao final de 24horas!
    11. A colocação de Códigos ou Exemplos, devem constar sempre os créditos de quem o elaborou.
    12. Fale, não GRITE! Só letras Maiúsculas, na Internet é o mesmo que gritar!
    13. É proibido tirar duvidas nas Salas de Repositório, devem abrir um novo tópico nas salas de duvidas, relacionando o Exemplo em causa.
    14. É proibido adicionar links externos nos tópicos, que redirecionem para outros sites ("backlinks"), excepto DropBox ou do próprio fórum.
    15. É permitido adicionar links externos, nos códigos VBA dentro das Base de Dados.


    Atente para as regras do fórum. Adeque o título e sua mensagem.


    .................................................................................
    Marcelo David | [Resolvido]Função Split LinkedIn_Icon.jpg.original LinkedIn
    https://www.freetool.dev
    avatar
    thiagonsilvaa
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 362
    Registrado : 12/01/2017

    [Resolvido]Função Split Empty Re: [Resolvido]Função Split

    Mensagem  thiagonsilvaa em 23/9/2019, 19:48

    Boa tarde !

    Primeiramente, veja as regras do fórum:

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

    Sugiro que altere seu título e sua mensagem, conforme mostra regra de nº 12.

    Tratando do seu problema, veja este tópico:

    https://www.maximoaccess.com/t29961-split-campo-de-uma-tabela-por-virgula
    Edgar Massa
    Edgar Massa
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 74
    Registrado : 08/01/2017

    [Resolvido]Função Split Empty Re: [Resolvido]Função Split

    Mensagem  Edgar Massa em 23/9/2019, 20:16

    thiagonsilvaa
    Estou tentando fazer um teste, só não consegui entender, como vou pegar os nomes completos dentro do campo...
    Utilizei o código abaixo, tenho quase certeza que deu erro na função split

    Código:
    Public Sub Splitar()


    Dim i As Integer
      Dim sql As String
      Dim rst As DAO.Recordset
     
      'abre a tabela de origem
      sql = "SELECT TESTES.AUDITORIA, TESTES.NOME FROM TESTES;"
      Set rst = CurrentDb.OpenRecordset(sql)
     
       Dim F As Variant
       Dim P As String

       P = "TESTES.NOME"
       F = Split(P, ",")

       
      With rst
      Do While Not .EOF
          With .Fields
     
              'percorre os registros da tabela de origem e faz um insert na tabela de destino
                             
                                                     
                  For i = 1 To .Count - 1 Step 1
                                                   
                          sql = "INSERT INTO TESTES (AUDITORIA, NOME) VALUES ('" & .Item(1).Value & "','" & .Item(i).Value & "');"
                          CurrentDb.Execute (sql)
                                   
                  Next i

          End With
      .MoveNext
      Loop
      End With

    Set rst = Nothing

    End Sub
    Celso Roberto
    Celso Roberto
    VIP
    VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1071
    Registrado : 01/03/2014

    [Resolvido]Função Split Empty Re: [Resolvido]Função Split

    Mensagem  Celso Roberto em 23/9/2019, 23:39

    Olá...

    Para tal objetivo voce tem que ter duas tabelas, (A tabela de Origem e a Tabela Destino)

    Adapte este código abaixo

    Código:
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim rs As DAO.Recordset
    Dim varMatriz As Variant
    Dim i As Long
    Dim strSQL As String

    'Abre a tabela de origem e de destino
    Set db = CurrentDb
    Set rst = db.OpenRecordset("SELECT * FROM tblOrigem") 'Nome da tabela Origem
    Set rs = db.OpenRecordset("SELECT * FROM tblDestino") 'Nome da tabela destino

    'Percorre todas as linhas da tabela de origem
    Do Until rst.EOF

    'Gera uma matriz dos nomes separados por vírgula
    varMatriz = Split(rst!Nome, ",")

    'Percorre os itens da matriz
    For i = 0 To UBound(varMatriz)

    'Adiciona na tabela de destino
    rs.AddNew
    rs!Nome = varMatriz(i) 'Aqui insere apenas o nome extraído
    rs!Auditoria = rst!Auditoria
    rs.Update
    Next i

    'Vai para a próxima linha da tabela de origem
    rst.MoveNext
    Loop

    Acredito que estes Links sejam a mesma duvida, caso seja Observe o item 3 das regras do Fórum

    3. Não colocar diversas vezes a mesma dúvida.

    https://www.maximoaccess.com/t36693-separar-dados-do-campo-e-inserir-uma-nova-linha

    https://www.maximoaccess.com/t36704-separar-texto-de-um-campo-da-tabela


    Aguardamos Retorno
    Abraços


    .................................................................................


    Você fica satisfeito ao ter sua dúvida solucionada?.
    Quem te ajuda também fica quando você da o tópico por "Resolvido".
    Veja como neste Link: https://www.maximoaccess.com/t860-resolucao-de-topicos



    A Única coisa que sei é que ainda nada sei, Mas em breve Saberei.....
    Edgar Massa
    Edgar Massa
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 74
    Registrado : 08/01/2017

    [Resolvido]Função Split Empty Re: [Resolvido]Função Split

    Mensagem  Edgar Massa em 24/9/2019, 15:06

    Celso Roberto

    Deu certo a inserção, o código ficou assim:

    Dim db As DAO.Database
    Dim rsDestinoOrigem As DAO.Recordset
    Dim rsDestino As DAO.Recordset

    Dim varMatriz As Variant
    Dim i As Long
    Dim strsDestinoQL As String

    'Abre a tabela de origem e de destino
    Set db = CurrentDb
    Set rsDestinoOrigem = db.OpenRecordset("SELECT * FROM AI_Recomendacoes_Pendentes_EmProcesso") 'Nome da tabela Origem
    Set rsDestino = db.OpenRecordset("SELECT * FROM AI_Recomendacoes_Por_Responsavel_E_ID") 'Nome da tabela destino

    'Percorre todas as linhas da tabela de origem
    Do Until rsDestinoOrigem.EOF

    'Gera uma matriz dos nomes separados por v?rgula
    varMatriz = Split(rsDestinoOrigem![Figuras: respons?vel de execu??o da recomenda??o], ",")

    'Percorre os itens da matriz
    For i = 0 To UBound(varMatriz)

    'Adiciona na tabela de destino
    rsDestino.AddNew
    rsDestino![Identificador de recomenda??o] = rsDestinoOrigem![Identificador de recomenda??o]
    rsDestino![Figuras: destinat?rio do Plano de A??o] = rsDestinoOrigem![Figuras: destinat?rio do Plano de A??o]
    rsDestino![Figuras: respons?vel de execu??o da recomenda??o] = varMatriz(i) 'Aqui insere apenas o nome extra?do

    rsDestino.Update
    Next i

    'Vai para a pr?xima linha da tabela de origem
    rsDestinoOrigem.MoveNext
    Loop


    Porém ficou só uma dúvida, exemplo, tenho ID x com 3 responsáveis, quando ele inseri, ele inseri corretamente os 3 nomes com o ID certinho, porém ele por algum motivo duplica, o ID x agora vira 6 nomes e isso sucessivamente. O que seria?
    Edgar Massa
    Edgar Massa
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 74
    Registrado : 08/01/2017

    [Resolvido]Função Split Empty Re: [Resolvido]Função Split

    Mensagem  Edgar Massa em 24/9/2019, 15:29

    RESOLVIDO

    código ficou assim, me enganei, achei que tinha duplicado mas está correto.

    Dim db As DAO.Database
    Dim rsDestinoOrigem As DAO.Recordset
    Dim rsDestino As DAO.Recordset

    Dim varMatriz As Variant
    Dim i As Long
    Dim strsDestinoQL As String

    'Abre a tabela de origem e de destino
    Set db = CurrentDb
    Set rsDestinoOrigem = db.OpenRecordset("SELECT * FROM AI_Recomendacoes_Pendentes_EmProcesso") 'Nome da tabela Origem
    Set rsDestino = db.OpenRecordset("SELECT * FROM AI_Recomendacoes_Por_Responsavel_E_ID") 'Nome da tabela destino

    'Percorre todas as linhas da tabela de origem
    Do Until rsDestinoOrigem.EOF

    'Gera uma matriz dos nomes separados por vírgula
    varMatriz = Split(rsDestinoOrigem![Figuras: responsável de execução da recomendação], ",")

    'Percorre os itens da matriz
    For i = 0 To UBound(varMatriz)

    'Adiciona na tabela de destino
    rsDestino.AddNew
    rsDestino![Identificador de recomendação] = rsDestinoOrigem![Identificador de recomendação]
    rsDestino![Figuras: destinatário do Plano de Ação] = rsDestinoOrigem![Figuras: destinatário do Plano de Ação]
    rsDestino![Figuras: responsável de execução da recomendação] = varMatriz(i) 'Aqui insere apenas o nome extraído

    rsDestino.Update
    Next i

    'Vai para a próxima linha da tabela de origem
    rsDestinoOrigem.MoveNext
    Loop


    Muito Obrigado !!! bounce bounce bounce
    Celso Roberto
    Celso Roberto
    VIP
    VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1071
    Registrado : 01/03/2014

    [Resolvido]Função Split Empty Re: [Resolvido]Função Split

    Mensagem  Celso Roberto em 26/9/2019, 04:26

    Olá..

    Ficamos felizes por ter ajudado

    O Fórum agradece o seu retorno

    Abraços e sucesso


    .................................................................................


    Você fica satisfeito ao ter sua dúvida solucionada?.
    Quem te ajuda também fica quando você da o tópico por "Resolvido".
    Veja como neste Link: https://www.maximoaccess.com/t860-resolucao-de-topicos



    A Única coisa que sei é que ainda nada sei, Mas em breve Saberei.....

      Data/hora atual: 25/11/2020, 13:19