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

3 participantes

    Otimização Código

    avatar
    wmantovani
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 211
    Registrado : 06/09/2011

    Otimização Código Empty Otimização Código

    Mensagem  wmantovani 11/7/2022, 13:56

    Bom dia pessoal,

    Com a ajuda do pessoal aqui consegui meu objetivo.....eis que cheguei ao código e esta rodando normalmente, porem com muita lentidão, na minha maquina que é a principal, então na rede ficará mais lento, gostaria de otimizar o código abaixo, se alguém puder ajudar agradeço.

    Dim log As String

    log = Now & " - " & [Forms]![logado]![usuário]
    Me.log.Value = log


    Dim strCampos As String, strValores As String
    Dim TIPO_HORAS As String, Mes_Ref As String
    Dim Dia As Date
    Dim semana As String

    Dim MesRef As String


    TIPO_HORAS = "AD. NOTURNO"
    Mes_Ref = Me.MesRef
    Dia = Me.Dia
    semana = Me.NomeDia


    If Me.Tipo_Lançamento <> "Pagamento" Then

    ElseIf EntradaManha < #5:00:00 AM# Then
    strCampos = "EntradaManha" & "," & "SaidaManha"
    If SaidaManha < #5:00:00 AM# Then
    strValores = Entrada & "','" & "00:00"
    Else
    strValores = EntradaManha & "','" & "05:00"
    End If
    End If


    If Me.Tipo_Lançamento <> "Pagamento" Then

    ElseIf SaidaTarde > #10:00:00 PM# Then
    If strCampos = "" Then
    strCampos = "EntradaTarde" & "," & "SaidaTarde"
    Else
    strCampos = strCampos & "," & "EntradaTarde" & "," & "SaidaTarde"
    strValores = strValores
    End If

    If EntradaTarde > #10:00:00 PM# Then
    strValores = strValores & "," & EntradaTarde & "," & SaidaTarde & ","
    Else
    strValores = strValores & "," & "','" & "22:00" & "','" & SaidaTarde
    End If
    End If


    If strCampos <> "" Then
    CurrentDb.Execute "INSERT INTO tblextra (" & strCampos & ", funcionario, MesRef, dia, nomedia, [Tipo de Lançamento], [Tipo de Hora], justificativa, log) VALUES ('" & strValores & "','" & Funcionario & "','" & Mes_Ref & "','" & Me.Dia & "','" & Me.NomeDia & "','" & Me.Tipo_Lançamento & "','" & TIPO_HORAS & "','" & Me.JUSTIFICATIVA & "','" & log & "')"

    Requery

    DoCmd.RunSQL "UPDATE tblExtra SET tblExtra.Almoco = IIf([Almoco] Is Null,#00:00#,[Almoco]);"
    DoCmd.RunSQL "UPDATE tblExtra SET tblExtra.EntradaManha = IIf([EntradaManha] Is Null,#00:00#,[EntradaManha]);"
    DoCmd.RunSQL "UPDATE tblExtra SET tblExtra.SaidaManha = IIf([SaidaManha] Is Null,#00:00#,[SaidaManha]);"
    DoCmd.RunSQL "UPDATE tblExtra SET tblExtra.EntradaTarde = IIf([EntradaTarde] Is Null,#00:00#,[EntradaTarde]);"
    DoCmd.RunSQL "UPDATE tblExtra SET tblExtra.SaidaTarde = IIf([SaidaTarde] Is Null,#00:00#,[SaidaTarde]);"


    DoCmd.RunSQL "UPDATE tblExtra SET tblExtra.Total_Horas = (([saidamanha]-[entradamanha])+([saidatarde]-[entradatarde])) WHERE (((tblExtra.Total_Horas) Is Null));"



    End If


    DoCmd.GoToRecord , "", acNewRec
    Me.Dia.SetFocus
    Me.Total_Horas.Locked = True
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3707
    Registrado : 22/11/2016

    Otimização Código Empty Re: Otimização Código

    Mensagem  DamascenoJr. 18/7/2022, 02:01

    Pelo código, toda vez que o update é executado todos os registros da tabela são atualizados (inclusive os que já estavam atualizados - assim executando uma ação desnecessária).

    Capture o código do registro adicionado com "insert into" e execute a atualização somente sobre ele.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    wmantovani
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 211
    Registrado : 06/09/2011

    Otimização Código Empty Re: Otimização Código

    Mensagem  wmantovani 18/7/2022, 12:06

    Caro DamascenoJR. primeiramente obrigado

    alterei as linhas
    DoCmd.RunSQL "UPDATE tblExtra SET tblExtra.Almoco = IIf([Almoco] Is Null,#00:00#,[Almoco]);"
    DoCmd.RunSQL "UPDATE tblExtra SET tblExtra.EntradaManha = IIf([EntradaManha] Is Null,#00:00#,[EntradaManha]);"
    DoCmd.RunSQL "UPDATE tblExtra SET tblExtra.SaidaManha = IIf([SaidaManha] Is Null,#00:00#,[SaidaManha]);"
    DoCmd.RunSQL "UPDATE tblExtra SET tblExtra.EntradaTarde = IIf([EntradaTarde] Is Null,#00:00#,[EntradaTarde]);"
    DoCmd.RunSQL "UPDATE tblExtra SET tblExtra.SaidaTarde = IIf([SaidaTarde] Is Null,#00:00#,[SaidaTarde]);"


    por:

    CurrentDb.Execute "UPDATE tblExtra SET tblExtra.Almoco = IIf([Almoco] Is Null,#00:00#,[Almoco]);"
    CurrentDb.Execute "UPDATE tblExtra SET tblExtra.EntradaManha = IIf([EntradaManha] Is Null,#00:00#,[EntradaManha]);"
    CurrentDb.Execute "UPDATE tblExtra SET tblExtra.SaidaManha = IIf([SaidaManha] Is Null,#00:00#,[SaidaManha]);"
    CurrentDb.Execute "UPDATE tblExtra SET tblExtra.EntradaTarde = IIf([EntradaTarde] Is Null,#00:00#,[EntradaTarde]);"
    CurrentDb.Execute "UPDATE tblExtra SET tblExtra.SaidaTarde = IIf([SaidaTarde] Is Null,#00:00#,[SaidaTarde]);"
    CurrentDb.Execute "UPDATE tblExtra SET tblExtra.Total_Horas = (([saidamanha]-[entradamanha])+([saidatarde]-[entradatarde])) WHERE (((tblExtra.Total_Horas) Is Null));"


    Deu uma boa melhorada, seria isso ?
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3707
    Registrado : 22/11/2016

    Otimização Código Empty Re: Otimização Código

    Mensagem  DamascenoJr. 20/7/2022, 03:46

    Não, não é isso. Se o desempenho melhorou, você pode usar assim. Very Happy Mas não foi isso que quis dizer.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2605
    Registrado : 13/12/2016

    Otimização Código Empty Re: Otimização Código

    Mensagem  Alexandre Fim 20/7/2022, 19:49

    Olá Wmantovani,

    O UPDATE pode ser executado numa vez só.

    Fiz alguns ajustes na rotina, que estava um pouco bagunçada...rsss

    Código:


    On Error GoTo trata_erro
    Dim log            As String
    Dim strCampos      As String
    Dim strValores      As String
    Dim TIPO_HORAS      As String
    Dim Mes_Ref        As String
    Dim Dia            As Date
    Dim semana          As String
    Dim MesRef          As String
    '-- Alexandre Fim - variavel para Instruções SQL
    Dim sSQL            As String

       
        log = Now & " - " & [Forms]![logado]![usuário]
        Me.log.Value = log
       
       
        TIPO_HORAS = "AD. NOTURNO"
        Mes_Ref = Me.MesRef
        Dia = Me.Dia
        semana = Me.NomeDia
       
       
        If Me.Tipo_Lançamento <> "Pagamento" Then
            If EntradaManha < #5:00:00 AM# Then
                strCampos = "EntradaManha" & "," & "SaidaManha"
            End If
            If SaidaManha < #5:00:00 AM# Then
                strValores = Entrada & "','" & "00:00"
            Else
                strValores = EntradaManha & "','" & "05:00"
            End If
        End If
       
       
        If Me.Tipo_Lançamento <> "Pagamento" Then
            If SaidaTarde > #10:00:00 PM# Then
                strCampos = "EntradaTarde" & "," & "SaidaTarde"
            Else
                strCampos = strCampos & "," & "EntradaTarde" & "," & "SaidaTarde"
                strValores = strValores
            End If
            If EntradaTarde > #10:00:00 PM# Then
                strValores = strValores & "," & EntradaTarde & "," & SaidaTarde & ","
            Else
                strValores = strValores & "," & "','" & "22:00" & "','" & SaidaTarde
            End If
        End If
       
       
        If strCampos <> "" Then
            sSQL = "INSERT INTO tblextra "
            sSQL = sSQL & " ("
            sSQL = sSQL & " " & strCampos & ""
            sSQL = sSQL & " ,funcionario"
            sSQL = sSQL & " ,MesRef"
            sSQL = sSQL & " ,dia"
            sSQL = sSQL & " ,nomedia"
            sSQL = sSQL & " ,[Tipo de Lançamento]"
            sSQL = sSQL & " ,[Tipo de Hora]"
            sSQL = sSQL & " ,justificativa"
            sSQL = sSQL & " ,log"
            sSQL = sSQL & " )"
            sSQL = sSQL & " VALUES "
            sSQL = sSQL & " ("
            sSQL = sSQL & "  '" & strValores & "'"
            sSQL = sSQL & " ,'" & Funcionario & "'"
            sSQL = sSQL & " ,'" & Mes_Ref & "'"
            sSQL = sSQL & " ,'" & Me.Dia & "'"
            sSQL = sSQL & " ,'" & Me.NomeDia & "'"
            sSQL = sSQL & " ,'" & Me.Tipo_Lançamento & "'"
            sSQL = sSQL & " ,'" & TIPO_HORAS & "'"
            sSQL = sSQL & " ,'" & Me.JUSTIFICATIVA & "'"
            sSQL = sSQL & " ,'" & log & "'"
            sSQL = sSQL & " )"
            CurrentDb.Execute sSQL
           
            sSQL = "UPDATE tblExtra SET "
            sSQL = sSQL & "  Almoco = IIf([Almoco] Is Null,#00:00#,[Almoco])"
            sSQL = sSQL & " ,EntradaManha = IIf([EntradaManha] Is Null,#00:00#,[EntradaManha])"
            sSQL = sSQL & " ,SaidaManha = IIf([SaidaManha] Is Null,#00:00#,[SaidaManha])"
            sSQL = sSQL & " ,EntradaTarde = IIf([EntradaTarde] Is Null,#00:00#,[EntradaTarde])"
            sSQL = sSQL & " ,SaidaTarde = IIf([SaidaTarde] Is Null,#00:00#,[SaidaTarde])"
            sSQL = sSQL & " ,Total_Horas = (([saidamanha]-[entradamanha])+([saidatarde]-[entradatarde])) "
            sSQL = sSQL & " WHERE (((tblExtra.Total_Horas) Is Null));"
            CurrentDb.Execute sSQL
        End If
       
     
        DoCmd.GoToRecord , "", acNewRec
        Me.Dia.SetFocus
        Me.Total_Horas.Locked = True
       
        Exit Sub

    trata_erro:
        MsgBox "Erro gerado: " & Err.Number & " - " & Err.Description & "", vbCritical, "Erro"
        Exit Sub




    É isso

    Att,
    FIM


    .................................................................................
    Arrow  Marcar tópico como Resolvido: clique aqui
    Arrow  Postar anexos no fórum: clique aqui

    Otimização Código Setinf11
    Sistemas e Tecnologia Ltda
    avatar
    wmantovani
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 211
    Registrado : 06/09/2011

    Otimização Código Empty Re: Otimização Código

    Mensagem  wmantovani 27/7/2022, 12:40

    Bom dia caro Alexandre,

    Primeiramente obrigado, inseri seu código na base de teste minha aqui, porem ao quando o tipo de Lançamento é igual a PAGAMENTO, ele nao faz o calculo e adição de horas noturnas...testei varias vezes

      Data/hora atual: 1/10/2022, 16:33