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]Função Split

    avatar
    Edgar Massa
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    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 : 2961
    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
    www.mrdsystem.com.br (em construção)
    avatar
    thiagonsilvaa
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 335
    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
    avatar
    Edgar Massa
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    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
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 960
    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


    .................................................................................
    Quando sua dúvida estiver resolvida, Agradeça ao Fórum e de seu tópico por Resolvido



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

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    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?
    avatar
    Edgar Massa
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    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
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 960
    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


    .................................................................................
    Quando sua dúvida estiver resolvida, Agradeça ao Fórum e de seu tópico por Resolvido



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

    Conteúdo patrocinado

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

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 17/2/2020, 16:44