A visualização da informação nas folhas de dados (datasheets) das tabelas e consultas é pouco agradável e dificulta a sua manipulação. Os formulários servem para organizar e tornar mais agradável a interacção com a BD. Em conjunto com os controlos, permitem a construção de aplicações sobre a BD. Pode-se resumir as funcionalidades dos formulários a:
Para criar um formulário, clicar no botão
New no separador Forms da janela de BD. Aparece então uma caixa de diálogo que permite seleccionar o tipo de formulário a criar e a tabela ou consulta que servirá de fonte de registos:
As opções disponíveis são:
A maior parte das vezes, a melhor forma de construir um formulário é começar por usar o assistente para construir o essencial da visualização da informação. Depois, na vista de estrutura, efectuam-se pequenos ajustamentos e acrescentam-se controlos para associar funcionalidades ao formulário, como procura de registos, ligação a outros formulários, entre outras. A excepção mais comum a esta regra é a construção de formulários que servem como menus, em que se começa a construir um formulário do nada, usando a vista de estrutura.
O AssistentePara criar um formulário com o assistente, escolher a opção
Form Wizard e, opcionalmente, seleccionar a tabela que lhe vai servir de base. Em seguida aparece uma caixa de diálogo para escolha dos campos a incluir. Note-se que nesta altura é possível alterar a tabela que serve de base ao formulário e é possível usar campos de várias tabelas. Neste último caso, o assistente guia o utilizador na criação de um formulário com sub-formulários, como será explicado mais adiante. Se fôr seleccionada apenas uma tabela é apresentada em seguida uma caixa de diálogo para escolher a organização dos campos, em que, para além das opções Columnar, Tabular e Datasheet explicadas acima, existe a opção Justified, em que os campos são dispostos uns a seguir aos outros, da esquerda para a direita e de cima para baixo. Na caixa de diálogo que se segue define-se o estilo a usar e na última, o nome do formulário e se se deseja abrir o formulário para ver os dados ou em vista de estrutura.
Exemplo: Para tornar a visualização e edição dos dados sobre os alunos mais agradável, cria-se um formulário. Clicar em
New no separador Forms, seleccionar a tabela Alunos para fonte de registos e o assistente para criação do formulário. Em seguida incluir todos os campos de Alunos no formulário:
Escolher a organização dos campos em coluna e depois o estilo
Standard. Finalmente, atribuir ao formulário o nome Lista de Alunos. O resultado é o seguinte:
¨
Como foi dito a utilização mais frequente da vista de estrutura é para editar formulários construidos com o assistente. Um formulário consiste em várias secções: cabeçalho (Form Header), detalhe (Detail) e rodapé (Form Footer).
Exemplo: Seleccionar o formulário
Lista de Alunos e abrir a vista de estrutura:
¨
O cabeçalho serve para apresentar informação sobre o formulário, como o título. A zona de detalhe é normalmente usada para mostrar os campos do(s) registo(s). O rodapé é essencialmente usado para informação de estado, como, por exemplo, o número do registo actual, e informação agregada, como totais.
O utilizador pode ver as propriedades associadas a um formulário executando o comando
View, Properties. As propriedades são agrupadas em 4 conjuntos:
O separador
All apresenta todas as propriedades.
Exemplo: As propriedades do formulário
Lista de Alunos são:
Note-se que o facto de o formulário basear-se na tabela
Alunos, indicado ao assistente, foi registado na propriedade Record Source.¨ ControlosAs peças utilizadas para a construção de um formulário são os controlos. Para além de mostrar informação, os controlos permitem organizar e decorar o formulário, de forma a tornar a sua utilização mais agradável e eficiente. Um controlo pode ser colocado em qualquer uma das secções e tem também um conjunto de propriedades agrupadas da mesma forma que nos formulários. Alguns controlos têm assistentes que facilitam a sua criação.
A seguinte tabela apresenta os controlos existentes no Access:
|
Controlo |
Utilização |
Assistente |
Control source |
|
Label [Rótulo] |
Informação ou texto descritivo. |
Não |
Não |
|
Text Box [Caixa de texto] |
Mostrar e/ou editar campos de tabelas e inserção de dados pelo utilizador, por exemplo, para procura de registos. É constituido por 2 partes, uma caixa com um título e outra onde se visualizam/editam os dados, e em que cada uma tem as suas propriedades. |
Não |
Sim |
|
Option Group [Grupo de opções] |
Pode conter check boxes, option buttons ou toggle buttons. Apenas uma opção pode estar selecionada. |
Sim |
Sim |
|
Toggle Button [Botão de alternar] |
Se é utilizado isoladamente, seleciona um valor de Yes/No. Em option group seleciona um valor de um conjunto de valores. |
Não |
Sim |
|
Option Button [Botão de opção] |
Idem toggle button. |
Não |
Sim |
|
Check Box [Caixa de verificação] |
Idem toggle button. |
Não |
Sim |
|
Combo Box [Caixa de combinação] |
Selecção de valor de uma lista. Se não estiver aberta, apenas o valor escolhido é mostrado. Permite inserção de novos valores. |
Sim |
Sim |
|
List Box [Caixa de listagem] |
Selecção de um valor de uma lista. O controlo está sempre aberto. Não permite inserção de valores novos. |
Sim |
Sim |
|
Command Button [Botão de comando] |
Permite executar comandos, macros ou chamar procedimentos. |
Sim |
Não |
|
Image [Imagem] |
Imagem guardada em ficheiro. |
Não |
Não |
|
Unbound Object Frame [Moldura de objecto independente] |
Objecto OLE não ligado (unbounded). |
Não |
- |
|
Bound Object Frame [Moldura de objecto dependente] |
Objecto OLE ligado (bounded). |
Não |
- |
|
Page Break [Quebra de página] |
Separa um formulário em páginas. |
Não |
Não |
|
Tab Control [Controlo separador] |
Separador usado, por exemplo, para organizar de forma mais legível tabelas com muitos campos. |
Não |
Não |
|
Subform/ Subreport [Subformulário/ subrelatório] |
Inserir um subformulário ligado ao formulário actual, por exemplo, os movimentos de uma conta bancária cujos dados são apresentados no actual. |
Sim |
Não |
|
Line [Linha] |
Linha decorativa. |
Não |
Não |
|
Rectangle [Rectângulo] |
Rectângulo decorativo. |
Não |
Não |
|
More Controls [Mais controlos] |
Outros controlos disponibilizados pelo Access ou outras aplicações. |
- |
- |
Das propriedades dos controlos, duas, comuns a vários, são de especial importância:
Name e Control Source. Control Source permite definir a forma como o controlo obtém a informação que mostra:
Name
indica o nome do controlo, permitindo utilizar ao seu conteúdo (isto é, o valor mostrado) numa expressão, macro ou num procedimento.
Exemplo: As propriedades de um dos controlos da

