Ordem dos eventos para objectos de base de dados

Aplica-se A
Access para Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Uma única ação, como mover de um controlo num objeto para outro, pode desencadear vários eventos que ocorrem numa sequência específica. Saber quando os eventos ocorrem e por que ordem é importante, porque pode afetar como e quando as suas macros ou procedimentos de eventos são executados. Por exemplo, se existirem dois procedimentos de eventos que tenham de ser executados numa determinada ordem, deverá certificar-se de que os eventos a que estão associados ocorrem pela mesma ordem.

Neste artigo

Ordem de eventos para controlo em formulários

Os eventos dos controlos em formulários ocorrem quando move o foco para um controlo e quando altera e atualiza os dados num controlo.

Nota

O Microsoft Office Access apresenta os nomes de eventos de forma ligeiramente diferente no Visual Basic Editor do que na folha de propriedades e no Construtor de Macros. Por exemplo, o evento designado Ao Receber Foco na folha de propriedades do formulário e no Construtor de Macros designa-se GotFocus no Visual Basic Editor. Os exemplos neste artigo utilizam o formato de nomes de eventos do Visual Basic for Applications (VBA).

Mover o foco para um controlo

Quando move o foco para um controlo num formulário (por exemplo, ao abrir um formulário que contém um ou mais controlos ativos ou ao mover o foco para outro controlo no mesmo formulário), os eventos Enter e GotFocus ocorrem pela seguinte ordem:

EnterarrowGotFocus

Quando abre um formulário, os eventos Enter e GotFocus ocorrem após os eventos associados à abertura do formulário (como Open, Activate e Current), da seguinte forma:

Open (form) arrowActivate (form) arrowCurrent (form) arrowEnter (control) arrowGotFocus (controlo)

Quando o foco deixa um controlo num formulário (por exemplo, quando fecha um formulário que contém um ou mais controlos ativos ou quando se desloca para outro controlo no mesmo formulário), os eventos Exit e LostFocus ocorrem pela seguinte ordem:

Seta de saída, LostFocus,

Quando fecha um formulário, os eventos Exit e LostFocus ocorrem antes dos eventos associados ao fecho do formulário (como Unload, Deactivate e Close), pela seguinte ordem:

Seta Exit (controlo) Seta LostFocus (controlo) SetaDescarregar (formulário) SetaDesativar (formulário) Fechar (formulário)

Alterar e atualizar dados num controlo

Quando introduz ou altera dados existentes num controlo num formulário e, em seguida, muda o foco para outro controlo, ocorrem os eventos BeforeUpdate e AfterUpdate:

Seta BeforeUpdateAfterUpdate

Os eventos Exit e LostFocus de um controlo cujo valor é alterado ocorrem após os eventos BeforeUpdate e AfterUpdate:

Seta AntesDeAtualizar,SetaDepoisDeAtualizar, Seta SairLostFocus

Quando altera o texto numa caixa de texto ou na secção de caixa de texto de uma caixa de combinação, ocorre o evento Change. Este evento ocorre sempre que os conteúdos do controlo são alterados, mas antes de mover o foco para um controlo ou registo diferente (e, por isso, antes de os eventos BeforeUpdate e AfterUpdate ocorrerem). A seguinte sequência de eventos ocorre para cada tecla que prime na caixa de texto ou na secção de caixa de texto numa caixa de combinação:

Tecla Seta parabaixoTecla de setaPremirSeta suja Seta AlterarTeclaUp

O evento NotInList ocorre após introduzir um valor numa caixa de combinação que não se encontra na lista da caixa de combinação e, em seguida, tenta mover o foco para outro controlo ou registo. O evento NotInList ocorre após os eventos do teclado e os eventos Change da caixa de combinação, mas ocorre antes dos eventos de qualquer outro controlo ou do formulário. Se a propriedade LimitToList da caixa de combinação estiver definida como Sim, o evento Error para o formulário ocorre imediatamente após o evento NotInList :

Seta para BaixoTeclaSetapremida Seta suja Seta AlterarTeclaSeta paracima SetaNãoInListaErro

Início da Página

Ordem de eventos para registos em formulários

Os eventos de registos em formulários ocorrem quando muda o foco para um registo diferente, quando atualiza dados num registo, quando elimina um ou mais registos existentes ou quando cria um novo registo.

Mover o foco para registos e atualizar dados em registos

