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] Update e Insert do excel para o Access não funciona

    Compartilhe
    avatar
    Carvalho
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 19/01/2013

    [Resolvido] Update e Insert do excel para o Access não funciona

    Mensagem  Carvalho em 16/4/2018, 14:37

    Bom dia,

    Pessoal, estou a mais de 2 semanas tentando que o código que está em axeno funcione novamente, ele verifica se o excel tem itens que não tem na tabela inseri esses registros e depois atualiza tudo de acordo com o item da tabela e com a coluna do excel DB, quero entender porque não está funcionando mais, informa que o "o item da coleção não foi encontrado.

    Obs: Para melhor entendimento segue o Bd e o Excel que estou usando. pode abrir o Frm e apertar no botão "antes informar o Local do Excel".


    No aguardo.
    Anexos
    InsertUpdate.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (927 Kb) Baixado 7 vez(es)
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: [Resolvido] Update e Insert do excel para o Access não funciona

    Mensagem  FabioPaes em 16/4/2018, 15:29

    Item não encontrado na Coleção: Significa que ele não encontrou o Campo no Recordset!

    Erro esta na LInha: If CDbl(rs1("1").Value) < rs2("item").Value Then. O Erro acusado, é que não tem nenhum campo com o nome de "1" na tabela do Excel.

    Lembre-se: Se irá informar o Nome do campo, ele deve ficar rs2("NomeCampo") ou Assim: rs2!NomeCampo.
    Se pretende ignorar o nome do campo, mas informar a Coluna, 1,2,3,.., deve informar assim: rs1(1) para a SEGUNDA coluna do recordset. Basicamente esse é o seu problema! Acredito que o que pretende nesse caso é informar a coluna, certo?



    If CDbl(rs1(1).Value) < rs2("item").Value Then


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!
    avatar
    Carvalho
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 19/01/2013

    Re: [Resolvido] Update e Insert do excel para o Access não funciona

    Mensagem  Carvalho em 16/4/2018, 15:52

    Realmente fabio fiz a troca e rodou ,porem agora está dando erro na linha strCampo = fncEquivale(fld.Name) Tipos incompativeis "13" mais não estou conseguindo identificar o Campo que esta diferente.



    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: [Resolvido] Update e Insert do excel para o Access não funciona

    Mensagem  FabioPaes em 16/4/2018, 18:54

    Tipos Incompatíveis ocorrem geralmente quando esta passando um valor Numero mas na verdade o campo é Texto. entende...

    Texto deve ser passado assim '" & Variavel & "' e Numero assim: " & Variavel & "

    Veja se não seria isso! 

    Eu não cheguei a lê seu código para descobrir o que ele faz, mas acredito que conseguira com essa dica!


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!
    avatar
    Carvalho
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 19/01/2013

    Re: [Resolvido] Update e Insert do excel para o Access não funciona

    Mensagem  Carvalho em 16/4/2018, 19:54

    Cara estou rodando a horas e não estou conseguindo ver onde está o erro, mesmo sabendo que é um campo que não está no formato correto.
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: [Resolvido] Update e Insert do excel para o Access não funciona

    Mensagem  FabioPaes em 16/4/2018, 21:05

    Amigo, o seu problema esta na funcão!

    strCampo = fncEquivale(fld.Name)



    Veja que nela, vc definiu o valor a ser informado como sendo Byte, e quando chamou ela strCampo = fncEquivale(fld.Name) está informando por exemplo Texto "BD" o primeiro campo!


    Ajuste-a que dará certo!


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!
    avatar
    Carvalho
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 19/01/2013

    Re: [Resolvido] Update e Insert do excel para o Access não funciona

    Mensagem  Carvalho em 16/4/2018, 23:18

    Fiz o que você me orientou e agora ele não atualiza e nem inseri... Sad
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: [Resolvido] Update e Insert do excel para o Access não funciona

    Mensagem  FabioPaes em 17/4/2018, 15:17

    Poste seu código comentado amigo, comentando o que pretende com ele... assim podemos entender o que precisa com ele e talvez adequarmos... Pois os erros no código foram sanados.


    Vamos ao problema que nao consegui entender no Seu codigo:

    Na linha:


                               strCampo = fncEquivale(fld.Name)
                                If strCampo <> "" Then rs2(strCampo) = fld.Value

    Nela vc esta adicionando um Registro naa tabela do access (RS2);

    rs2(strCampo) = fld.Value Aqui está dizendo que o campo que recebe o valor está na variavel strCampo Porem essa variável Não está recebendo o nome do campo...


    Última edição por FabioPaes em 17/4/2018, 15:50, editado 2 vez(es)


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!
    avatar
    Carvalho
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 19/01/2013

    Re: [Resolvido] Update e Insert do excel para o Access não funciona

    Mensagem  Carvalho em 17/4/2018, 15:46

    Eu tenho uma planilha em excel que é essa que está ai e o meu BD, tenho que atualizar toda semana os itens que foram acresentados sem repetir e depois atualizar todas as informações de acordo com o excel. que seria um Inset e um update.
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: [Resolvido] Update e Insert do excel para o Access não funciona

    Mensagem  FabioPaes em 17/4/2018, 15:50

    Editei a Mensagem anterior... Leia


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: [Resolvido] Update e Insert do excel para o Access não funciona

    Mensagem  FabioPaes em 17/4/2018, 16:17

    Acho que consegui desvendar sua Função e o que pretende amigo...


    Todo o Erro estava nessa LInha aqui: strCampo = fncEquivale(fld.Name)

    Veja, quando vc pede o .Name, vc obterá como resultado o NOME do campo "BD", SUB BLOCO... no caso da Tabela Excel.

    Na sua fncEquivale(), la esta configurado para receber a COLUNA do campo e converter a Coluna pelo NOME do campo da TABELA do ACCESS, Por isso o Erro anterios de conversão de Tipos, Ex:

    Se a fncEquivale() receber o valor 1, ela deverá devolver o nome do campo "SubBloco", que é o campo responsável por receber esse valor do Excel, Se olhar na Tabela do Excel, a coluna 1 é o Sub Bloco.

    Dessa forma, NÃO poderá pedir o NOME do campo, .Nmae, e sim a Coluna dele, que no caso ficaria assim:

    strCampo = fncEquivale(fld.OrdinalPosition)

    Siga as Instruções a Baixo para Obter o resultado que precisa:

    1º Mude sua Funcção  fncEquivale() Para essa:

    Veja que coloquei Alguns caso, devera completar os demais... Sempre vendo qual é a coluna do Excel. Ex: Caso 6 (Coluna 6 do Excel) refere-se a Quantidade, e qual é o nome do campo da tabela Access que receberá a quantidade??? "qnt"
    Código:
    Private Function fncEquivale(bytColuna As Byte) As String

        'função onde especifico o valor das colunas (primeira linha na planilha) que equivale com as colunas na tabela

        Select Case bytColuna
            Case 0: fncEquivale = "Item"
            Case 1: fncEquivale = "SubBloco"
            Case 6: fncEquivale = "qtd"
            Case Else: fncEquivale = ""
        End Select

    End Function

    2º Na função ImportaExcel, onde encontrar strCampo = fncEquivale(fld.Name) Substitua por: ( strCampo = fncEquivale(fld.OrdinalPosition) )

    Assim, obterá o Resultado que precisa.

    Deu Trabalho desvendar, mas acho que foi...


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!
    avatar
    Carvalho
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 19/01/2013

    Re: [Resolvido] Update e Insert do excel para o Access não funciona

    Mensagem  Carvalho em 17/4/2018, 17:34

    Caramba está quase lá Very Happy , fiz as alterações que você me solicitou e agora deu erro na linha
    If strCampo <> "" Then Rs2(strCampo).Value = fld.Value

    3021 - nenhum registro atual.

    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: [Resolvido] Update e Insert do excel para o Access não funciona

    Mensagem  FabioPaes em 17/4/2018, 19:08

    Nessa Linha??? Não é ao mover-se entre os registros do recordset???
    Geralmente ocorre qnd vc manda mover para um registro que não existe!


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!
    avatar
    Carvalho
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 19/01/2013

    Re: [Resolvido] Update e Insert do excel para o Access não funciona

    Mensagem  Carvalho em 17/4/2018, 19:48

    mais é o que está aparecendo! e fica pintada nessa linha abaixo
    If strCampo <> "" Then Rs2(strCampo).Value = fld.Value
    avatar
    Carvalho
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 19/01/2013

    Re: [Resolvido] Update e Insert do excel para o Access não funciona

    Mensagem  Carvalho em 18/4/2018, 00:22

    Boa noite Fabio, eu inseri a função em verde para ver se  resolvia, agora está o erro permanece na linha em vermelho, tá bronca...

    If Nz(Rs2(strCampo).Value) = 0 Then Exit For
                   If strCampo <> "" Then Rs2(strCampo).Value = fld.Value
               Next fld
           Rs2.Update
          Rs1.MoveNext
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: [Resolvido] Update e Insert do excel para o Access não funciona

    Mensagem  FabioPaes em 18/4/2018, 15:19

    Amigo, pelo que entendi, o codigo chega nessa linha:

            rs2.AddNew
                For Each fld In rs1.Fields
                
                    strCampo = fncEquivale(fld.OrdinalPosition)
                    If strCampo <> "" Then rs2(strCampo).Value = fld.Value
                Next fld
            rs2.Update
    já sem registros para percorrer! Ou seja, ja passou a ultima Linha, e qnd vc tenta buscar os valores fld.Value o rs1.EOF já é falso!

    Acredito que terá que add um tratamento ali... de Só Executar esse codigo se IF Not rs1.EOF then


    Experimente, e veja se realmente o Código faz o que pretende, add e atualiza os registros!


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!
    avatar
    Carvalho
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 19/01/2013

    Re: [Resolvido] Update e Insert do excel para o Access não funciona

    Mensagem  Carvalho em 19/4/2018, 00:00

    Show Fabio realmente a sua dica funcionou, coloquei o critério em marcado de azul e rodou liso, muito obrigado pela atenção. tópico resolvido. cheers

    rs2.AddNew
               For Each fld In rs1.Fields
               
                   strCampo = fncEquivale(fld.OrdinalPosition)
                      If Rs1.EOF Or Rs2.EOF Then Exit Do
                   If strCampo <> "" Then rs2(strCampo).Value = fld.Value
               Next fld
           rs2.Update
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: [Resolvido] Update e Insert do excel para o Access não funciona

    Mensagem  FabioPaes em 19/4/2018, 13:24

    Não esquece de Fazer um teste com todas as possibilidades... Pois tem muitos critérios, simule todas as possibilidades para que não seja perdido informações!
    Até a próxima se Deus quiser!


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!

      Data/hora atual: 21/7/2018, 05:05