Para facilitar a edição de formulários, o Access disponibiliza uma barra de ferramentas (
View, Toolbox):
O botão
Select Objects [Seleccionar objectos] activa um apontador que permite seleccionar (por exemplo, para ver as propriedades), mover, alterar tamanho e editar objectos num formulário. O botão Control Wizards [Assistentes de controlos] liga/desliga os assistentes de controlos. A utilização de assistentes na construção de controlos é particularmente útil porque facilita as tarefas de lhes associar comportamentos, como procura de registos, abertura de formulários, etc. De outra forma, esses comportamentos só poderiam ser definidos usando macros e procedimentos em Visual Basic.Para inserir um novo controlo clicar no botão respectivo e seleccionar, arrastando, a zona do formulário onde o controlo deverá ser colocado.
O seguinte formulário (tipo columnar) apresenta alguns destes controlos:

A seguir alguns dos controlos utilizado no formulário
alunos serão analisados em pormenor. Caixa de Texto para NomeConsideremos a caixa de texto que contém o nome do aluno. A caixa de texto é identificada por nome (é o nome deste controlo) e está ligada ao campo
nome da tabela alunos (ver propriedades deste controlo). Assim, se o utilizador tiver um registo em branco (não preenchido) e digitar um nome, esse nome seá introduzido na tabela.Neste caso a fonte de informação (Control Source
) é associada a um campo da tabela alunos. Noutras circunstâncias a caixa de texto podia ser conectada à uma expressão, ou alternativamente ficar não ligada (para permitir ao utilizador digitar informação que não é armazenada).Propriedades de controlo tipo "Text Box" para "nome":