Quando move o foco para um registo existente num formulário, introduz ou altera os dados no registo e, em seguida, move o foco para outro registo, ocorre a sequência de eventos seguinte no formulário:

Seta atual (formulário) Seta BeforeUpdate (formulário) SetaAfterUpdate (formulário) Setaatual (formulário)

Quando sai de um registo cujos dados foram alterados, mas ainda antes de entrar no registo seguinte, ocorrem os seguintes eventos no controlo que tem o foco: Exit e LostFocus. Estes eventos ocorrem após os eventos BeforeUpdate e AfterUpdate no formulário, da seguinte forma:

Seta BeforeUpdate (formulário) SetaAfterUpdate (formulário) Seta Exit (controlo) SetaLostFocus (controlo) Current(formulário)

À medida que move o foco entre controlos num formulário, ocorrem eventos para cada controlo. Por exemplo, as seguintes sequências de eventos ocorrem quando faz o seguinte:

  • Abre um formulário e altera dados num controlo:
    Seta atual (formulário) Enter (controlo) setaSeta GotFocus (controlo) SetaBeforeUpdate ( controlo) Depois de Atualizar (controlo)
  • Move o foco para outro controlo:
    Seta Exit (control1) LostFocus (controlo1) arrowEnter (controlo2) GotFocus (controlo2)
  • Move o foco para outro registo:
    Seta BeforeUpdate (formulário) SetaAfterUpdate (formulário) Seta Exit (controlo2) setaLostFocus (controlo2) atual(formulário)

Eliminar registos

Quando elimina um registo, ocorrem os seguintes eventos no formulário e o Microsoft Office Access apresenta uma caixa de diálogo a pedir-lhe para confirmar a eliminação:

DeletearrowBeforeDelConfirmarrowAfterDelConfirm

Se cancelar o evento Delete, os eventos BeforeDelConfirm e AfterDelConfirm não ocorrem e a caixa de diálogo não é apresentada.

Criar um novo registo

Quando move o foco para um novo registo (em branco) num formulário e, em seguida, cria um novo registo ao introduzir dados num controlo, ocorre a seguinte sequência de eventos:

Seta atual (formulário) Enter (controlo) setaGotFocus (controlo) SetaBeforeInsert (formulário) AfterInsert (formulário)

O evento BeforeInsert (formulário) é acionado assim que começar a escrever no controlo. O evento AfterInsert (formulário) é acionado depois de sair do registo.

Os eventos BeforeUpdate e AfterUpdate dos controlos no formulário e do novo registo ocorrem após o evento BeforeInsert e antes do evento AfterInsert.

Início da Página

Ordem de eventos para formulário e subformulários

Os eventos de formulários ocorrem quando abre ou fecha um formulário, quando se desloca entre formulários ou quando trabalha com dados num formulário ou subformulário

Abrir e fechar um formulário

Quando abre um formulário, ocorre a seguinte sequência de eventos para o formulário:

Abrir seta CarregarsetaRedimensionarsetaAtivarsetaAtual

Se não existirem controlos ativos no formulário, o evento GotFocus ocorre no formulário após o evento Activate, mas antes do evento Current.

Quando fecha um formulário, ocorre a seguinte sequência de eventos para o formulário:

Seta de descarregarSetaDesativarSetaFechar

Se não existirem controlos ativos no formulário, o evento LostFocus ocorre no formulário após o evento Unload , mas antes do evento Deactivate .

Deslocar-se entre formulários

Quando alterna entre dois formulários abertos, o evento Deactivate ocorre no primeiro formulário e o evento Activate ocorre no segundo formulário:

Seta Desativar (formulário1) Ativar (formulário2)

O evento Deactivate de um formulário também ocorre quando muda do formulário para outro separador de objeto no Access. No entanto, o evento Deactivate não ocorre quando muda para uma caixa de diálogo, para um formulário cuja propriedade PopUp esteja definida para Sim ou para uma janela noutro programa.

Nota

O evento Open não ocorre se mudar o foco para um formulário que já se encontre aberto, mesmo que tenha movido o foco para esse formulário ao executar a ação AbrirFormulário.

Trabalhar com dados num formulário

Os eventos de formulário e de controlo ocorrem à medida que se desloca entre os registos do formulário e altera os dados. Por exemplo, quando abre um formulário pela primeira vez, ocorre a seguinte sequência de eventos:

Abrir(formulário) setaCarregar (formulário) setaRedimensionar (formulário) setaAtivar (formulário) Setaatual (formulário) Enter (controlo) setaGotFocus (controlo)

De forma semelhante, quando fecha um formulário, ocorre a seguinte sequência de eventos:

Seta Exit (controlo) Seta LostFocus (controlo) SetaDescarregar (formulário) SetaDesativar (formulário) Fechar (formulário)

Se tiver alterado dados num controlo, os eventos BeforeUpdate e AfterUpdate para o controlo e para o formulário ocorrem antes do evento Exit do controlo.

Trabalhar com subformulários

Quando abre um formulário que contém um subformulário, o subformulário e os respetivos registos são carregados antes do formulário principal. Por essa razão, os eventos do subformulário e respetivos controlos (como Open, Current, Enter e GotFocus) ocorrem antes dos eventos do formulário. No entanto, o evento Activate não ocorre em subformulários. Por essa razão, quando abre um formulário principal, o evento Activate é ativado apenas para o formulário principal.

Da mesma forma, quando fecha um formulário que contém um subformulário, o subformulário e os respetivos registos são descarregados após o formulário. O evento Deactivate não ocorre para subformulários. Por essa razão, fechar um formulário principal ativa o evento Deactivate apenas para o formulário principal. Os eventos de controlo, formulário e subformulário ocorrem pela seguinte ordem:

  1. Eventos para os controlos do subformulário (comoExit e LostFocus)
  2. Eventos para os controlos do formulário (incluindo o controlo do subformulário)
  3. Eventos para o formulário (como Deactivate e Close)
  4. Eventos para o subformulário

Nota

Uma vez que os eventos de um subformulário ocorrem após o formulário principal ser fechado, alguns eventos, como cancelar o fecho do formulário principal de um evento no subformulário, não irão ocorrer. Poderá ter de mover estes tipos de testes de validação para um evento no formulário principal.

Início da Página

Ordem de eventos para batimentos de teclas e cliques do rato

Os eventos de teclado ocorrem em formulários e controlos quando prime as teclas ou envia batimentos de teclas enquanto o formulário ou controlo tem o foco. Os eventos de rato ocorrem em formulários, secções de formulários e controlos em formulários quando clica nos botões do rato enquanto o ponteiro do rato se encontra num formulário, secção ou controlo. Os eventos de rato também ocorrem quando move o ponteiro do rato sobre um formulário, uma secção ou um controlo.

Eventos de teclado

Quando você pressiona e solta uma tecla enquanto um controle em um formulário tem o foco (ou usa a ação ou instrução SendKeys para enviar um pressionamento de teclas), ocorre a seguinte sequência de eventos:

Tecla Seta para baixoTeclaPremirsetaTecla para cima

Quando você pressiona e solta uma tecla ou envia um pressionamento de tecla no conjunto de caracteres ANSI, ocorrem os eventos KeyDown, KeyPress e KeyUp. Se premir uma tecla ANSI sem a soltar, os eventos KeyDown e KeyPress alternam-se repetidamente (KeyDown, KeyPress, KeyDown, KeyPress e assim por diante) até que solte a tecla; em seguida, ocorre o evento KeyUp.

Se premir e soltar uma tecla não-ANSI, ocorrem os eventos KeyDown e KeyUp. Se premir uma tecla não-ANSI sem a soltar, o evento KeyDown ocorre repetidamente até que liberte a tecla, após o que ocorre o evento KeyUp.

Se premir uma tecla acionar outro evento de um controlo, esse evento ocorre após o evento KeyPress mas antes do evento KeyUp. Por exemplo, se um batimento de teclas alterar o texto numa caixa de texto, que aciona um evento Change, ocorre a seguinte sequência de eventos:

Seta para BaixoTecla de setaPremir setaAlterarsetaTecla para cima

Se um batimento de tecla fizer com que o foco mude de um controlo para outro, ocorre o evento KeyDown no primeiro controlo, enquanto os eventos KeyPress e KeyUp ocorrem no segundo controlo. Por exemplo, se alterar os dados num controlo e, em seguida, premir a Tecla de Tabulação para se deslocar para o controlo seguinte, ocorrem as seguintes sequências de eventos:

  • Primeiro controlo:
    Seta KeyDown,Seta BeforeUpdate,SetaAfterUpdate,Seta ExitLostFocus
  • Segundo controlo:
    EnterarrowGotFocusarrowKeyPressarrowKeyUp

