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

    Preenche Patrim

    Compartilhe

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 190
    Registrado : 19/10/2016

    Preenche Patrim

    Mensagem  Carlao2 em 17/1/2018, 15:26

    Boa tarde à todos.

    Uma dúvida.
    Tenho um código desenvolvido pelo colega Alexandre, e queria saber se é normal uma demora muito grande para se executar esse módulo.

    Coloquei para executar a duas horas e meia atras e tive que interromper, pois até agora ele não tinha finalizado.

    Ha algo que se possa fazer para que o módulo rode mais rápido?

    Obrigado à todos
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: Preenche Patrim

    Mensagem  FabioPaes em 17/1/2018, 17:08

    Por favor, poste o Modulo e o Link do Tópico anterior, para que alguém possa ter noção do que se trata esse Módulo.


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

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 190
    Registrado : 19/10/2016

    Re: Preenche Patrim

    Mensagem  Carlao2 em 17/1/2018, 17:22

    Boa tarde Fabio.

    o Link é: [Você precisa estar registrado e conectado para ver este link.]

    e o modulo é o seguinte

    Sub PreenchePtr()

    'código criado por Alexandre Neves, do Fórum MaximoAccess '

    Dim Rst As DAO.Recordset, Rst1 As DAO.Recordset, strPtr As String, ContaPtr As Integer

    Set Rst = CurrentDb.OpenRecordset("SELECT * FROM Princ LEFT JOIN Fis ON Princ.Ptr=Fis.Ptr ORDER BY Princ.Ptr")
    Do While Not Rst.EOF
    If Rst.AbsolutePosition = 0 Then
    strPtr = Rst("Princ.Ptr")
    ContaPtr = 1
    Else
    If Rst("Princ.Ptr") = strPtr Then
    ContaPtr = ContaPtr + 1
    Else
    If ContaPtr = 1 Then
    Set Rst1 = CurrentDb.OpenRecordset("SELECT * FROM Princ WHERE Ptr='" & strPtr & "'")
    Rst1.Edit
    If Rst1("PtrAlt") = Rst1("Ptr") Then Rst1("Idp") = "M1" Else Rst1("Idp") = "B2"
    Rst1.Update
    Set Rst1 = CurrentDb.OpenRecordset("SELECT * FROM Fis WHERE Ptr='" & strPtr & "'")
    If Not Rst1.EOF Then
    Rst1.Edit
    Rst1("Idp") = "M1"
    Rst1.Update
    End If
    Else
    Set Rst1 = CurrentDb.OpenRecordset("SELECT * FROM Princ WHERE Ptr='" & strPtr & "'")
    Do While Not Rst1.EOF
    Rst1.Edit
    If Rst1("PtrAlt") = Rst1("Ptr") Then Rst1("Idp") = "B3" Else Rst1("Idp") = "I4"
    Rst1.Update
    Rst1.MoveNext
    Loop
    Set Rst1 = CurrentDb.OpenRecordset("SELECT * FROM Fis WHERE Ptr='" & strPtr & "'")
    Do While Not Rst1.EOF
    Rst1.Edit
    Rst1("Idp") = "I3"
    Rst1.Update
    Rst1.MoveNext
    Loop
    End If
    strPtr = Rst("Princ.Ptr")
    ContaPtr = 1
    End If
    End If
    Rst.MoveNext
    Loop
    Set Rst = Nothing
    Set Rst1 = Nothing

    CurrentDb.Execute "UPDATE Princ SET Idp='M0' WHERE Cnc like 'Dev*'"
    CurrentDb.Execute "UPDATE Princ SET Idp='B1' WHERE Cnc like 'Sobr*'"
    CurrentDb.Execute "UPDATE Fis SET Idp='I1' WHERE IsNull(Ptr) and Cnc='Sobra'"
    CurrentDb.Execute "UPDATE Princ SET Idp='B2' WHERE PtrAlt<>Ptr and (Cnc like 'Dev*' or Cnc like 'Sobra*')"

    CurrentDb.Execute "UPDATE Princ LEFT JOIN Fis ON Princ.PtrAlt=Fis.Ptr SET Princ.Idp='B2' WHERE Princ.Ptr<>Princ.PtrAlt and Fis.Idp='M1'"
    CurrentDb.Execute "UPDATE Princ LEFT JOIN Fis ON Princ.PtrAlt=Fis.Ptr SET Princ.Idp='I4' WHERE Princ.Ptr<>Princ.PtrAlt and Fis.Idp='I3'"


    End Sub

    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: Preenche Patrim

    Mensagem  FabioPaes em 17/1/2018, 17:30

    Ok! Nos diga em quantos registros está realizando essa Movimentação e quais as condições da sua rede, tipo as tabelas ficam em um local da rede e está executando atraves do Beck-End em outra Maquina...


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

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 190
    Registrado : 19/10/2016

    Re: Preenche Patrim

    Mensagem  Carlao2 em 17/1/2018, 17:53

    Fabio

    Estou executando em máquina local e a tabela tem cerca de 700.000 registros.
    Seria esse o problema?
    Mas ainda assim, ele ficou cerca de duas horas executando e não concluiu
    O que devo fazer
    Colocar o arquivo no servidor da empresa?

    Grato
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: Preenche Patrim

    Mensagem  FabioPaes em 17/1/2018, 18:58

    Amigo, são muitos registros para serem processados, e são várias alterações com muitas condições... Isso vai deixando o processo moroso mesmo...
    Se a máquina tiver um processador e Memoria melhor, com certeza ela irá realizar a rotina com maior velocidade... Faça um teste rodando direto no servidor...

    Outra coisa que pode estar mudando, é na abertura desses Recordset, buscando apenas os campos necessários...
    Mude de: CurrentDb.OpenRecordset("SELECT * FROM Fis WHERE Ptr='" & strPtr & "'")
    para: CurrentDb.OpenRecordset("SELECT Campo1,Campo2,Campo3 FROM Fis WHERE Ptr='" & strPtr & "'")

    Pode ser que reduza um pouco a carga na memória... Pois imagina que que essa tabela tenha 50 campo... e que será utilizado apenas 3 deles... Pode ser que ajude um pouco.

    Outra coisa é Limpar o RecordSet apos sua utilização Set Rst = Nothing sempre apos a utilização de seus dados...

    Essa rotina tem que ser feita Muitas Vezes em todos esses registros?


    Última edição por FabioPaes em 17/1/2018, 19:25, editado 1 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!

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 190
    Registrado : 19/10/2016

    Re: Preenche Patrim

    Mensagem  Carlao2 em 17/1/2018, 19:12

    Fábio

    Ok. Vou tentar executar com a base no servidor para ver se ele processa mais rápido.
    Sim, ela verifica a condição de cada item para preencher a coluna Idp de maneira correta e de acordo com a condição em que se encontra o item.
    Tudo bem que é raro termos uma base tão grande assim, na maioria das vezes a base tem no máximo 40.000 registros e com esse tamanho já fiz o teste e ele processa em uma rapidez bastante satisfatória.

    Valeu, muito obrigado pela ajuda e pelas dicas.

    Após processar no servidor, informo aqui se a resposta no processo foi mais rápida.

    Tks
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: Preenche Patrim

    Mensagem  FabioPaes em 17/1/2018, 19:25

    Editei a Mensagem Anterior... Reveja favor.


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

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 190
    Registrado : 19/10/2016

    Re: Preenche Patrim

    Mensagem  Carlao2 em 17/1/2018, 19:34

    Fabio

    Farei a alteração sugerida por você e darei um Feedback sobre o resultado obtido.


    Obrigado.


    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 190
    Registrado : 19/10/2016

    Re: Preenche Patrim

    Mensagem  Carlao2 em 18/1/2018, 13:16

    Fabio

    Bom dia

    Fiz a alteração sugerida por você mais dá o seguinte erro:

    "Erro em tempo de execução 3079
    O Campo especificado 'Ptr' pode se referir a mais de uma tabela na cláusula FROM da instrução SQL


    No aguardo de seus comentários
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: Preenche Patrim

    Mensagem  FabioPaes em 18/1/2018, 14:20

    Olá, quanto ao erro é pq o campo Ptr está em mais de uma tabela origem da consulta, para isso, especifique a tabela tambem, assim:

    Nomedatabela.Ptr Provavelmente é na consulta que tem o Join


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

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 190
    Registrado : 19/10/2016

    Re: Preenche Patrim

    Mensagem  Carlao2 em 18/1/2018, 15:20

    Fabio.

    Seguirei sua orientação e informarei se deu certo

    Obrigado

      Data/hora atual: 24/9/2018, 05:17