Suponha que o nome de aluno já foi preenchido, mas falta escrever os restantes dados. A introdução da turma pode ser feita através uma Combo Box, pois há um número limitado de alternativas. O seguinte quadro mostra o que se pretende obter:

Uma Combo Box pode ser construida com o auxílio de um wizard ou não. Aqui exemplificamos a sua criação manual. Para garantir que isso aconteça, deve ligar o controlo ao campo apropriado da tabela (campo
Turma) especificando o Control Source. As opções (tp1; tp2 etc,) devem ser introduzidas no Row Source de propriedades:
Como para a
Combo Box, também os Option Group podem ser construidos com um wizard. Nesta secção consideramos várias alternativas para mostrar o número limitado e pré-definido de valores no formulário.Suponha que pretende armazenar informação sobre o tipo de avaliação em que os alunos foram avaliados. Actualmente considere três possibilidades de avaliação, mutuamente exclusivas: testes, exame final ou exame oral.
Primeiro consideramos algumas alternativas que não envolvem o grupo de opções. Uma possibilidade, é utilizar uma Combo Box com duas colunas:
|
|
|
Uma outra possibilidade seria armazenar esta informação num campo tipo
Text com uma regra de validação apropriada, por exemplo: IN("Testes";"Exame";"Oral").No entanto, a solução com o grupo de opções é mais apropriada. Assim, deverá associar a cada opção um código, por exemplo
1 para "Testes", 2 para "Exame" e 3 para "Oral". Num grupo cada opção é apresentada por controlos que poderão ser Check Box, Option Button ou Toggle Button. O efeito é que assim será possível escolher só uma das diferentes alternativas. Considere, por exemplo, a seguinte solução que envolve o uso de Option Buttons.
|
|
|
Para criar um grupo de opções deste tipo, em primeiro lugar é criado o enquadramento, arrastando-o para o formulário da ferramenta.
Posteriormente são acrescentadas as opções, arrastando o controlo desejado (ex. Option Button), para dentro da caixa do enquadramento.
Ao acrescentar uma opção, à propriedade
Option Value deste controlo é atribuído um número sequencial. A figura seguinte mostra as propriedade de Button1. O Option Value deste botão é 1. Quando o controlo é selecionado, o grupo de opções retorna o valor de OptionValue deste controlo.
Ao escolher uma opção, ao campo da tabela ligada fica atribuído o valor de parâmetro Option Value do controlo escolhido. Assim ao campo avaliação fica atribuido o valor 1 se o utilizador escolher o botão testes; o valor 2, se escolher o botão exame, etc.
Suponha que se pretende calcular o total de todos os valores que aparecem no campo
valor:
Para atingir este fim, deveria criar uma caixa de texto, cujo fonte de informação (
Control Source) deveria ser uma expressão, que neste caso é =Sum([valor]):
Os campos que aparecem na expressão ligada ao controlo que efectua a operação sobre um conjunto de registos, deverão ser campos da fonte de registos (Tabela ou Query) (isto é, não controlos calculados no formulário).
Criação de Main/SubformComo já foi dito atrás é frequentemente necessário obter informação que não se encontra em apenas uma tabela. Para isso podemos criar uma query que envolva as várias tabelas pelas quais os campos desejados se encontram distribuidos e usar um formulário para visualizar os resultados da execução dessa query. Alternativamente podemos usar o mecanismo de formulário principal/subformulário (main/subform).