Eventos de rato

Quando clica e solta um botão do rato enquanto o ponteiro do rato se encontra num controlo num formulário, ocorre a seguinte sequência de eventos no controlo:

Seta para baixo,MouseSeta para cima,Clique em

Se um controlo tiver o foco e clicar noutro controlo para mover o foco para o segundo controlo, ocorrem as seguintes sequências de eventos:

  • Primeiro controlo:
    Seta de saída, LostFocus,
  • Segundo controlo:
    EnterarrowSeta GotFocusSeta MouseDownSeta para cima Clique em

Se mover para outro registo e em seguida clicar num controlo, o evento Current do formulário também ocorre antes do evento Enter do controlo.

Fazer duplo clique num controlo faz com que ambos os eventos Click e DblClick ocorram. Por exemplo, quando faz duplo clique num controlo que não seja um botão de comando, ocorre a seguinte sequência de eventos no controlo:

Seta MouseDownSeta para cima Cliquena setaDblClickarrowMouseUp

Quando faz duplo clique no botão de comando, ocorre a sequência de eventos precedente, seguida de um segundo evento Click.

O evento MouseMove de um formulário, secção ou controlo ocorre quando move o ponteiro do rato sobre o formulário, secção ou controlo. Este evento é independente dos outros eventos de rato.

Início da Página

Ordem de eventos para relatórios e secções de relatórios

Os eventos de relatórios e secções de relatórios ocorrem quando abre um relatório para o imprimir ou pré-visualizar ou quando fecha um relatório.

Eventos de relatórios

Quando abre um relatório para o imprimir ou pré-visualizar e depois fecha o relatório ou muda para outro separador de objeto no Access, ocorre a seguinte sequência de eventos no relatório:

Seta aberta,Carregar setaAtivarSetaFecharsetaDesativar

Quando alterna entre dois relatórios abertos, o evento Deactivate ocorre no primeiro relatório e o evento Activate ocorre no segundo relatório:

Seta Desativar (relatório1) Ativar (relatório2)

O evento Deactivate de um relatório também ocorre quando muda do relatório para outro separador de objeto no Access. No entanto, o evento Deactivate não ocorre quando muda para uma caixa de diálogo, para um formulário cuja propriedade PopUp esteja definida para Sim ou para uma janela noutro programa.

Quando abre um relatório baseado numa consulta, o Access ativa o evento Open do relatório antes de executar a consulta subjacente. Como resultado, pode definir os critérios do relatório através de uma macro ou um procedimento de evento que responda ao evento Open. Por exemplo, a macro ou o procedimento de evento podem abrir uma caixa de diálogo personalizada na qual pode introduzir critérios do relatório.

Eventos para secções de relatórios

Quando imprime ou pré-visualiza um relatório, os eventos Format e Print ocorrem nas secções do relatório após os eventos Open e Activate do relatório e antes dos eventos Close ou Deactivate do relatório:

Seta Abrir (relatório) SetaCarregar (relatório) SetaAtivar (relatório) SetaFormatar (secção do relatório) SetaImprimir (secção do relatório) SetaFechar (relatório) Desactivar (relatório)

Segurança Pode utilizar a Vista de Relatório para ativar a filtragem de relatórios por parte dos utilizadores. Mas, ao contrário da Pré-visualização, os eventos Formatar e Imprimir em qualquer secção não ocorrem na Vista de Relatório. Isto também se aplica aos resultados da função VBA e aos procedimentos definidos pelo utilizador que são apresentados em controlos (como legendas de etiquetas, estado de apresentação, formatação condicional, redimensionamento de controlos, etc.) dentro desses eventos. Portanto, não use código neste evento para formatar, ocultar ou imprimir dados confidenciais, que podem ficar expostos. Recomendamos a filtragem prévia dos dados ou a desativação da Pré-visualização do Relatório ao definir a propriedade AllowReportView como Não.

Para além disso, os seguintes eventos podem ocorrer durante ou após a formatação, mas antes do evento Print:

  • O evento Retreat ocorre quando o Access regressa a uma secção anterior durante a formatação do relatório.
  • O evento NoData ocorre se não existirem registos apresentados pelo relatório.
  • O evento Page ocorre após a formatação, mas antes da impressão. Pode utilizar este evento para personalizar o aspeto do relatório impresso.

Início da Página