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]Como utlizar o comando Dirty no subformulario

    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Como utlizar o comando Dirty no subformulario

    Mensagem  Assis 27/6/2013, 17:17


    'Codigo do mestre JPaulo
    Private Sub SeuBotãoFecharForm_Click()
    If Me.Dirty Then
    If MsgBox("Deseja Salvar ?", vbOKCancel, "Salvar?") = vbCancel Then
    Me.Undo
    End If
    End If
    DoCmd.Close
    End Sub


    Uso este código para os meus forms.
    Mas precisava de o usar, tendo ele a capacidade de detetar também as alterações que eu fizer num subformulário

    Exemplo
    Tenho um form chamado "Encomendas"
    Com um subformulario "DetalhesArtigos" ligados por ID

    Quando altero os campos no form "Encomendas" a função deteta que houve alterações, ao fechar o form.
    Mas se alterar os dados do Subformulario "DetalhesArtigos" não deteta que houve alterações

    Obrigado



    .................................................................................
    *** Só sei que nada sei ***
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  criquio 27/6/2013, 17:30

    Talvez, para esse caso, fosse o caso de chamar a função no "Após alterar" do campo.


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Assis 27/6/2013, 17:35

    Boas Criquio

    Após alterar o Subformulario ?


    .................................................................................
    *** Só sei que nada sei ***
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  criquio 27/6/2013, 17:40

    Não, dos campos mesmo. Só precisaria fazer adaptações, creio eu.


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    Convidado
    Convidado


    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Convidado 29/6/2013, 16:09

    Não testei... mas talvez assim...

    'Codigo do mestre JPaulo
    Private Sub SeuBotãoFecharForm_Click()
    If Me.Dirty or Forms!NomeDoForm.NomeDoSubForm!Form.Dirty Then
    If MsgBox("Deseja Salvar ?", vbOKCancel, "Salvar?") = vbCancel Then
    Me.Undo
    End If
    End If
    DoCmd.Close
    End Sub


    Cumprimentos.
    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Assis 29/6/2013, 17:03

    Piloto

    Dá erro
    Erro em tempo de execução "2465"
    O programa não consegue localizar o campo 'Form' referido na sua expressão

    If Me.Dirty or Forms!EncomendasAlterar.DetalhesArtigosAlterar!Form.Dirty Then


    .................................................................................
    *** Só sei que nada sei ***
    avatar
    Convidado
    Convidado


    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Convidado 29/6/2013, 19:03

    Realmente esta forma não serve a este propósito...

    coloquei o mesmo evento no Sub form e o invoquei no evento do form principal ao alterar o campo a propriedade dirty não funcionou....

    Creio que a dica do criquio seja mais apropriada.

    Cumprimentos.

    Ou então... Adicionar os valores dos campo em uma unica string e ao clicar no botão levar os valores a outra string e compará-las..

    Cumprimentos.
    avatar
    Convidado
    Convidado


    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Convidado 29/6/2013, 19:20

    Algo assim...

    Crie um módulo e o nomeeie de mdlVarPublicas
    neste

    Public StrOld as String
    Public StrNew as String

    No evento do botão:

    Dim ctl As Control

    'Dicas para os controles
    For Each ctl In Me.SubFrmExemplo1.Controls
    ' Percorre todos os tipos de controles
     Select Case ctl.ControlType
        Case acTextBox ', acComboBox, acListBox, acOptionGroup, acCheckBox
            StrNew = StrNew & ctl.OldValue & ","
        End Select
    Next ctl

    If StrComp(StrOld, StrNew) = -1 Then
    MsgBox "Registros Alterados"
    StrOld = Null
    StrNew = Null



    No subform no evento Antes de atualizar:


    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim ctl As Control

    'Dicas para os controles
    For Each ctl In Me.Controls
    ' Percorre todos os tipos de controles
     Select Case ctl.ControlType
        Case acTextBox ', acComboBox, acListBox, acOptionGroup, acCheckBox
            StrOld = StrOld & ctl.OldValue & ","
        End Select
    Next ctl

    End Sub


    Cumprimentos.
    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Assis 29/6/2013, 20:59

    Piloto

    Se Alterar no subformulario
    Para aqui sublinhando a amarelo

    StrNew = StrNew & ctl.OldValue & ","



    Se abrir e fechar sem alterar nada dá erro aqui
    Para aqui sublinhando a amarelo

    If StrComp(StrOld, StrNew) = -1 Then

    Obrigado


    .................................................................................
    *** Só sei que nada sei ***
    avatar
    Convidado
    Convidado


    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Convidado 29/6/2013, 21:40

    Não entendi amigão.. de mais detalhes.

    Cumprimentos.
    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Assis 29/6/2013, 22:21

    Piloto
    Enviei o exemplo para o seu mail
    Obrigado


    .................................................................................
    *** Só sei que nada sei ***
    avatar
    Convidado
    Convidado


    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Convidado 29/6/2013, 22:32

    Assis me fale os passos que utilizou quando gerou o erro para eu reproduzir aqui e ver o que acontece.

    Cumprimentos.
    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Assis 29/6/2013, 23:32

    Piloto
    Se alterar a quantidade no subform e clikar em gravar / fechar, dá logo erro

    E tem aqui outro exemplo já com o modulo que disse para criar


    .................................................................................
    *** Só sei que nada sei ***
    avatar
    Convidado
    Convidado


    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Convidado 30/6/2013, 00:18

    Boas Assis... estive vendo agora... como é em um sub form... são vários registros...
    Essa solução não será apropriada... pois para cada textbox... sao valores diferentes de acordo com o registro...

    Teremos que encontrar outra solução.. irei pesquisar sobre transações e ver se é viável ao caso..
    Ou uma solução que apliquei em um exemplo de configuração de idiomas, disponivel no repositório..
    O qual seja carregar a SQL em uma variável.. Dica muito boa do Mestre Avelino.
    Pedirei tambem auxilio a um colega para este tópico.

    Ate mais.

    Cumprimentos.
    avatar
    Convidado
    Convidado


    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Convidado 30/6/2013, 00:39

    Assis... Eu não sei (ainda) se é possível o dirty no subform..
    pensei tambem em dois recordsets... um antes carregado no evento antes de alterar.. e outro no evento do botão salvar...
    E comparação entre todos os campos do mesmo e a cada registro...
    Se houve alteração emite mensagem e encerra o loop.. voce ainda pode incluir em uma listbox do tipo lista de valores.. os campos que foram modificados e o nome do campo..

    Compreendeu?

    Cumprimentos.
    avatar
    Convidado
    Convidado


    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Convidado 1/7/2013, 01:20

    Assis.. deu um certo trabalho mas veja se lhe serve

    http://maximoaccess.forumeiros.com/t13956-verifica-alteracao-de-dados-em-subformularios#106921

    Cumprimentos.
    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Assis 1/7/2013, 11:44

    Bom dia Pioto

    Adicionei o modulo - Tem o nome ModHary
    E adicionei as funções no SubFormulario e no formulario

    Não testou ?

    Altere qualquer coisa no Sub e click para gravar

    Obrigado


    .................................................................................
    *** Só sei que nada sei ***
    avatar
    Convidado
    Convidado


    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Convidado 1/7/2013, 13:13

    Bom dia Assis,  Adicionei o tratamento de erros após fazer as funções. Tenho um Add-in que adiciona o tratamento de erros ao clicar de um botão... Ocorre que como o tratamento de erros é previamente gravado... ele faz isso com expressões para uma sub... então o procedimento de encerramento do tratamento de erro, quando existe, é colocado como: Exit Sub...

    Como adicionei tratamento de erro no módulo, os procedimentos ali contidos devem ser: Exit Function... Basta altera de Exit Sub para Exit Function no módulo... Mande compilar o sistema que imediatamente apontará este problema.

    >>> Se esqueceu tambem de colocar o código no evento Ao Alterar de todas as caixas texto do subForm.
    >>> veja aqui feito para a caixa texto Descrição:

    Private Sub Descrição_Change()
    Me.CarregaDados
    End Sub


     Na sub  CarregaDadosSalvos, coloquei uma MsgBox para contar a quantidade de registros no recordset.. pode excluir.
       MsgBox rsBase.RecordCount


    Cumprimentos.
    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Assis 1/7/2013, 14:33

    Obrigdo Piloto

    Eu é que não reparei nesta parte do change.

    Só mais um uma pergunta para encerrar o tópico.

    Não poderia ser assim ?

       If ComparaDados = True Then
       If MsgBox("Deseja Salvar ?", vbYesNo, "Aviso") = vbNo Then
       Me.Undo
     Se escolher vbNo as alterações não são gravados
       Else
      vb Yes As alterações são gravadas
       End If

    Obrigado


    .................................................................................
    *** Só sei que nada sei ***
    avatar
    Convidado
    Convidado


    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Convidado 1/7/2013, 14:46

    Assis.. criei a função para o aviso que foram alterados dados..
    Agora.. caso a função retorne true.. ai voce aplica a instrução que desejar...

    Faça os testes que achar pertinente.

    Cumprimentos.
    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Assis 1/7/2013, 14:49

    Obrigado Piloto


    .................................................................................
    *** Só sei que nada sei ***
    avatar
    Convidado
    Convidado


    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Convidado 1/7/2013, 14:56

    O que achou da função Assis?

    A observou com calma e entendeu como funciona o comando GetRows?

    Isso é importante... Entender o código... assim aumentamos em conhecimento.

    Cumprimentos.
    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Assis 1/7/2013, 18:03

    Agora está completa Piloto

    Bravo
    Obrigado


    .................................................................................
    *** Só sei que nada sei ***
    avatar
    Convidado
    Convidado


    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Convidado 1/7/2013, 20:08

    Assis, esta aqui está mais atual... Ocorria um erro quando inseria novo registro... Agora está funcionando perfeitamente..

    Se em testes encontrar algum bug... avise-me.

    http://maximoaccess.forumeiros.com/t13956-verifica-alteracao-de-dados-em-subformularios-possibilitando-reversao

    Cumprimentos.
    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Assis 1/7/2013, 22:23

    Piloto
    Deve ter reparado que no subformulario em cada linha de registro tem um botão do lado esquerdo (Imagem Lata)que ao fazer click elimina um registo, mas depois de eliminar um registro, ao fechar o form a sua função não deteta a eliminação.

    Este é a função do dito botão de eliminar.
    If IsNull(Me.Ref) Or Me.Ref = "0" Then
    MsgBox "Linha de Registo É Nula ! ", vbQuestion, "Aviso"
    Me.Ref.SetFocus
    Exit Sub
    End If
    Dim apaga As Integer
    Dim Msg
    On Error GoTo Err_Excluir_Click
    DoCmd.SetWarnings False
    apaga = MsgBox("Anular Linha do Documento ? " & Chr(10) + Descrição & Chr(10) + Chr(13) & "Ref " & Format(Ref, "000 "), vbYesNo + vbQuestion, "Conforlar")
    Select Case apaga
    Case vbYes
    DoCmd.RunCommand acCmdDeleteRecord
    Case vbNo
    End Select
    Me.Refresh

    Exit_Err_Excluir_Click:
    Exit Sub
    Err_Excluir_Click:
    Msg = MsgBox("Não Se Pode Excluir um Registro Ainda Inexistente !!!", vbOKOnly + vbQuestion, "Atencão")
    Resume Exit_Err_Excluir_Click


    .................................................................................
    *** Só sei que nada sei ***
    avatar
    Convidado
    Convidado


    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Convidado 2/7/2013, 00:31

    Boas Assis.... O exemplo que postei.. retirei todos os comandos que não interessavam à solução referente ao Tópico...

    Se a solução que postei no repositório atendeu à finalidade deste tópico, nos avise na próxima mensagem...
    Caso não manteremos este tópico aberto até solucionarmos..

    Caso seja dúvida diversa... Favor postar em outro tópico.

    Este assunto, com o exemplo que postei, foi resolvido?

    Abra;cos.
    avatar
    Convidado
    Convidado


    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Convidado 4/7/2013, 01:38

    Boas Assis, havia testado e encontrado alguns erros após delecão quando tinha apenas um registros.

    Contornei todos os erros..

    Agora creio que está bom..

    Baixe novamente.. Se possível poste algum comentário na sala de repositório se o exemplo lhe saiu a contento.

    Abraços.

    Conteúdo patrocinado


    [Resolvido]Como utlizar o comando Dirty no subformulario Empty Re: [Resolvido]Como utlizar o comando Dirty no subformulario

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 22/11/2024, 20:55