Por exemplo, suponhamos que queremos ver as várias notas de cada aluno usando um formulário do tipo formulário principal/subformulário. Para criar um formulário deste tipo usamos o FormWizard: cria-se um formulário (comando
New no separador Forms) e selecciona-se a opção FormWizard, como se pode ver na figura. Note-se que não é necessário indicar a tabela/query de onde os dados são obtidos.Em seguida acrescentar os campos desejados das várias tabelas/queries aos campos seleccionados (
Selected Fields). Neste caso, acrescentamos os campos número e nome da tabela Alunos e os campos disciplina, nota e lançamento da tabela Notas, como se pode ver nas figuras que se seguem.

É importante notar que tem que existir um relacionamento 1:N entre as tabelas/queries envolvidas para que o wizard funcione correctamente. Se tal não fôr verdade, o Access não será capaz de detectar que se pretende criar um formulário do tipo formulário principal/subformulário. Para dar a volta a este problema pode-se usar o controlo subform (ver Controlo subform).
Em seguida dado que vamos visualizar informação de mais do que uma tabela, é necessário indicar a forma como queremos que essa informação seja organizada. Neste caso, como temos informação sobre alunos e notas, a questão será: queremos ver as notas de cada aluno ou os alunos de cada nota? A resposta é, obviamente, a primeira. Assim, a informação deve ser organizada por aluno (
by Alunos), como se pode ver na figura.
Em caso de dúvida deve-se experimentar as várias alternativas, podendo-se antever no lado direito da janela o aspecto do formulário em criação.
Na mesma janela é ainda possível escolher entre ver toda a informação numa só janela (
Form with subform(s)) ou em várias (Linked forms). Escolhendo esta última, é criado um botão no formulário principal que dá acesso ao subformulário. Naturalmente, neste subformulário serão apresentados registos da tabela/query respectiva que estejam relacionados com o registo mostrado no principal. Isto é, no exemplo dado, se estivermos a visualizar o registo do aluno de nome António, clicando no botão serão apresentadas as suas notas. Mais uma vez, é possível antever o resultado da opção seleccionada.Nas duas caixas de diálogo seguintes são apresentadas opções relativas ao aspecto gráfico do formulário. Finalmente, na última caixa de diálogo podemos dar nome aos formulários criados, resultando no formulário apresentado na figura.

Note-se que são criados 2 formulários, um com os dados da tabela
Alunos e outro com os dados da tabela Notas. No formulário principal o wizard insere um controlo que vai estar ligado ao subformulário. Podemos ver a forma como são ligados acedendo às propriedades do subformulário, mostradas na figura seguinte.
O campo
Outra forma de acrescentar subformulários a formulários já existentes é usando o wizard do controlo
subform.Supondo a existência de uma query que nos indique as disciplinas que faltam fazer a cada aluno, chamada
disciplinas por fazer, para juntarmos essa informação ao formulário criado atrás devemos primeiro entrar na design view do formulário principal. Em seguida criar um controlo do tipo Subform/Subreport como explicado atrás para os outros controlos. Em seguida podemos seleccionar se queremos acrescentar um formulário já existente (Forms) ou criar um formulário novo a partir de uma tabela/query (Table/Query).
Depois seleccionamos os campos que desejamos incluir no subformulário. Note-se que é necessário incluir o campo número que permitirá a seguir fazer a ligação ao formulário principal.

É então apresentada uma caixa de diálogo onde nos é pedido para identificar a ligação entre a tabela/query do formulário principal e a escolhida para o subformulário. No caso do Access detectar a existência de um relacionamento entre elas, apresenta uma sugestão (
Choose from list). Caso contrário, será preciso indicar (Define my own) um ou mais campos no formulário principal (Form/report fields) que farão a ligação com campos correspondentes indicados para o subformulário (Subform/subreport fields). Neste caso foi detectada a ligação correcta.
Finalmente dá-se um nome ao subformulário e o resultado é apresentado. É conveniente alterar a apresentação do formulário de forma a que o número do aluno não apareça repetido.
