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]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual

    Paulo Robilotta
    Paulo Robilotta
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 43
    Registrado : 24/09/2010

    [Resolvido]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual Empty [Resolvido]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual

    Mensagem  Paulo Robilotta 24/9/2010, 04:19

    O Access define os eventos Open e Load para formulários como segue:

    - O evento Open ocorre quando um formulário é aberto, mas antes de o primeiro registro ser exibido.
    - O evento Load ocorre quando um formulário é aberto e seus registros são exibidos.

    Para tentar verificar quais as diferenças entre esses dois eventos, construí um banco de dados onde todos os eventos de abertura do formulário e os eventos ligados ao foco das caixas de textos foram "marcados" via Debug.Print.

    Na sequência são mostradas as instruções do evento Open e Load e o respectivo resultado na janela de verificação imediata.

    O EVENTO OPEN
    Private Sub Form_Open(Cancel As Integer)
    Debug.Print "===Form_Open"
    'Acessando uma propriedade do formulário
    Debug.Print " ** Open - Nome do formulário : " & Me.Form.Name
    'Obtendo o nº do registro
    Debug.Print " ** Open - Me.CurrentRecord : " & Me.CurrentRecord
    'Obtendo o valor do campo do 1º registro
    Debug.Print " ?? Open - Valor do Campo1 : " & Me.Campo1.Value

    'Definindo uma propriedade de controle
    Me.NaoAcoplado.BackColor = 65535
    'Definindo o valor de um campo não acoplado
    Me.NaoAcoplado.Value = "Um valor qualquer"

    End Sub

    O EVENTO LOAD
    Private Sub Form_Load()
    Debug.Print "===Form_Load"
    'Obtendo o nº do registro
    Debug.Print " ** Load - Me.CurrentRecord : " & Me.CurrentRecord
    End Sub

    O RESULTADO NA JANELA DE VERIFICAÇÃO IMEDIATA
    ===Form_Open
    ** Open - Nome do formulário : Form1
    ** Open - Me.CurrentRecord : 0
    ?? Open - Valor do Campo1 : Dado 11
    ===Form_Load
    ** Load - Me.CurrentRecord : 1
    ===Form_Resize
    ===Form_Activate
    ===Form_Current
    Campo1_Enter
    Campo1_GotFocus

    Comparando estes resultados com as definições todos me parecem coerentes, a menos daquele indicado com as interrogações (??)
    Minha questão é : Se no evento Open o primeiro registro ainda não foi exibido, como é possível ter acesso ao dado de um campo desse registro ? Isso não é incoerente com a definição ?
    Se alguém souber explicar a razão desse fato ou indicar uma fonte de informação sobre o assunto, eu agradeço.

    Obrigado

    Paulo Robilotta
    Anexos
    [Resolvido]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual AttachmentAoAbrir.zip
    Arquivo .mdb usado para verificar os eventos de abertura do formulário
    Você não tem permissão para fazer download dos arquivos anexados.
    (21 Kb) Baixado 37 vez(es)
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11016
    Registrado : 04/11/2009

    [Resolvido]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual Empty Re: [Resolvido]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual

    Mensagem  JPaulo 24/9/2010, 11:18

    Olá Paulo seja bem vindo ao fórum;

    Realmente eu andei a estudar esses promenores à uns 12 anos atrás e verifiquei que o que a Microsoft diz em relação a isso na ajuda do VBA é verdade, mas está pouco explicado.

    A explicação que eu lhe dou, é a minha conclusão a que cheguei na altura;

    Os eventos ocorrem na seguinte sequência:

    Open, Load, Resize, Activate, Current

    O evento Open quando é disparado não carrega algum dado relacionado com valores (Recordsets), mas depois dentro desse mesmo evento ele vem a carregar apenas na memoria, chamada a preparação para o evento Load.

    O evento Load acontece já depois do evento Open finalizado, e os registros serão exibidos em Background.

    Conclusão:

    Você pode cancelar o evento Open, mas não pode cancelar o evento Load.

    Exemplo:

    Funciona

    Private Sub Form_Open(Cancel As Integer)
    If Me.CurrentRecord = 0 Then DoCmd.Close
    End Sub


    Não funciona

    Private Sub Form_Load()
    If Me.CurrentRecord = 0 Then DoCmd.Close
    End Sub






    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvido]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvido]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvido]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual Folder_announce_new Instruções SQL como utilizar...

    Egomesb e raphaelfaria gostam desta mensagem

    Paulo Robilotta
    Paulo Robilotta
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 43
    Registrado : 24/09/2010

    [Resolvido]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual Empty Re: [Resolvido]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual

    Mensagem  Paulo Robilotta 24/9/2010, 18:10

    Olá João Paulo

    Obrigado pela resposta, mas para mim a questão persiste.

    A partir das definições da ajuda do Access, eu entendia os eventos Open e Load da seguinte maneira:

    Open - Quando o evento Open ocorre, a estrutura do formulário é carregada na memória.
    Load - Quando o evento Load ocorre, os dados são carregados no formulário aberto no evento Open.

    Ou seja, o têrmo "aberto" significaria "carregado na memória" e disponível para os eventos subsequentes.

    A questão está no entendimento do que significa "exibido" na definição. Eu entendia exibido como algo que podia ser visto. Algo como um objeto numa vitrine que pode ser visto mas não pode ser manipulado.

    Assim, pela definição, eu esperava que no evento Open não fosse possível "ver" algum dado existente no registro uma vez que dentro deste evento o primeiro registro ainda não havia sido exibido.

    Esta é minha questão básica !

    Como mostrado no tópico inicial, uma vez que é possível acessar o valor de um campo do primeiro registro, isto significa que o registro em si foi exibido (no sentido da analogia com uma vitrine), o que contraria a definição da ajuda.

    Pelo que pude constatar, no evento Open o formulário é carregado na memória e os dados do primeiro registros são colocados "na vitrine". Não se pode manipulá-los (por exemplo, dentro deste evento não é possível atribuir um valor ao campo do registro) mas é´possível vê-los.

    Já no evento Load, como os dados foram carregados, é possível atribuir um valor ao campo.

    Assim, quando você afirma : "O evento Open quando é disparado não carrega algum dado relacionado com valores" , devo entender como : "O evento Open quando é disparado não carrega algum dado relacionado com valores que possam ser manipulados" ?

    Um reparo, o exemplo do evento Load escrito como está realmente não funciona . No entanto, isso se deve ao fato do valor atribuído à instrução Me.CurrentRecord ser zero. Se atribuirmos o valor 1 (que é o que ocorre no evento Load), a instrução escrita como abaixo , também funciona.

    Private Sub Form_Load()
    If Me.CurrentRecord = 1 Then DoCmd.Close
    End Sub

    Para finalizar, queria dizer que o que ocorre efetivamente nos eventos eu já entendi. O que fica obscuro é a relação entre o que na realidade ocorre nos eventos e as definição extremamente pouco esclarecedoras da ajuda.


    Obrigado pela atenção


    Paulo Robilotta
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11016
    Registrado : 04/11/2009

    [Resolvido]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual Empty Re: [Resolvido]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual

    Mensagem  JPaulo 24/9/2010, 18:35

    Boa Tarde!

    Como lhe disse acima, a ajuda da Microsoft não é esclarecedora e isso você está de acordo comigo.

    Em relação a visualizar o conteudo do campo no evento Open, só consegue através da janela immediate, porque essa janela, lista todos os eventos e resultados, é como se fosse o buffer da memória do VBA, mas não consegue popular nem manipular.

    Quanto a esta instrução, você acabou de me dar razão no que lhe disse;

    Private Sub Form_Load()
    If Me.CurrentRecord = 1 Then DoCmd.Close
    End Sub


    Funciona sim, porque já populou um registro, mas faça o mesmo no Open e veja se funciona;
    Estamos a fazer precisamente o contrario, da instrução que lhe passei como exemplo:

    Private Sub Form_Open()
    If Me.CurrentRecord = 1 Then DoCmd.Close
    End Sub


    Então a conclusão é simples;

    1º no Open só visualiza na memoria, ou seja lê a memoria através da janela immediate, é como se você consegui-se ler a minha mente em alguma maquina no futuro.

    2º no Open não se consegue popular valores.




    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvido]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvido]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvido]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual Folder_announce_new Instruções SQL como utilizar...
    Paulo Robilotta
    Paulo Robilotta
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 43
    Registrado : 24/09/2010

    [Resolvido]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual Empty Re: [Resolvido]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual

    Mensagem  Paulo Robilotta 25/9/2010, 01:43

    Olá João Paulo

    Para testar a sua afirmação, troquei a instrução do evento Open no aquivo anexo :

    De : Me.NaoAcoplado.Value = "Um valor qualquer"
    Para : Me.NaoAcoplado.Value = Me.Campo1.Value

    O que se constata é que é possível definir o valor do campo NaoAcoplado com o valor do Campo1.

    João Paulo, diante de tudo que discutimos aqui, chego às seguintes conclusões :

    1) A definição da ajuda é realmente ruim.

    2) Que é possível acessar um dado do primeiro registro do formulário no evento Open.

    3) Que o têrmo "exibido" da definição provavelmente seria melhor entendido se fosse trocado pela palavra "se torne o registro atual" e então as definições poderiam ser escritas assim :


    O evento Open ocorre quando um formulário é aberto, mas antes que o primeiro registro se torne o registro atual.
    O evento Load ocorre quando um formulário é aberto, seus registros são carregados e há um registro atual.

    Mais uma vez agradeço a atenção

    Abraço

    Paulo Robilotta

    Conteúdo patrocinado


    [Resolvido]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual Empty Re: [Resolvido]Eventos Ao Abrir x Ao Carregar - Dúvida conceitual

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 29/4/2024, 10:19