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


2 participantes

    [Resolvido]For Each com condição

    avatar
    tchelo1
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11
    Registrado : 08/05/2023

    [Resolvido]For Each com condição Empty [Resolvido]For Each com condição

    Mensagem  tchelo1 12/5/2023, 19:10

    Olá, ótima tarde a todos. Tenho vários campos no form e vários deles estão como locked=true. Preciso colocar uma condição dentro do for each onde só execute o for each caso o Control esteja com a condição locked=False. Segue abaixo o for each...

          For Each ctl In Me.Controls
         ' Percorre todos os tipos de controles
    Select Case ctl.ControlType
    Case acTextBox, acComboBox, acListBox, acOptionGroup, acCheckBox

           If ctl.Value <> ctl.OldValue Or (IsNull(ctl.Value) Or ctl.Value = "") Then
         'se algum valor foi alterado ou deletado, coloca a variável de chekar alterações como True
       strChekaDiferente = True
         'e registra na tabela do Log
              DoCmd.SetWarnings False
    strSQL = "INSERT INTO tblLog (Utilizador, LogData, NomeForm, NomeCampo, ValorAntigo, ValorAtual, Status) Values('" & strUser & "', Now(),'" & Me.Form.Name & "','" & ctl.Name & "','" & ctl.OldValue & "','" & ctl.Value & "','" & "Registro Alterado" & "')"
    DoCmd.RunSQL strSQL
               DoCmd.SetWarnings True
          'termina e volta a colocar a variável de chekar alterações como False
              strChekaDiferente = False
           Else
                  Cancel = True
          End If

      End Select
     Next ctl
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]For Each com condição Empty Re: [Resolvido]For Each com condição

    Mensagem  Alexandre Fim 12/5/2023, 19:38

    Olá Tchelo,

    Seja bem-vindo o fórum.

    Segue ajuste no procedimento:

    Código:


        For Each ctl In Me.Controls
            ' Percorre todos os tipos de controles
            Select Case ctl.ControlType
                Case acTextBox, acComboBox, acListBox, acOptionGroup, acCheckBox
                '-- Verifica se o controle está bloqueado - by Alexandre Fim
                If ctl.Locked = True Then
                '-----------------------------------------------------------
                    If ctl.Value <> ctl.OldValue Or (IsNull(ctl.Value) Or ctl.Value = "") Then
                        'se algum valor foi alterado ou deletado, coloca a variável de chekar alterações como True
                        strChekaDiferente = True
                        'e registra na tabela do Log
                        Call GravaLog
                        'termina e volta a colocar a variável de chekar alterações como False
                        strChekaDiferente = False
                    Else
                        Cancel = True
                    End If
                End If
            End Select
        Next ctl



    Segue também o procedimento para gravação de log (apenas criei uma sub só para separar os processos e ficar mais legível...rss)
    Código:

    Public Sub GravaLog()
    On Error GoTo trata_erro

        DoCmd.SetWarnings False
        strSQL = "INSERT INTO tblLog "
        strSQL = strSQL & " ("
        strSQL = strSQL & "  Utilizador"
        strSQL = strSQL & " ,LogData"
        strSQL = strSQL & " ,NomeForm"
        strSQL = strSQL & " ,NomeCampo"
        strSQL = strSQL & " ,ValorAntigo"
        strSQL = strSQL & " ,ValorAtual"
        strSQL = strSQL & " ,Status"
        strSQL = strSQL & " ) "
        strSQL = strSQL & " VALUES"
        strSQL = strSQL & " ("
        strSQL = strSQL & "  '" & strUser & "'"
        strSQL = strSQL & " ,'" & Now() & "'"
        strSQL = strSQL & " ,'" & Me.Form.Name & "'"
        strSQL = strSQL & " ,'" & ctl.Name & "'"
        strSQL = strSQL & " ,'" & ctl.OldValue & "'"
        strSQL = strSQL & " ,'" & ctl.Value & "'"
        strSQL = strSQL & " ,'Registro Alterado'"
        strSQL = strSQL & " )"
        DoCmd.RunSQL strSQL
        DoCmd.SetWarnings True
       
        Exit Sub
       
    trata_erro:
        MsgBox "Erro ocorrido: " & Err.Number & " - " & Err.Description & "", vbCritical, "Erro"
        Exit Sub

    End Sub


    É isso.

    Espero ter ajudado

    Att,

    Alexandre Fim


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

    [Resolvido]For Each com condição Setinf11
    Sistemas e Tecnologia Ltda
    avatar
    tchelo1
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11
    Registrado : 08/05/2023

    [Resolvido]For Each com condição Empty Resolvido perfeitamente !!!!!

    Mensagem  tchelo1 12/5/2023, 20:29

    Muito obrigado e Parabéns !!!!!
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]For Each com condição Empty Re: [Resolvido]For Each com condição

    Mensagem  Alexandre Fim 12/5/2023, 21:08

    Valeu Tchelo,

    O fórum agradece.

    Sucesso.

    Att,

    Alexandre Fim


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

    [Resolvido]For Each com condição Setinf11
    Sistemas e Tecnologia Ltda

    Conteúdo patrocinado


    [Resolvido]For Each com condição Empty Re: [Resolvido]For Each com condição

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 19/5/2024, 07:49