Você está na página 1de 106

Apontamentos de SGBD Parte II

Cap 1. PARTE II.- IMPLEMENTAÇÃO DE UMA BD NO MS ACCESS

Tutorial 1.- INTRODUÇÃO AO AMBIENTE MS ACCESS


Objectivos: O OBJECTIVO DESTE TUTORIAL É INTRODUZIR AS BASES DE DADOS RELACIONAIS E APRESENTAR O MS ACCESS
COMO UM SISTEMA DE GESTÃO DE BASES DE DADOS RELACIONAIS, DESCREVENDO DUMA FORMA SUPERFICIAL AS
SUAS FUNCIONALIDADES .

1.1.- ENQUADRAMENTO NAS BASES DE DADOS RELACIONAIS


O MS Access é um Sistema de Gestão de Bases de Dados Relacionais desenhado
especificamente, como tal, para gerir informação organizada em Tabelas. Para perceber o significado
desta afirmação torna-se necessário conhecer uma série de termos que passaremos a descrever.

1.1.1.- CONCEITO DE BASE DE DADOS


Uma Base de Dados (BD) pode ser definida como uma colecção unificada de dados
relacionados, armazenada num sistema computarizado, acessível através de programas de aplicação e
destinada a ser partilhada, em modo concorrente ou esclusivo, por todos os indivíduos autorizados de
uma determinada organização.
Podemos considerar como exemplo de uma BD a colecção de dados, sobre os Cursos,
Disciplinas, Docentes, Alunos e Inscrições, mantida pelos Serviços Académicos de uma hipotética
Instituição de Ensino Superior

1.1.2.- CONCEITO DE BASE DE DADOS RELACIONAL


Uma BD Relacional (BDR) é uma BD baseada no Modelo de Dados Relacional desenvolvido
por E.F. Codd. Este modelo baseia-se numa estrutura de dados simples e uniforme chamada Relação,
que pode ser visualizada sob o formato de uma Tabela, onde cada linha representa uma colecção de
valores, de Atributos, relacionados de uma entidade do mundo real. Dessa forma podemos definir uma
BDR como um colecção de Relações contendo toda a informação (dados e associações existentes
entre eles) de interesse para a BD.

1.1.3.- CONCEITO E ESTRUTURA DE UMA TABELA


Matematicamente uma Relação define-se da forma seguinte:
Dado n conjuntos, D1, D2, ..., Dn, R é uma relação sobre estes conjuntos, se R é um conjunto
ordenado de m tuples da forma (d1, d2, ..., dn) onde d1 é um elemento de D1, d2, um elemento de D2,
..., e dn é um elemento de Dn. D1, D2, ..., Dn são chamados domínios de R.

2000 J Artur Vale Serrano, Carlos Carvalhal 1


Apontamentos de SGBD Parte II

O significado desta definição é mais facilmente compreensível quando descrita através de um


diagrama, como o apresentado na Figura 1. Nesta figura temos 4 domínios. O domínio D1 é um
conjunto de números inteiros; D2 é um conjunto de nomes de pessoas; D3 é um conjunto de
indentificadores de sexo; e D4 é um conjunto de datas. A Relação apresentada nesta figura tem 5
tuples. Cada tuple é constituído por 4 elementos extraídos de cada um dos domínios. Notar que a
ordem dos elementos nos tuples é importante; o 1º elemento de todos os tuples vem do domínio D1; o
2º elemento de todos os tuples de D2; e assim sucessivamente.
Domínio D1 Domínio D2 Domínio D3 Domínio D4

17651 Maria Antunes 20/03/1970


18432 F
José Teixeira M 11/12/1975 13/01/1965
Ana Bessa
19987 20123 M
F 27/05/1972
Manuel Oliveira
22220 F 06/02/1978
Cristina Cruz

17651 Maria Antunes F 20/03/1970

18432 José Teixeira M 13/01/1965

19987 Manuel Oliveira M 11/12/1975 Relação

Tuple 20123 Ana Bessa F 27/05/1972

22220 Cristina Cruz F 06/02/1978

Figura 1.- Uma Relação do ponto de vista matemático.

A Figura 2 apresenta esta mesma Relação na perspectiva do processamento de dados. Nela


verifica-se que os 4 domínios da Figura 1 foram relacionados com 4 características (atributos) duma
entidade real, o Aluno: N.º Mecanográfico, Nome, Sexo e Data de Nascimento. A Relação é agora
representada por uma Tabela, ou ficheiro, sendo os seus tuples as linhas desta Tabela, ou registos do
ficheiro, recebendo cada cabeçalho de coluna a designação de atributo, ou campo de registo.
Ao longo deste documento os conjuntos de termos {Relação, Tabela, Ficheiro}, {Tuple, Linha,
Registo} e {Atributo, Coluna, Campo} serão usados duma forma indistintiva.
Uma tabela pode ser apresentada quer do ponto de vista de processamento de dados (Figura 2),
quer do ponto de vista estrutural (Figura 3), podendo-se neste último caso recorrer-se ainda à
representação analítica: Aluno(Nº Mec, Nome, Sexo, DataNasc, RefCódCurso).

2000 J Artur Vale Serrano, Carlos Carvalhal 2


Apontamentos de SGBD Parte II

Atributo (Coluna ou Campo)


Aluno
Nº Mec Nome Sexo Data Nasc

17651 Maria Antunes F 20/03/1970

18432 José Teixeira M 13/01/1965


Relação
(Tabela ou Ficheiro)
19987 Manuel Oliveira M 11/12/1975
Tuple
20123 Ana Bessa F 27/05/1972
(Linha ou Registo)
22220 Cristina Cruz F 06/02/1978

Figura 2.- Uma Relação na perspectiva do processamento de dados.

1.1.4.- CONCEITOS DE CHAVE CANDIDATA E CHAVE PRIMÁRIA


Uma Chave Candidata é um Atributo ou um conjunto de Atributos que identificam duma forma
única um tuple numa Relação. Sendo a Chave Primária uma Chave Candidata usada
preferencialmente na identificação dos registos duma Tabela. As Chaves Candidatas são também
designadas Campos Identificadores (por uma razão obvia), sendo os restantes Atributos da Tabela
designados Campos Descritores. No caso da Tabela Aluno representada na Figura 3 é evidente que a
única Chave Candidata que temos é o Nº Mec (todos os restantes Atributos podem, eventualmente, ser
repetidos), sendo portanto esta a Chave Primária. As Chaves Primárias serão assinaladas, nas
estruturas das tabelas, sublinhando os atributos que a constituem.

1.1.5.- LIGAÇÃO ENTRE TABELAS E CONCEITO DE CHAVE ESTRANGEIRA


Quando os campos de 2 tabelas diferentes tomam valores oriundos do mesmo conjunto, pode ser
efectuada uma operação de ligação para assim ser possível seleccionar registos relacionados nas 2
tabelas por comparação dos valores destes campos. É possível interligar múltiplas tabelas através de
múltiplos campos.
Consideremos, por exemplo, as tabelas Aluno e Curso, interligadas através do atributo CódCurso,
conforme representado na Figura 3. A tabela da qual parte a ligação recebe o nome de Tabela
Principal e a Tabela destino o nome de Tabela Relacionada. A origem duma ligação tem de ser sempre
Chave Primária da Tabela Principal, recebendo o atributo alvo o nome de Chave Estrangeira. Por uma
questão de legibilidade, e sempre que possível, o nome das Chaves Estrangeiras serão obtidos pela
junção do prefixo Ref com o nome da Chave Primária que se encontra do outro lado da ligação. Assim
para o caso representado na Figura 3 a Chave Estrangeira recebe o nome de RefCódCurso.

2000 J Artur Vale Serrano, Carlos Carvalhal 3


Apontamentos de SGBD Parte II

Aluno
Curso
Nº Mec
CódCurso
Nome
DesigCurso
Sexo
Grau
Data Nasc
Duração
RefCódCurso

Figura 3.- Ligação entre as tabelas Aluno e Curso.

1.2.- PAPEL DESEMPENHADO PELOS SISTEMAS DE GESTÃO DE BASES DE DADOS


Um Sistema de Gestão de Bases de Dados (SGBD) é um pacote de software responsável pela
organização, armazenamento, recuperação, segurança e integridade dos dados nas Bases de Dados,
implementando a interface entre esta e o utilizador, tornando assim as Bases de Dados facilmente
acessíveis por parte dos utilizadores. Dessa forma os SGBDs devem entre outras coisas:
Ä Fornecer as ferramentas necessárias para criar, corrigir, inquirir e actualizar os dados da
Base de Dados.
Ä Permitir o acesso concorrente entre múltiplos utilizadores assim como também limitar o
acesso aos utilizadores autorizados.
Ä Garantir que os dados não serão corrompidos ou perdidos por factores tais como erros do
utilizador ou bloqueios do sistema.
Um SGBD Relacional (SGBDR) é um SGBD desenhado especificamente para gerir informação
que está organizada em Tabelas.

1.3.- APRESENTAÇÃO DO MS ACCESS


O MS Access é um SGBDR desenvolvido pela Microsoft para correr no ambiente Windows

1.3.1.- A JANELA DE APLICAÇÃO DO MS ACCESS


Quando inicializamos o MS Access, o MS Windows mostra a Janela de Aplicação do MS
Access (JAplAccess), representada na Figura 4. Torna-se necessário compreender o seu
funcionamento para assim ser capaz de utilizá-la eficientemente na criação, manutenção e utilização
das BDs.
8 A partir deste ponto torna-se necessário ter presente a BD de exemplos Nortwind,
para o que é necessário inicializar o MS Access e abrir a BD Nortwind (é provável que a sua
path seja C:\Program Files\Microsoft Office\Office\Samples\Nortwind).

2000 J Artur Vale Serrano, Carlos Carvalhal 4


Apontamentos de SGBD Parte II

Figura 4.- Janela de Aplicação do MS Access.

Nesta janela é possível distinguir 5 áreas operacionais:


Ä Barra de Título: Identifica a aplicação, e no caso das janelas de trabalho estarem
maximizadas, identifica também a BD e o objecto que está em uso. Está dotada dos botões de
controlo de janela habituais do MS Windows.
Ä Barra de Menus (Menu Bar): Fornece uma série de menus que nos permitem
executar todas as operações disponíveis sobre a BD (criar uma nova BD, abrir uma BD já
existente, importar/exportar objectos, criar novos objectos, editar objectos já existentes, etc.).
Os menus por ela disponibilizados e as opções que cada um destes apresenta depende do
contexto em que a aplicação se encontra em cada momento.
Ä Barra de Ferramentas (Toolbar): Contem um conjunto de ícones que permitem
um acesso mais rápido a determinadas funções que também existem em forma de opções nos
menus. Tal como acontece com a Barra de Menus os ícones por ela apresentados dependem
do contexto em que a aplicação se encontra. Esta barra de ferramentas é configurável, sendo
possível acrescentar, alterar ou eliminar os seus ícones originais.
Ä Barra de Estado (Status Bar): Nesta área o MS Access apresenta informação de
ajuda sobre a operação que está a ser executada no momento, bem como sobre a utilização
das teclas Caps Lock, Num Lock e Scroll Lock. É extremamente útil e aconselhável prestar
atenção às mensagens que nela aparecem.

2000 J Artur Vale Serrano, Carlos Carvalhal 5


Apontamentos de SGBD Parte II

Ä Área de Trabalho: É neste local que aparecerão os diferentes objectos que


constituem a BD (tabelas, formulários, inquéritos, relatórios, macros e módulos) bem como
as suas especificações, representadas por janelas próprias. Se não tivermos nenhuma BD
aberta está área estará vazia, caso contrário conterá a Janela da Base de Dados (JBD).

1.3.1.1.- JANELA DA BASE DE DADOS


É a partir da Janela da Base de Dados (JBD), que só aparece depois de se abrir ou criar uma
nova BD, que o utilizador trabalha com a BD, criando e gerindo os objectos que a integram. Uma BD
do MS Access contem todos os objectos relativos à mesma e que, como podemos verificar pela Figura
4, podem ser de 7 categorias: Tabelas (Tables), Inquéritos (Queries), Formulários (Forms), Relatórios
(Reports), Macros, Módulos (Modules) e Páginas de Accesso aos Dados (Pages). Destas 7 catégorias
de objectos só estudaremos, neste curso, as primeiras 5.
Na JBD os objectos que constituem a BD estão organizados por categoria, bastando, para
visualizar a lista dos objectos de uma determinada categoria, clicar sobre o botão correspondente à
categoria de objecto pretendida. Uma vez feito isso é possível criar um novo objecto, clicando no
ícone New da Toolbar da JBD, editar um objecto já existente, clicando no ícone Design da Toolbar da
JBD, utilizar um objecto, clicando no ícone Open da JBD, remover e alterar o nome de um objecto,
etc.
Para algumas categorias de objectos aparece juntamente com a lista dos objectos uma série de
itens que permitem acelerar o processo de criação. Para o caso das Tabelas, p.ex., temos os itens:
Ä Create Table in Design View: que permite criar uma Tabela sem ajuda.
Ä Create Table by using Wizard: que permite criar uma Tabela usando o auxiliar.
Ä Create Table by Entering Data: que permite criar uma Tabela com base num exemplo dos
dados que se pretendem armazenar nela.
8 Para verificar o que foi dito no paragrafo anterior, seleccionar na JBD o ícone
Tables.

1.3.2.- MANIPULAÇÃO DE TABELAS


Os objectos Tabela do MS Access materializam o conceito de Relação/Tabela do Modelo de
Dados Relacional, atrás descrito.
A criação de uma BD começa com a descrição da Tabela ou das Tabelas que vão ser necessárias
para armazenar a informação da BD. A criação de uma Tabela é feita através da descrição das
colunas, ou campos, que vão ser usados por esta para armazenar a informação pretendida. A Figura 5

2000 J Artur Vale Serrano, Carlos Carvalhal 6


Apontamentos de SGBD Parte II

apresenta a Tabela Orders em Modo de Desenho, no qual é possível introduzir os seus diferentes
atributos e para cada atributo assinalar as suas propriedades.
8 Para ver a Tabela Orders em Modo de Desenho executar na JBD a sequência de
comandos: Tables → Orders → Design.

Figura 5.- Tabela Orders em Modo de Desenho.

Uma vez descritas as colunas das Tabelas passa-se à fase de introdução dos dados, linha a linha,
ou registo a registo. Os dados podem ser introduzidos directamente numa Tabela recorrendo ao Modo
de Processamento ou indirectamente usando formulários. A Figura 6 apresenta a Tabela Oders em
Modo de Processamento.
8 Para ver a Tabela Orders em Modo de Processamento executar na JBD a sequência
de comandos: Tables→ Orders → Open.

Figura 6.- Tabela Orders em Modo de Processamento.

2000 J Artur Vale Serrano, Carlos Carvalhal 7


Apontamentos de SGBD Parte II

1.3.3.- MANIPULAÇÃO DE INQUÉRITOS


Um Inquérito não é mais do que uma pergunta que é feita à BD, p.ex., “Quais as Encomendas de
cada Cliente?”. Para fazer uma pergunta à BD é necessário descrever o Inquérito duma forma
detalhada através da criação de um objecto Inquérito. A construção de um objecto Inquérito pode ser
feito duma forma gráfica, Modo de Desenho, ou duma forma analítica descrevendo o Inquérito usando
a linguagem SQL (Simple Query Language), Modo de Desenho SQL. A Figura 7 apresenta o
Inquérito Orders Qry em Modo de Desenho Gráfico e a Figura 8 em Modo de Desenho SQL.
8 Para ver o Inquérito Orders Qry em Modo de Desenho Gráfico executar na JBD a
sequência de comandos: Queries → Orders Qry → Design. Para visualizá-lo em Modo de Desenho
SQL, estando no Modo de Desenho Gráfico, executar, na Menu Bar, a sequência de
comandos: View → SQL View.

Figura 7.- Inquérito Orders Qry em Modo de Desenho Gráfico.

Figura 8.- Inquérito Orders Qry em Modo de Desenho SQL.

Uma vez elaborado o inquérito podemos finalmente fazer a pergunta (executar o Inquérito),
obtendo assim o resultado apresentado na Figura 9, o Inquérito Orders Qry em Modo de Processamento.
8 Para visualizar o Inquérito Orders Qry em Modo de Processamento executar na
JBD a sequência de comandos: Queries → Orders Qry → Open.
Também é possível utilizar os Inquéritos para alterar os dados da própria BD (construir novas
Tabelas e inserir, remover e alterar registos nas Tabelas), são os chamados Inquéritos Acção (Action
Queries) que serão descritos oportunamente.

2000 J Artur Vale Serrano, Carlos Carvalhal 8


Apontamentos de SGBD Parte II

Figura 9.- Inquérito Orders Qry em Modo de Processamento.

1.3.4.- MANIPULAÇÃO DE FORMULÁRIOS


A introdução dos dados directamente nas Tabelas é uma tarefa pouco agradável, difícil e em
algumas situações, quando temos Tabelas relacionadas, muito complicada. Para fazé-lo é mais
conveniente recorrer aos Formulários. Esta categoria de objecto permite introduzir, visualizar e
imprimir informação oriunda de Tabelas e Inquéritos. Podem ser construídos duma forma simples e
rápida recorrendo aos auxiliares. A Figura 10 apresenta o Formulário Orders em Modo de Desenho e a
Figura 11 em Modo de Processamento. No Modo de Desenho é possível elaborar o aspecto gráfico
que o Formulário apresentará e quais os tipos de controlos gráficos que associados aos diferentes
atributos da Tabela ou Inquérito a partir do qual foi construído o Formulário. No Modo de
Processamento é possível manipular (inserir, alterar e remover), duma forma amigável, os registos da
Tabela ou Inquérito que está por trás do Formulário.
8 Para visualizar o Formulário Invoice em Modo de Desenho executar na JBD a
sequência de comandos: Forms → Orders → Design. Para visualizá-lo em Modo de Processamento
executar na JBD a sequência de comandos: Forms → Orders → Open.

2000 J Artur Vale Serrano, Carlos Carvalhal 9


Apontamentos de SGBD Parte II

Figura 10.- Formulário Orders em Modo de Desenho.

Figura 11.- Formulário Orders em Modo de Processamento.

1.3.5.- MANIPULAÇÃO DE RELATÓRIOS


Apesar de ser possível imprimir a informação apresentada por uma Tabela, um Inquérito ou
mesmo um Formulário executando simplesmente o comando File → Print, é possível construir
Relatórios, uma outra categoria de objectos do MS Access, para organizar, sumarizar e formatar
convenientemente esta informação. A Figura 12 apresenta o Relatório Invoice em Modo de Desenho.
Apesar dos Relatórios serem objectos destinados à impressão é possível visualizar no monitor uma
versão do Relatório acedendo ao seu Modo de Visualização. Quando isso é feito o MS Access mostra
uma janela de print preview que mostra como cada página do Relatório aparecerá quando este for
imprimido. A Figura 13 apresenta o Relatório Invoice em Modo de Visualização.
8 Para visualizar o Formulário Invoice em Modo de Desenho executar na JBD a
sequência de comandos: Reports → Invoice → Design. Para visualizá-lo em Modo de Visualização
executar na JBD a sequência de comandos: Reports → Invoice → Preview.

2000 J Artur Vale Serrano, Carlos Carvalhal 10


Apontamentos de SGBD Parte II

Figura 12.- Relatório Invoice em Modo de Desenho.

2000 J Artur Vale Serrano, Carlos Carvalhal 11


Apontamentos de SGBD Parte II

Figura 13.- Relatório Invoice em Modo de Visualização.

1.3.6.- MANIPULAÇÃO DE MACROS


Os objectos Macro são uma sequência de comandos destinados a serem executados
automaticamente assim que está seja executada. Este tipo de objectos estão usualmente associados aos
Formulários. A Figura 14 apresenta um exemplo duma Macro (Customers), em Modo de Desenho,
destinada a efectuar tarefas de validação de dados introduzidos pelo utilizador e actualização da
informação apresentada pelos controlos de um Formulário.
8 Para visualizar a Macro Customers em Modo de Desenho executar na JBD a
sequência de comandos: Macros → Customers → Design.

2000 J Artur Vale Serrano, Carlos Carvalhal 12


Apontamentos de SGBD Parte II

Figura 14.- Macro Customers em Modo de Desenho.

2000 J Artur Vale Serrano, Carlos Carvalhal 13


Apontamentos de SGBD Parte II

Tutorial 2.- DESCRIÇÃO DO PROBLEMA


Objectivos: NESTE TUTORIAL SERÁ DESCRITO O PROBLEMA A DESENVOLVER AO LONGO DO CURSO, UMA BASE DE DADOS PARA
OS SERVIÇOS ACADÉMICOS DE UMA INSTITUIÇÃO DE ENSINO SUPERIOR, BAPTIZADA COM A DESIGNAÇÃO
BDSERVACAD. UMA VEZ DEFINIDOS OS REQUISITOS QUE ESTA BD DEVE CUMPRIR PASSAR-SE-Á À IMPLEMENTAÇÃO
DE UMA DAS TABELAS, A TABELA ALUNO, ACOMPANHADA PELA DESCRIÇÃO DOS DIFERENTES TIPOS DE DADOS,
DISPONIBILIZADOS PELO MS ACCESS, E SUAS PROPRIEDADES .

2.1.- APRESENTAÇÃO DA BD A DESENVOLVER: A BDSERVACAD


Pretende-se implementar uma Base de Dados (BD) para ser usada pelos Serviços Académicos
da Universidade de Aveiro, a qual vai passar a ser designada BDServAcad.
A estrutura desta BD deve permitir:
Ä Armazenar todos os dados referentes aos Alunos: Número Mecanográfico, Nome,
Residência, Localidade, Código Postal, Telefone, Sexo, Data de Nascimento, Regime
(Ordinário, Trabalhador/Estudante, Atleta de Alta Competição ou Militar), Data de
Matrícula, Código do Curso e lista das Inscrições efectuadas pelos Alunos nas Disciplinas,
indicando para cada o Tipo de Inscrição (Normal, Recurso ou Melhoria de Nota), o Ano
Lectivo, a Nota obtida e a Data na qual esta foi lançada.
Ä Armazenar todos os dados referentes aos Cursos: Código do Curso, Nome, Designação
do Curso, Grau (Licenciatura ou Bacharelato), Duração (3 ou 5 anos) e lista das Disciplinas
leccionadas no Curso com indicação do Ano Curricular no qual são leccionadas.
Ä Armazenar todos os dados referentes às Disciplinas: Código da Disciplina, Designação
da Disciplina, N.º de Créditos, Semestre (1º, 2º ou Anual) e Código do Docente.
Ä Armazenar todos os dados referentes aos Docentes: Código do Docente e Nome do
Docente.
Para o que é necessário ter em consideração os seguintes aspectos:
Ä Cada Aluno pertence sempre a um Curso e cada Curso pode ter mais do que um Aluno,
podendo haver Cursos sem Alunos.
Ä Cada Curso é formado sempre por uma ou várias Disciplinas e cada Disciplina é sempre
leccionada a um ou vários Cursos.
Ä Cada Disciplina é sempre leccionada por um Docente e cada Docente pode leccionar várias
Disciplinas, podendo haver Docentes que não leccionem Disciplina Alguma.
Ä Cada Alunos tem sempre uma ou várias Inscrições e cada Inscrição diz sempre respeito a
um único Aluno.

2000 J Artur Vale Serrano, Carlos Carvalhal 14


Apontamentos de SGBD Parte II

Ä Cada Inscrição envolve sempre uma Disciplina e cada Disciplina pode ser envolvida em
vários Inscrições, podendo haver Disciplinas sem Inscrições.
Ä A cada Inscrição, uma vez feita a avaliação, é atribuída uma Nota e cada Nota diz sempre
respeito a uma Inscrição.
Sobre esta BD pretende-se:
Ä Construir Queries que permitam:
v Listar os dados dos Alunos agrupados pela Designação do Curso e ordenados pelo
Nome.
v Listar os dados dos Alunos do sexo feminino com pelo menos 18 anos de idade e os do
sexo masculino com no máximo 18 anos de idade.
v Listar os dados dos Alunos dum dado Curso que tenham nascido num determinado
período.
v Contabilizar, para cada Curso, o número de Alunos do sexo masculino com no máximo
18 anos de idade e os do sexo feminino com pelo menos 18 anos de idade.
v Contabilizar o número de Alunos de cada sexo por Curso.
v Construir uma Tabela que combine os dados contidos nas Tabelas Aluno e Curso.
v Remover os Alunos com menos de 18 anos da Tabela Backup Aluno.
v Adicionar à Tabela Backup Aluno os Alunos com no máximo 18 anos de idade.
v Passar para maiúscula a Designação dos Cursos.
Ä Construir Forms que permitam:
v Criar novos Cursos.
v Matricular novos Alunos.
v Introduzir novos Docentes.
v Introduzir novas Disciplinas.
v Atribuir Disciplinas aos Cursos
v Consultar os dados dum dado Aluno.
v Inscrever os Alunos nas Disciplinas.
v Fazer o lançamento das notas duma dada Disciplina.
v Remover um dado Aluno da BD.
Ä Construir Reports que permitam:
v Listar os Alunos inscritos nas diferentes Disciplinas.
v Apresentar a ficha de notas de cada um dos Alunos.

2000 J Artur Vale Serrano, Carlos Carvalhal 15


Apontamentos de SGBD Parte II

2.2.- CONSTRUÇÃO DE TABELAS NO MS ACCESS

8 Criar uma nova BD no MS Access e baptizá-la com o nome BDServAcad.

O MS Access disponibiliza 3 métodos para a criação de uma nova Tabela, conforme é possível
verificar na JBD representada na Figura 15. Estes métodos são:
Ä Create Table in Design View: Permite criar uma nova Tabela de raiz.
Ä Create Table by using Wizard: Permite criar uma nova Tabela usando um auxiliar. O
utilizador selecciona a Tabela que melhor se adapta ao pretendido de entre um conjunto de
Tabelas pré-definidas e apresentadas pelo auxiliar. Seguidamente é-lhe permitido escolher
os atributos necessários de entre a lista de atributos desta Tabela. E finalmente, é
possibilitado ao utilizador alterar o desenho da Tabela por forma a ajustá-la às suas
necessidades.
Ä Create Table by Entering Data: O MS Access cria a estrutura da Tabela a partir dum
exemplo dos dados que se pretendem armazenar.
As Tabelas usadas neste tutorial serão construídas de raiz, portanto usando o método Create
Table in Design View.

Figura 15.- Janela da Base de Dados com o separador Tables seleccionado.

8 Criar uma nova Tabela clicando duas vezes sobre o item Create Table in

Design View da JBD.

2000 J Artur Vale Serrano, Carlos Carvalhal 16


Apontamentos de SGBD Parte II

A Janela de Desenho de uma Tabela (JDesTab), representada na Figura 16 apresenta 3 regiões.


Na parte superior temos uma grelha, de 3 colunas, onde devem ser introduzidos os identificadores dos
Campos da Tabela (Field Name), o seu Tipo de Dados (Data Type) e, opcionalmente, uma descrição
(Description). A entrada do Tipo de Dados é feita por selecção através de uma Combo Box. Na
parte inferior esquerda da JDesTab temos a região (Field Properties) onde devem ser definidos os
valores das diferentes propriedades do Campo da Tabela que está a ser editado em cada momento. O
valor da maior parte destas propriedades é introduzido por selecção através de uma Combo Box,
através do Construtor de Expressões (Expression Builder), apresentado na Figura 17, ou ainda
através do Construtor de Input Masks, apresentado na Figura 18. E finalmente, no canto inferior
direito temos uma região onde é apresentada uma mensagem de ajuda sensível ao contexto. É
aconselhável prestar alguma atenção às mensagens nela exibida.

Figura 16.- Janela de Desenho de uma Tabela.

2000 J Artur Vale Serrano, Carlos Carvalhal 17


Apontamentos de SGBD Parte II

Figura 17.- Janela do Construtor de Expression.

Figura 18.- Janela do Construtor de Input Masks.

2.2.1.- UTILIZAÇÃO DOS DIFERENTES TIPOS DE DADOS


O Tipo de Dados dum atributo de uma Tabela determina o género de valores que pode ser
armazenado nesse campo. O MS Access suporta, entre outros, os 8 tipos de dados seguintes:
Ä Text: Um Campo deste Tipo de Dados permite armazenar texto ou combinação de texto e
números, assim como números sobre os quais não serão efectuados cálculos, tais como

2000 J Artur Vale Serrano, Carlos Carvalhal 18


Apontamentos de SGBD Parte II

números de telefone, que não ultrapassem o comprimento máximo de 255 caracteres. É o


tipo de dados por defeito do MS Access.
Ä Memo: Um Campo deste Tipo de Dados permite armazenar o mesmo que os campos do
tipo Text, sendo, neste caso, o comprimento máximo de 65535 caracteres.
Ä Number: Um Campo deste Tipo de Dados permite armazenar valores numéricos usados, ou
que possam vir a ser usados, em cálculos matemáticos.
Ä Date/Time: Um Campo deste Tipo de Dados permite armazenar valores de Data e Hora
compreendidos entre o ano 100 e o ano 9999.
Ä Currency: Um Campo deste Tipo de Dados permite armazenar valores numéricos decimais
com uma precisão de 15 dígitos à esquerda do separados decimal e de 4 dígitos do lado
direito. É apropriado para o armazenamento de valores monetários.
Ä AutoNumber: Um Campo deste Tipo de Dados permite armazenar valores numéricos
únicos e atribuídos pelo MS Access, duma forma sequencial (com incrementos de 1) ou
aleatória, sempre que é adicionado um novo registo à Tabela, não podendo ser alterado à
posteriori.
Ä Yes/No: Um Campo deste Tipo de Dados permite armazenar dados que só podem tomar os
valores Yes e No, podendo o Yes também ser indicado como True ou On e o No como False
ou Off.
Ä OLE Object: Um Campo deste Tipo de Dados permite armazenar um Objecto (tal como
um MS Excel Spreadsheet, um MS Word Document, uma imagem, som ou qualquer outro
tipo de dados binário) ligado a ou embutido em uma Tabela do MS Access.

2.2.2.- CONFIGURAÇÃO DAS PROPRIEDADES DOS CAMPOS


Cada um dos Tipos de Dados atrás descritos é caracterizado por uma série de propriedades, que
permitem configurar convenientemente um determinado Campo duma Tabela. Através destas
propriedades é possível:
Ä Configurar o espaço de disco ocupado por um Campo: Através da propriedade
FieldSize comum aos Campos do tipo Text, Number e AutoNumber. No caso dos Campos

do tipo Text é indicado o número máximo de caracteres que podem ser armazenados no
Campo. No caso dos Campos numéricos é possível escolher entre os tamanhos Byte
(0→255), Integer (-32768→32767), Long Integer (-2147483648→2147483648), Single
(-3.402823E38→-1.401298E-45 para valores negativos e 1.401298E-45→3.402823E38
para valores positivos) e Double (-1.79769313486231E308→-4.94065645841247E-324

2000 J Artur Vale Serrano, Carlos Carvalhal 19


Apontamentos de SGBD Parte II

para valores negativos e 1.79769313486231E308→4.94065645841247E-324 para valores


positivos).
Ä Formatar convenientemente a representação do valor de um Campo: Através da
propriedade Format comum a todos os Tipos de Dados com excepção do OLE Object. É
possível escolher o formato mais apropriado de entre os disponíveis para cada caso. Cada
formato é acompanhado dum exemplo suficientemente explicativo.
Ä Configurar o formato de entrada e armazenamento de um determinado Campo:
Através da propriedade Input Mask dos Campos do tipo Text, Number e Currency.
Ä Definir o número de casas decimais com que os valores dos Campos numéricos vão ser
apresentados: Através da propriedade Decimal Places dos Tipos de Dados Number e
Currency.

Ä Definir a designação pela qual o Campo vai ser apresentado ao utilizador: Através da
propriedade Caption comum a todos os tipos de dados.
Ä Sugerir um valor por defeito para o Campo: Através da propriedade Default Value
comum a todos os Tipos de Dados com excepção do AutoNumber e OLE Object. É possível
introduzir, como valor deste atributo, uma expressão o formula que devolva um valor.
Ä Validar os dados introduzidos no Campo: Através da propriedade Validation Rule
comum a todos os Tipos de Dados com excepção do Memo, AutoNumber e OLE Object.
Ä Apresentar uma mensagem de erro quando o valor introduzido no Campo for
inválido: Através da propriedade Validation Text comum a todos os Tipos de Dados com
excepção do Memo, AutoNumber e OLE Object. Sempre que se define uma Validation Rule
para um Campo deve-se definir também um Validation Text, caso contrário o utilizador
pode ficar ser saber a razão pela qual o valor que introduziu foram rejeitados.
Ä Marcar um Campo como sendo de preenchimento obrigatório: Através da propriedade
Required comum a todos os Tipos de Dados com excepção do AutoNumber.

Ä Tornar um Campo num índice: Através da propriedade Indexed comum a todos os Tipos
de Dados com excepção do Memo e OLE Object. Os valores dos Campos índice são mais
rapidamente ordenados e pesquisados, no entanto a sua actualização é mais lenta. Através
do valor “Yes (No Duplicates)” é possível garantir que não haverá duplicação nos
valores do Campo. Os restantes valores possíveis são “No” e “Yes (Duplicates OK)”.

2000 J Artur Vale Serrano, Carlos Carvalhal 20


Apontamentos de SGBD Parte II

2.2.3.- DEFINIÇÃO DE REGRAS DE VALIDAÇÃO


Uma Regra de Validação é uma expressão que o MS Access usa para avaliar os valores
introduzidos num Campo duma Tabela. Se o valor introduzido no Campo satisfizer a condição
imposta pela expressão, o MS Access aceita-o, caso contrário rejeita-o. É importante ter presente que
as Regras de Validação só são aplicadas às novas entradas e não às entradas existentes na Tabela antes
da sua definição. Na definição de Regras de Validação podem ser usados operadores lógicos {=, <, >,
<=, >=, <>, And, Or, Like (p.ex.: Like “??” significa que no campo em causa só pode ser

introduzidos 2 caracteres; Like “###” significa que o valor introduzido só pode usar 3 caracteres),
Between ... And ... (p.ex.: Between #1/1/1900# And #31/12/1900# obriga que o valor

introduzido seja uma data do ano 1900), In(...) (p.ex.: In (“O”, “T”, “A”, “M”, “D”) obriga
que o valor introduzido seja “O”, “T”, “A”, “M” ou “D”), etc.}, Caracteres Wildcard {? (representa um
caracter qualquer), # (representa um dígito qualquer), * (representa um caracter ou uma sequência de
caracteres), [aeiou] (representa um qualquer dos caracteres indicados entre os parêntesis), [!aeiou]
(representa um caracter qualquer que não os contidos entre parêntesis), [a-e] (representa um caracter
qualquer compreendido entre a e e), etc.} e funções do MS Access que devolvam um valor.

2.2.4.- DEFINIÇÃO DE INPUT MASKS


As Input Masks permitem definir um padrão que facilite a entrada dos dados e controle os
valores que o utilizador pode introduzir num Campo do tipo Text, Number e Currency, permitindo,
assim, uniformizar os valores introduzidos. O valor introduzido na propriedade Input Mask pode
conter 3 secções separadas pelo caracter “;” (p.ex.: !0000-000;0;_ seria o valor a introduzir na
propriedade Input Mask quando pretendemos definir uma Input Mask para a entrada do Código
Postal duma localidade no formato 3800-543). A primeira define a própria Input Mask, a segunda
toma o valor 0 se pretendermos armazenar os caracteres literais usados na definição da Input Mask e 1
no caso contrário e finalmente a terceira define qual o caracter que vai ser mostrado pelo MS Access
nas posições a preencher pelo utilizador. A Tabela 1 apresenta alguns dos caracteres usados na
definição de Input Masks e a Tabela 2 apresenta alguns exemplos úteis de Input Masks.

Caracter Descrição
0 Dígito obrigatório (não são aceites os sinais + e -).
9 Dígito não obrigatório (não são aceites os sinais + e -).
# Dígito ou espaço não obrigatório (os espaços são removidos antes da
gravação; são aceites os caracteres + e -).
L Letra obrigatória.
? Letra não obrigatória.
A Letra ou dígito obrigatório.

2000 J Artur Vale Serrano, Carlos Carvalhal 21


Apontamentos de SGBD Parte II

a Letra ou dígito não obrigatório.


& Qualquer caracter ou espaço obrigatório.
C Qualquer caracter ou espaço não obrigatório.
.,:;-/ Separador decimal e dos milhares, separadores de data e hora.
< Faz com que os caracteres à sua direita sejam convertidos em minúscula.
> Faz com que os caracteres à sua direita sejam convertidos em maiúscula.
! Faz com que os dados sejam mostrados na máscara da direita para a
esquerda em vez da esquerda para a direita, sendo, no entanto, a entrada
dos dados sempre feita da esquerda para a direita. Pode ser introduzido em
qualquer posição da máscara.
\ Faz com que o caracter que o segue seja mostrado como caracter literal
(p.ex.: \A é mostrado como A).
Tabela 1.- Caracteres usados na definição de Input Masks.

2000 J Artur Vale Serrano, Carlos Carvalhal 22


Apontamentos de SGBD Parte II

Input Mask Exemplos


(000) 000-0000 (206) 555-0248
(999) 999-9999 (206) 555-0248
( ) 555-0248
(000) AAA-AAAA (206) 555-TELE
#999 –20
2000
>L????L?000L0 VERDEGR339M3
MAI R 452B7
>L0L 0L0 T2F 8M4
00000-9999 98115-
98115-3007
>L<?????????????? Maria
Teresa
SSN 000-00-0000 SSN 555-55-5555
>LL00000-0000 DB51392-0493
Tabela 2.- Exemplos de Input Masks.

2.2.5.- CONSTRUÇÃO DA TABELA ALUNO


Construir a Tabela Aluno (NMec, Nome, Residência, Localidade, CódPostal,

Telefone, Sexo, DataNascimento, Regime, DataMatrícula), usando o método Create Table

in Design View, tendo em conta a informação contida na Tabela 3.

Atributo Data Type Properties


NMec Number Field Size: Integer; Required: Yes; Indexed: Yes
(No Duplicates)
Nome Text Field Size: 30; Required: Yes
Residência Text Field Size: 50; Required: Yes
Localidade Text Field Size: 20; Input Mask: >????????????????????
CódPostal Text Field Size: 7; Input Mask: 0000-000!
Telefone Text Field Size: 9; Input Mask: 000000000!
Sexo Text Field Size: 1; Validation Rule: “M” or “F”;
Validation Text: “Usar M para Masculino e F para
Feminino”; Required: Yes
DataNascimento Date/Time Format: Short Date; Default Value: Date()-
CVDate("1 January 16"); Validation Rule:
DateDiff("yyyy";[DataNascimento];Date())>=16;
Validation Text: “Só se aceitam alunos com mais
de 16 anos de idade!”
Regime Text Field Size:1; Validation Rule: In ("O"; "T"; "A";
"M"); Validation Text: "Usar O para Ordinário, T
para Trabalhador/Estudante, A para Atleta de Alta
Competição e M para Militar"; Required: Yes
DataMatrícula Date/Time Format: Short Date; Default Value: Date()
Tabela 3.- Atributos e Propriedades da Tabela Aluno.

2000 J Artur Vale Serrano, Carlos Carvalhal 23


Apontamentos de SGBD Parte II

Tutorial 3.- OBTENÇÃO DO MODELO RELACIONAL PARCIAL DA


BDSERVACAD
Objectivos: NESTE TUTORIAL SERÁ APRESENTADO O MODELO RELACIONAL PARCIAL DA BDSERVACAD CONSTITUÍDO SOMENTE
PELAS TABELAS ALUNO E CURSO. SEGUIDAMENTE, E APÓS A CONSTRUÇÃO DA TABELA CURSO E O ACRESCENTO DA
CHAVE ESTRANGEIRA, RESULTANTE DA LIGAÇÃO COM A TABELA CURSO, NA TABELA ALUNO, DEFINIR-SE-Á A
RELATIONSHIP EXISTENTE ENTRE ESTAS DUAS TABELAS.

3.1.- APRESENTAÇÃO DO MODELO RELACIONAL PARCIAL DA BDSERVACAD


Tendo presente a declaração de requisitos da BDServAcad descrita na secção 2.1 é fácil
verificar que teremos, na nossa BD, além da Relação Aluno(NMec, Nome, Residência,
CódPostal, Localidade, Telefone, Sexo, DataNascimento, Regime, DataMatrícula)
também a Relação Curso(CódCurso, Designação, Duração, Grau) e ainda que haverá uma
ligação entre estas 2 Relações, sendo Curso a Tabela Primária e Aluno a Tabela Relacionada. Dessa
forma há necessidade de incluir uma Chave Estrangeira na Tabela Aluno (o atributo RefCódCurso)
que faça referência à Tabela Curso (atributo CódCurso). Assim sendo, o Modelo Relacional Parcial da
BDServAcad será o definido na Tabela 4.
Ä Aluno(NMec, Nome, Residência, CódPostal, Localidade, Telefone, Sexo, DataNascimento, Regime,
DataMatrícula, RefCódCurso)
Ä Curso(CódCurso, Designação, Duração, Grau)
Ä Ligação: 1(CódCurso ∈ Curso) → 0|∞(RefCódCurso ∈ Aluno)

Tabela 4.- Modelo de Dados Relacional Parcial da BDServAcad.

A ligação estabelecida entre estas Tabelas deve ser tal que uma ocorrência da Tabela Curso
possa ser referenciada por mais do que um registo da Tabela Aluno (significado do ∞), podendo, no
entanto, não ser referenciada por nenhum (significado do 0), e uma ocorrência da Tabela Aluno
referenciará um e só um registo da Tabela Curso.

3.2.- IMPLEMENTAÇÃO DO MODELO RELACIONAL PARCIAL DA BDSERVACAD

Para implementar o Modelo de Dados Relacional definido na Tabela 4, no MS Access,


construiremos inicialmente a Tabela Curso, seguidamente alteraremos a estrutura da Tabela Aluno
por forma a introduzir nela o atributo RefCódCurso e finalmente ligaremos estas duas Tabelas.

3.2.1.- CONSTRUÇÃO DA TABELA CURSO DA BDSERVACAD

8 Construir a Tabela Curso(CódCurso, Designação, Duração, Grau), usando o


método Create Table in Design View, tendo em conta a informação contida no

2000 J Artur Vale Serrano, Carlos Carvalhal 24


Apontamentos de SGBD Parte II

Atributo Data Type Properties


CódCurso Number Field Size: Integer; Caption: Código do Curso;
Required: Yes; Indexed: Yes (No Duplicates)
Designação Text Field Size: 50; Required: Yes; Indexed: Yes (No
Duplicates)
Duração Number Field Size: Byte; Default Value: 5; Validation
Rule: In(3;4;5); Validation Text: Os Cursos têm
duração de 3, 4 ou 5 anos!; Required: Yes
Grau Text Field Size: 1; Input Mask: >L; Default Value:
“L”; Validation Rule: “L” or “B”; Validation
Text: Usar "L" para Licenciatura e "B" para
Bacharelato!; Required: Yes

Quadro 1. Atributos e Propriedades da Tabela Curso.

3.2.2.- ALTERAÇÃO DA TABELA ALUNO DA BDSERVACAD

8 Acrescentar o atributo RefCódCurso à Tabela Aluno, conforme indicado no


Quadro 2. Ter em consideração que como estamos a introduzir um Campo obrigatório
nesta Tabela haverá necessidade de remover inicialmente todos os Registos nela
existentes, pois, uma vez introduzido o novo Atributo, estes Registos violarão as Regras
de Integridade Contextual.

Atributo Data Type Properties


NMec Number Field Size: Integer; Caption: Nº Mecanográfico;
Required: Yes; Indexed: Yes (No Duplicates)
Nome Text Field Size: 30; Required: Yes
Residência Text Field Size: 50; Required: No
Localidade Text Field Size: 30; Input Mask:
>L?????????????????????????????; Required: Yes
CódPostal Text Field Size: 8; Input Mask: 0000-000;0;_; Caption:
Código Postal; Required:Yes
Telefone Text Field Size: 9; Input Mask: 000\ 000000;1;_
Sexo Text Field Size: 1; Input Mask: >L; Default Value:
“M”; Validation Rule: “M” or “F”; Validation
Text: Usar “M” para Masculino e “F” para
Feminino; Required: Yes
DataNascimento Date/Time Format: Short Date; Caption: Data de Nascimento;
Default Value: Date()-(16*365+4); Validation
Rule:
DateDiff("d";[DataNascimento];Date())>=(16*365+4)
; Validation Text: Só se aceitam alunos com mais
de 16 anos de idade!
Regime Text Field Size:1; Input Mask: >L; Default Value: “O”;
Validation Rule: In ("O";"T";"A";"M";"D");
Validation Text: Usar "O" para Ordinário, "T"
para Trabalhador/Estudante, "A" para Atleta, "M"
para Militar e "D" para Dirigente Associativo!;
Required: Yes
DataMatrícula Date/Time Format: Short Date; Caption: Data de Matrícula;

2000 J Artur Vale Serrano, Carlos Carvalhal 25


Apontamentos de SGBD Parte II

Default Value: Date()


RefCódCurso Number Field Size: Integer; Caption: Código do Curso;
Required: Yes; Indexed: Yes (Duplicates OK)

Quadro 2. Atributos e Propriedades da Tabela Aluno (versão final).

3.3.- CONCEITOS DE INTEGRIDADE


A Integridade dos Dados diz respeito à validade, consistência e rigor dos dados armazenados na
BD e pode ser vista a 4 níveis:
Ä Integridade a Nível da Tabela: Garante que o Campo que identifica cada Registo dentro da
Tabela é único e nunca nulo.
Ä Integridade a Nível do Campo: Garante que os valores dos Campos são válidos,
consistentes e precisos, assim como que todos os Campos do mesmo tipo estão
consistentemente definidos ao longo da BD.
Ä Integridade a Nível das Ligações: Tradicionalmente conhecido como Integridade
Referencial. Garante que a ligação entre cada par de Tabelas está correcta e que existe
sincronismo entre elas sempre que houver entrada, alteração ou remoção de dados.
Ä Regras Contextuais: Impõem restrições ou limitações em certos aspectos da BD
relacionados com a organização e uso pretendido. Estas restrições podem afectar aspectos
do desenho da BD, tais como a gama e o tipo dos valores armazenados num determinado
Campo, o tipo (mandatório ou opcional) e o grau (número mínimo e máximo de Registos
duma Tabela que podem estar relacionados com um único Registo duma outra) de
participação de cada Tabela dentro das ligações, assim como o tipo de sincronismo usado
pela Integridade Referencial em certas ligações.

3.4.- CRIAÇÃO DE RELATIONSHIPS NO MS ACCESS


O MS Access permite criar ligações entre Tabelas, as quais são designadas Relationships,
permitindo ainda configurá-las quer em termos de Integridade Referencial (Janela das Relationships,
mostrada da Figura 22) quer em termos de resultados produzidos pelos Queries que envolvam as
Tabelas ligadas (Janela de Configuração das Propriedades do Join, mostrada na Figura 23). Para definir
uma Relationship entre duas Tabelas seguir os passos abaixo indicados.

8 Fechar todos os objectos (ou pelo menos aqueles que envolvam as tabelas
entre as quais vão ser criadas as Relationships) e executar o comando
Tools→Relationships. Após isso, o MS Access mostra a Janela de Adição de Tabelas,

2000 J Artur Vale Serrano, Carlos Carvalhal 26


Apontamentos de SGBD Parte II

mostrada na Figura 19, se ainda não foi criada nenhuma Relationship na BD, ou a
Janela das Relationships, mostrada na Figura 22, no caso contrário. Para invocar, em
qualquer momento, a partir da Janela das Relationships, a Janela de Adição de Tabelas
executar o comando View→Show Table.

8 Adicionar à Janela das Relationships as Tabelas, Aluno e Curso, entre as quais


se pretende criar as Relationships, seleccionando-as e accionando o botão Add.
8 Fechar a Janela de Adição de Tabelas accionando o botão de Close, após o
que aparecerá a Janela das Relationships contendo as Tabelas que acabamos de
adicionar, conforme mostra a Figura 20.
8 Para criar uma Relationship entre duas Tabelas arrastar o Campo Comum da
Tabela Primária e solta-lo sobre o Campo Comum da Tabela Referenciada. Após isso, o
MS Access apresentará a Janela de Edição de Relationships, mostrada na Figura 21.
8 Seleccionar, na Janela de Edição de Relationships as opções Enforce

Referential Integrity, Cascade Update Related Fields e Cascade Delete Related Records em
função do pretendido.
8 Uma vez configurada convenientemente a Relationship, fechar a Janela das
Relationships accionando o botão Create, após o que o MS Access desenhará, na Janela
das Relationships, uma linha a ligar os Campos Comuns das duas Tabelas.

O Tipo de Relationship que o MS Access cria (1 to 1 ou 1 to Many) é função do valor da


propriedade Indexed da Chave Estrangeira. Se o valor dessa propriedade for Yes (No Duplicates)
será criada uma Relationship do tipo 1 to 1, nos restantes casos será criada uma Relationship do tipo
1 to Many.

Se tiver sido seleccionada a opção Enforce Referential Integrity, na Janela das


Relationships, a linha usada pelo MS Access para representar graficamente a Relationship estará a
Bold e apresentará nos extremos legendas que indicam qual a multiplicidade da Relationship.
Quando se pretender remover ou editar uma determinada Relationship é necessário ter presente
que todos os objectos construídos tedo como pressuposto esta Relationship terão de ser re-editados.

8 Para remover uma Relationship seleccionar a linha que lhe está associada e
carregar na tecla Delete do teclado.
8 Para editar, em qualquer momento, uma determinada Relationship, dar um

2000 J Artur Vale Serrano, Carlos Carvalhal 27


Apontamentos de SGBD Parte II

duplo click sobre a linha que a simboliza.

Figura 19.- Janela de Adição de Tabelas.

Figura 20.- Janela das Relationships após inserção das Tabelas Aluno e Curso.

Figura 21.- Janela de Edição de Relationships.

2000 J Artur Vale Serrano, Carlos Carvalhal 28


Apontamentos de SGBD Parte II

Figura 22.- Janela das Relationships mostrando a ligação entre as Tabelas Aluno e Curso.

3.4.1.- UTILIZAÇÃO DA PROPRIEDADE ENFORCE REFERENTIAL INTEGRITY


O recurso à opção Enforce Referential Integrity na criação de uma Relationship permite
ao utilizador deixar por conta do MS Access a manutenção do sincronismo entre a Tabela Primária e a
Tabela Referenciada sempre que houver entrada, alteração ou remoção de dados. Agindo em função
do valor indicado nas opções Cascade Update Related Fields e Cascade Delete Related
Records, para as alterações efectuadas na Tabela Primária e impedindo a alteração do Campo Comum

na Tabela Referenciada para um valor que não tenha correspondência na Tabela Primária.
Se tiver sido seleccionada a opção Cascade Update Related Fields, sempre que for alterado
o valor do Campo Comum na Tabela Primária esta alteração será também efectuada no Campo
Comum da Tabela Relacionada.
Se tiver sido seleccionada a opção Cascade Delete Related Records, sempre que for
removido um Registo da Tabela Primária serão removidos todos os Registos relacionados da Tabela
Relacionada.
A menos que haja razões contextuais para o contrário accionar sempre as opções Enforce
Referential Integrity, Cascade Update Related Fields e Cascade Delete Related

Records para todas as Relationships.

3.4.2.- UTILIZAÇÃO DOS DIFERENTES TIPOS DE JOIN


Quando pretendemos juntar duas ou mais Tabelas num Query, o MS Access combina-as de
acordo com o tipo de Join das Relationships que as associam. Podendo mostrar somente os Registos
onde os Campos ligados sejam iguais, para os Joins do tipo Inner Joins, todos os Registos da Tabela
Primária e somente os Registos relacionados da Tabela Referenciada, para os Joins do tipo Outer
Joins, também conhecidos como Left Join, ou ainda, todos os Registos da Tabela Referenciada e

2000 J Artur Vale Serrano, Carlos Carvalhal 29


Apontamentos de SGBD Parte II

somente os Registos relacionados da Tabela Primária, para os Joins do tipo Self Joins, também
conhecidos como Rigth Joins.
A configuração do tipo de Join existente entre duas Tabelas é feita através da Janela de
Configuração das Propriedades dos Joins apresentada na Figura 23.

8 Para alterar o tipo de Join existente entre duas Tabelas invocar a Janela de Edição de
Relationships para a Relationship em causa e accionar o botão Join Type. Após isso aparecerá
a Janela de Configuração das Propriedades dos Joins onde é possível escolher o tipo de Join
pretendido. Uma vez Configurado convenientemente o Join confirmar as alterações
accionando o botão OK.

Figura 23.- Janela de Configuração das Propriedades dos Joins.

2000 J Artur Vale Serrano, Carlos Carvalhal 30


Apontamentos de SGBD Parte II

Tutorial 4.- CONSTRUÇÃO DE QUERIES NO MS ACCESS


Objectivos: NESTE TUTORIAL SERÃO APRESENTADOS OS PROCEDIMENTOS NECESSÁRIOS À CONSTRUÇÃO DE UM SELECT QUERY
NO MS ACCESS. ADICIONALMENTE DESCREVER-SE-A COMO CONFIGURÁ-LO DE MODO A SER FEITA A ORDENAÇÃO,
POR UM OU MAIS CAMPOS, DOS REGISTOS RESULTANTES DA SUA EXECUÇÃO, E COMO DEFINIR CRITÉRIOS PARA A
FILTRAGEM DESTES REGISTOS, NOMEADAMENTE CRITÉRIOS DEPENDENTES DOS DADOS INTRODUZIDOS PELO
UTILIZADOR NO MOMENTO DA EXECUÇÃO DO QUERY (PARAMETER QUERY). TUDO ISSO SERÁ CONSEGUIDO
ATRAVÉS DA IMPLEMENTAÇÃO DOS SELECT QUERIES “A LUNOS + CURSOS ORDENADOS PELA D ESIGNAÇÃO E N OME”, “ALUNOS
>=18 ANOS DO SEXO F OU <=18 ANOS DO SEXO M” E “ALUNOS DO CURSO INDICADO QUE TENHAM NASCIDO NO PERÍODO
INDICADO”, ESTE ÚLTIMO DO TIPO PARAMETER QUERY.

4.1.- CONSTRUÇÃO DE QUERIES DO MS ACCESS


Um Query é fundamentalmente uma pergunta que se faz ao SGBD, neste caso o MS Access,
sobre os dados armazenados nas Tabelas ou gerados por outros Queries (ter presente que o resultado
dum Query é uma Tabela, podendo ser usado como tal). Os Queries que o MS Access permite
construir podem ser classificados nas seguintes categorias e subcategorias:
Ä Select Query: Extrai informação da BD e apresenta-a.
Ä Crosstab Query: Permite produzir à saída uma Tabela de múltiplas entradas.
Ä Action Query: Altera os dados ou mesmo a estrutura da BD.
v Make-Table Query: Permite construir uma nova Tabela a partir da informação extraída
de outras Tabelas ou Queries, ou mesmo calculada.
v Delete Query: Permite remover Registos das Tabelas da BD.
v Append Query: Permite adicionar Registos às Tabelas da BD.
v Update Query: Permite alterar a informação armazenada nos Registos da BD.
Qualquer uma destas categorias/subcategorias pode, por sua vez, ser Total Query, permite
agrupar os Registos pelos diferentes Campos e efectuar sobre os grupos cálculos de totais, ou
Parameter Query, o resultado da sua execução depende de valores que são pedidos ao utilizador.
Notar que, apesar do resultado dum Query ser uma Tabela os seus Registos podem não ser
editáveis, dependendo do tipo de Query. Quando a Tabela resultante dum Query é editável recebe a
designação Dynaset, quando não o é recebe a designação Snapshot.
Para inquirir uma BD, no MS Access, é necessário construir um novo objecto do tipo Query,
para o que será necessário:
Ä Indicar quais as Tabelas e Queries que pretendemos inquirir.
Ä Indicar quais os Campos que pretendemos que sejam retornados na resposta.
Ä Descrever as manipulações –ordenação ou filtragem, por exemplo– que pretendemos
efectuar sobre os Registos.

2000 J Artur Vale Serrano, Carlos Carvalhal 31


Apontamentos de SGBD Parte II

O MS Access disponibiliza 2 mecanismos de descrição de Queries. Descrição gráfica através do


QBE (Query-by-Example), que descreveremos mais adiante, e descrição analítica, usando a
Linguagem SQL.
Para criar um Query através duma descrição gráfica, o MS Access disponibiliza 2 métodos,
conforme é possível verificar na Janela da BD representada na Figura 24. Estes métodos são:
Ä Create Query in Design View: Permite criar um Query de raiz.
Ä Create Query by using Wizard: Permite criar um novo Query usando o auxiliar. Auxiliar
esse que permite, somente, seleccionar quais os Campos, das diferentes Tabelas, que
pretendemos incluir no Query. Qualquer manipulação que se pretenda fazer sobre os
Registos terá de ser descrita na Janela de Desenho do Query.
Os Queries usados neste tutorial serão construídos de raiz, portanto, usando o método Create
Query in Design View.

Figura 24.- Janela da Base de Dados com o Separador Queries seleccionado.

4.1.1.- CONSTRUÇÃO DE SELECT QUERIES

8 Construir um Select Query activando o item Create Query in Design View da


Janela da BD.

Após dar indicação, ao MS Access, de que se pretende criar um novo Query de raiz aparecerá a
Janela de Adição de Tabelas/Queries, representada na Figura 25, que permite seleccionar e adicionar,
à Janela de Desenho do Query, as Tabelas/Queries que vão ser usadas na sua construção. Uma vez
adicionadas todas as Tabelas/Queries pretendidas esta janela pode ser fechada, podendo, no entanto,
ser invocada em qualquer momento executando o comando View→Show Table...

2000 J Artur Vale Serrano, Carlos Carvalhal 32


Apontamentos de SGBD Parte II

Figura 25.- Janela de Adição de Tabelas/Queries.

4.1.1.1.- CONSTRUÇÃO DO SELECT QUERY “ALUNOS + CURSOS ORDENADOS


PELA DESIGNAÇÃO E NOME”

8 Adicionar à Janela de Desenho de Select Queries as Tabelas Aluno e Curso.

Uma vez fechada a Janela de Adição de Tabelas/Queries, aparecerá a Janela de Desenho de


Queries, representada na Figura 26, também conhecida por Janela QBE. Esta janela encontra-se
dividida em 2 regiões, uma região superior onde aparecem as Tabelas/Queries que vão ser usadas na
construção do Query e as ligações existentes entre elas (é possível editar estas ligações, sendo as
alterações feitas válidas somente dentro do Query), e uma região inferior ocupada por uma grelha, a
Grelha QBE, onde serão assinalados os Campos que participarão na construção do Query (não só
aqueles que vão aparecer no resultado, mas também aqueles que vão ser usados, exclusivamente na
filtragem, ordenação, etc. dos Registos) e as operações a efectuar sobre eles. Para incluir um
determinado Campo nesta grelha basta dar um duplo clique sobre o Campo pretendido, ou então
arrasta-lo, soltando-o sobre a coluna pretendida. Se se pretender incluir todos os Campos duma Tabela
poder-se-á faze-lo duma forma abreviada arrastando a linha *.
Se se pretender ordenar os Registos pelo valor de um determinado Campo basta assinalar o tipo
de ordenação pretendida (Ascending ou Descending) na linha Sort da coluna correspondente ao
Campo pretendido. É possível fazer ordenação por mais do que um Campo, sendo, no entanto, esta
ordenação feita em cadeia e pela ordem em que os Campos aparecem na grelha. No resultado do
Query só aparecerão os Campos marcados como Show.

8 Construir o Select Query “Alunos + Cursos ordenados pela Designação e Nome”

2000 J Artur Vale Serrano, Carlos Carvalhal 33


Apontamentos de SGBD Parte II

conforme representado na Figura 26. Prestar especial atenção ao facto do Campo Nome

ter sido incluído 2 vezes, estando uma delas marcada como não visível. A razão para tal
foi a divergência entre a ordem em que se pretendia que os Campos aparecessem no
resultado do Query (NMec, Nome e Designação) e a sequência das ordenações (primeiro por
Designação e depois por Nome) a efectuar sobre os Registos.
8 Executar o Query e analisar o seu comportamento.

Figura 26.- Janela de Desenho do Select Query “Alunos + Cursos ordenados pela Designação e Nome”.

4.1.2.- DEFINIÇÃO DE CRITÉRIOS NOS QUERIES


Para definir Critérios de filtragem de dados nos Queries deve-se indicar as expressões a serem
satisfeitas pelos Registos nas linhas Criteria e Or da Grelha QBE e na coluna correspondente ao
Campo a validar. Notar que podem ser utilizadas tantas linhas quantas as pretendidas e não somente 2.
Na avaliação dos critérios compostos por mais do que uma condição, será feito o And entre as
condições colocadas na mesma linha seguido do Or entre as condições colocadas em linhas diferentes.

4.1.2.1.- CONSTRUÇÃO DO SELECT QUERY “ALUNOS >=18 ANOS DO SEXO F OU


<=18 ANOS DO SEXO M”
Para incluir Campos calculados num Query basta definir, numa nova coluna, a fórmula
responsável pelo seu cálculo. Se se pretender definir uma etiqueta para este novo Campo basta
precede-lo do nome pretendido seguido do caracter “:”.

2000 J Artur Vale Serrano, Carlos Carvalhal 34


Apontamentos de SGBD Parte II

8 Construir o Query “Alunos >= 18 anos do sexo F ou <= 18 anos do sexo M”

conforme indicado na Figura 27. Prestar especial atenção à coluna Idade: Format(Date()-

[DataNascimento]+1;”yy”) responsável pelo cálculo da idade do Aluno e pela sua


representação com a etiqueta Idade.
8 Executar o Query e analisar o seu comportamento.

Figura 27.- Janela de Desenho do Select Query “Alunos >=18 anos do Sexo F ou <=18 anos do Sexo M”.

4.1.3.- CONSTRUÇÃO DE PARAMETER QUERIES


É possível parametrizar os Queries. Isso é, fazer com que a sua execução seja dependente dos
valores, de certos parâmetros, introduzidos pelo utilizador ou extraídos de um Form. A definição dos
parâmetros é relativamente simples, pois o MS Access considera como parâmetro todos os Campos
desconhecidos no contexto do Query no qual estão incluídos (i.e. que não sejam Campos das
Tabelas/Queries incluídos na Janela de Desenho do Query). Assim sendo, se incluirmos no Query a
expressão [Qual é a Designação do Curso?], “Qual é a Designação do Curso?” será
considerado um parâmetro e pedido o seu valor ao utilizador, usando a caixa de diálogo apresentada
na Figura 30, e isso se não for possível obter o seu valor do Formulário a partir do qual foi invocado o
Query, no caso de tê-lo sido.

2000 J Artur Vale Serrano, Carlos Carvalhal 35


Apontamentos de SGBD Parte II

Apesar de não ser obrigatório é conveniente configurar convenientemente o tipo de dados de


cada parâmetro, o que é feito na Janela de Configuração dos Parâmetros do Query, invocada através
do Comando Query→Parameters...

4.1.3.1.- CONSTRUÇÃO DO PARAMETER QUERY “ALUNOS DO CURSO INDICADO


QUE TENHAM NASCIDO NO PERÍODO INDICADO”

8 Construir o Parameter Query “Alunos do Curso indicado que tenham nascido no

período indicado” conforme indicado na Figura 28. Configurar o tipo de dados de cada
um destes parâmetros conforme a informação contida na Figura 29. Ter especial
cuidado na introdução dos nomes dos parâmetros pois uma introdução errada fará com
que seja criado um novo parâmetro.
8 Executar o Query e analisar o seu comportamento.

Figura 28.- Janela de Desenho do Parameter Query “Alunosdo Curso indicado que tenham nascido no período
indicado”.

2000 J Artur Vale Serrano, Carlos Carvalhal 36


Apontamentos de SGBD Parte II

Figura 29.- Janela de Configuração dos Parâmetros do Query.

Figura 30.- Caixas de Diálogo apresentadas pelo MS Access para obter o valor dos Parâmetros do Parameter Query
“Alunos do Curso indicado que tenham nascido no período indicado”.

2000 J Artur Vale Serrano, Carlos Carvalhal 37


Apontamentos de SGBD Parte II

Tutorial 5.- OBTENÇÃO DOS MODELOS EA E RELACIONAL DA


BDSERVACAD
Objectivos: NESTE TUTORIAL FAR-SE-Á UMA BREVE INTRODUÇÃO AO M ODELO ENTIDADE-ASSOCIAÇÃO, APRESENTANDO
ALGUNS CONCEITOS RELACIONADOS, NOMEADAMENTE OS CONCEITOS DE ENTIDADE, ASSOCIAÇÃO, CHAVE DE
ENTIDADE, GRAU DA ASSOCIAÇÃO E TIPO DE PARTICIPAÇÃO. SEGUIDAMENTE APRESENTAR-SE-Á UM CONJUNTO
DE REGRAS DE TRADUÇÃO MODELO EA→MODELO RELACIONAL. UMA VEZ OBTIDO O MODELO RELACIONAL
COMPLETO DA BDSERVACAD COMPLETAR-SE-Á ESTA BD CONSTRUINDO AS TABELAS E CRIANDO DAS
RELATIONSHIPS EM FALTA.

5.1.- ENQUADRAMENTO NO MODELO EA


O Modelo Entidade-Associação (EA) é um modelo, essencialmente gráfico, usado na modelação
de situações problemáticas que tenta capturar o seu comportamento dinâmico. Para consegui-lo, este
modelo, recorre à representação das Associações, existente entre as diferentes Entidades envolvidas.

5.1.1.- CONCEITOS RELACIONADOS COM O MODELO EA


Para compreender convenientemente o Modelo EA é necessário ter presente a seguinte
terminologia:
Ä Entidade: É uma coisa de interesse para a BD, a qual tem ocorrências
que podem ser identificadas duma forma única. São usualmente os sujeitos que constam da
declaração de requisitos do problema que pretendemos modelar.
Ä Associação: É uma relação ou ligação entre 2 ou mais entidades. São
normalmente os verbos que constam da declaração de requisitos do problema que
pretendemos modelar.
Ä Chave de Entidade: Atributo ou conjunto de Atributos usados para
identificar univocamente cada ocorrência da Entidade.
Ä Grau da Associação: Assinala a multiplicidade com que cada Entidade
participa na Associação. Isso é, a quantas ocorrências, no máximo, de uma dada Entidades,
pode estar associada a Entidade que se encontra de cada um dos lados da Associação. Pode
ser do tipo 1:1, 1:N e M:N.
Ä Tipo de Participação: Indica se uma dada Entidade tem participação
Mandatória ou Opcional na Associação na qual está envolvida.
v Mandatória: Se, na Associação entre uma Entidade A e uma Entidade
B, as Ocorrências da Entidade A têm de existir antes da introdução de qualquer nova
Ocorrência na Entidade B, a participação da Entidade A na Associação é Mandatória.

2000 J Artur Vale Serrano, Carlos Carvalhal 38


Apontamentos de SGBD Parte II

v Opcional: Se, na Associação entre as Entidades A e B, não é


necessário existirem Ocorrências na Entidade A para se poderem introduzir
Ocorrências na Entidade B, a participação da Entidade B na Associação é Opcional.

5.1.2.- REGRAS DE TRADUÇÃO DO MODELO EA PARA O MODELO RELACIONAL


Como a maior parte dos SGBDs (MS Access inclusive) não suportam o Modelo EA, mas sim o
Modelo Relacional, torna-se necessário traduzir o Diagrama EA para o Modelo Relacional antes da
sua implementação. Esta conversão é feita usando as regras que se apresentam a seguir

Regra 1
Cada propriedade do diagrama Entidade-Associação
(EA) dá origem a um atributo no esquema Relacional. a1
Estando a entidade isolada, esta dá origem a uma A
relação. A Chave de Entidade (CE) dá origem à Chave a2
Primária (CP) da relação.
A(a1, a2, …)

Regra 2
Quando o grau duma associação binária é 1:1 com A 1
A/B
1
B
participação obrigatória por parte de ambas as entidades,
só é necessário uma relação. A CP desta relação pode
ser a CE de qualquer uma das entidades. A-B(a1, …, b1, …)

Regra 3
Quando o grau duma associação binária é 1:1 com
participação obrigatória por parte duma das entidades e A 1
A/B
1
B
não obrigatória por parte da outra, são necessárias duas
relações. Uma relação por cada entidade com a
respectiva CE a servir de CP da relação correspondente.
A(a1, …); B(b1,…, a1)
Adicionalmente, a CE do lado não obrigatório deve ser
adicionada como atributo na relação do lado obrigatório.

Regra 4
Quando o grau duma associação binária é 1:1 com
participação não obrigatória por parte de ambas as A 1
A/B
1
B
entidades, são necessárias 3 relações: uma para cada
entidade, com a respectiva CE a servir de CP da relação
correspondente, e uma terceira relação para a
A(a1, …); B(b1,…); A/B(a1, b1, …)
associação. Esta última terá entre os seus atributos as CE
de ambas as entidades. Como se trata duma associação
1:1 a CP da relação da associação poderá ser a CE de
qualquer uma das entidades.

Regra 5
Quando o grau duma associação binária é 1:M com
participação obrigatória por parte da entidade do lado M, A 1
A/B
M
B
são necessárias 2 relações: uma por cada entidade, com a
CE de cada entidade a servir como CP para a relação
correspondente. Adicionalmente, a CE da entidade do

2000 J Artur Vale Serrano, Carlos Carvalhal 39


Apontamentos de SGBD Parte II

correspondente. Adicionalmente, a CE da entidade do


lado 1 deve ser adicionada como atributo na relação do A(a1, …); B(b1,…, a1)
lado M.

Regra 6
Quando o grau duma associação binária é 1:M com
participação não obrigatória por parte da entidade do A 1
A/B
M
B
lado M, são necessárias 3 relações: uma por cada
entidade, com a CE de cada entidade a servir como CP
da relação correspondente, e uma terceira relação para a
associação. Esta última terá entre os seus atributos as CE A(a1, …); B(b1,…); A/B(a1, b1, …)
de ambas as entidades. A CP da relação da associação
será apenas a CE da entidade do lado M, devido à
associação M:1 existente entre esta entidade e a entidade
do lado 1.

Regra 7
Quando o grau duma associação binária é M:M, são
necessárias 3 relações: uma por cada entidade, com a CE
de cada entidade a servir como CP da relação A M
A/B B
M
correspondente, e uma terceira relação para a
associação. Esta última terá entre os seus atributos as CE A(a1, …); B(b1,…); A/B(a1, b1, …)
de ambas as entidades. A CP da relação da associação
será constituída pela combinação das CE de ambas as
entidades.

Regra 8
Quando uma associação é ternária, são necessárias 4
relações: uma para cada entidade, com a CE de cada
entidade a servir como CP da relação correspondente e C
uma quarta relação para a associação. Esta última deverá M
ter entre os seus atributos as CE das três entidades.
Duma forma semelhante, quando uma associação for de
ordem N, são necessárias N+1 relações. A CP da relação A M
A/B/C
M
B
gerada pela associação dependerá do grau de
participação das entidades na associação.
A(a1,…); B(b1,…); C(c1 ,…); A/B/C(a1, b1, c1,…)

Regra 9
Quando temos uma associação que envolva Subtipos, a
entidade fonte gerará uma relação com a CE a servir de
CP para a relação e um atributo designador do tipo. A
Cada subtipo herda a chave da relação já referida. Cada
subtipo e as suas associações deverão ser tratados como
entidades e associações regulares.

B C

A(a1, tipo, …); B(a1, …); C(a1, …)

2000 J Artur Vale Serrano, Carlos Carvalhal 40


Apontamentos de SGBD Parte II

Regra 10
Quando temos uma associação que envolva uma
entidade fraca, a entidade regular gerará uma relação
com a CE a servir de CP para a relação, e a entidade 1 M
fraca gerará uma relação com a CP constituída pela A A/B B
combinação da CE com a chave estrangeira.

A(a1, …); B(b1,a1, …)

5.2.- APRESENTAÇÃO E DISCUSSÃO DO MODELO EA DA BDSERVACAD


Tendo presente a declaração de requisitos da BDServAcad descrita no Tutorial 2 é fácil verificar
que o Diagrama Entidade-Associação representado na Figura 31 modela-a perfeitamente. Alguns
aspectos relevantes neste diagrama é a presença das Entidades Inscrição e Curso. Na realidade
numa primeira aproximação a este diagrama poder-se-ia ligar directamente as Entidades Aluno e
Disciplina através de uma Associação N:M, ficando os atributos TipoInscrição, AnoLectivo,

Nota e Data na Associação, no entanto, verificar-se-ia que poderiam ocorrer nulos na Tabela desta

Associação, pelo facto da nota só ser lançada algum tempo depois da inscrição ser feita. Para
ultrapassar este problema optou-se pela criação da Entidade Nota e, consequentemente, da Entidade
Inscrição (pois era a única forma de ligar a Entidade Nota ao resto do diagrama) conforme

apresentado na Figura 31. Notar que não estão assinalados todos os atributos das diferentes entidades,
mas sim somente as suas Chave de Entidade.
AnoCurricular
NMec,... CódCurso,... CódDisciplina,... CódDocente,...
N 1 N Leccionada M N Leccionada 1
Aluno Pertence Curso no Disciplina por Docente
ao
1 1

CódInscrição,...
N N
Tem Inscrição Envolve
1

É
Atribuída

1
Nota

RefCódInscrição,...

Figura 31.- Diagrama Entidade-Associação da BDServAcad.

5.3.- TRADUÇÃO DO MODELO EA DA BDSERVACAD PARA O MODELO RELACIONAL


Uma vez aplicadas as Regras de Tradução Modelo EA → Modelo Relacional ao Diagrama EA
da BDServAcad é fácil verificar que se obtem o Modelo Relacional apresentado no Quadro 3, na qual

2000 J Artur Vale Serrano, Carlos Carvalhal 41


Apontamentos de SGBD Parte II

foi também incluída informação sobre as ligações existentes entre as Tabelas (atributos ligantes,
cardinalidade e tipo de participação).
Ä Aluno(NMec, Nome, Residência, CódPostal, Localidade, Telefone, Sexo, DataNascimento, Regime,
DataMatrícula, RefCódCurso)
Ä Curso(CódCurso, Designação, Duração, Grau)
Ä Docente(CódDocente, NomeDoc)
Ä Disciplina(CódDiciplina, Designação, NCréditos, Semestre, RefCódDocente)
Ä Curso/Disciplina(RefCódCurso, RefCódDisciplina, AnoCurricular)
Ä Inscrição(CódInscrição, TipoInscrição, AnoLectivo, RefNMec, RefCódDisciplina)
Ä Nota(RefCódInscrição, Nota, Data)
Ä Ligações:
Ä 1(CódCurso ∈ Curso) → 0|∞(RefCódCurso ∈ Aluno)
Ä 1(CódDocente ∈ Docente) → 0|∞(RefCódDocente ∈ Disciplina)
Ä 1(CódDisciplina ∈ Disciplina) → 1|∞(RefCódDisciplina ∈ Curso/Disciplina)
Ä 1(CódCurso ∈ Curso) → 1|∞(RefCódCurso ∈ Curso/Disciplina)
Ä 1(NMec ∈ Aluno) → 1|∞(RefNMec ∈ Inscrição)
Ä 1(CódDisciplina ∈ Disciplina) → 0|∞(RefCódDisciplina ∈ Inscrição)
Ä 1(CódInscrição ∈ Inscrição) → 0|∞(RefCódInscrição ∈ Nota)

Quadro 3. Modelo de Relacional da BDServAcad.

2000 J Artur Vale Serrano, Carlos Carvalhal 42


Apontamentos de SGBD Parte II

5.4.- CONSTRUÇÃO DAS TABELAS EM FALTA NA BDSERVACAD

8 Construir as Tabelas Docente(CódDocente, NomeDoc), Disciplina(CódDiciplina,

Designação, NCréditos, Semestre, RefCódDocente), Curso/Disciplina(RefCódCurso,

RefCódDisciplina, AnoCurricular), Inscrição(CódInscrição, TipoInscrição, AnoLectivo,

RefNMec, RefCódDisciplina), Nota(RefCódInscrição, Nota, Data), usando o método Create

Table in Design View, tendo em conta a informação contida nos quadros abaixo.

Atributo Data Type Properties


CódDocente Number Field Size: Integer; Caption: Código do Docente;
Required: Yes; Indexed: Yes (No Duplicates)
NomeDoc Text Field Size: 40; Caption: Nome do Docente;
Required: Yes

Quadro 4. Atributos e Propriedades da Tabela Docente.

Atributo Data Type Properties


CódDisciplina Number Field Size: Integer; Caption: Código da
Disciplina; Required: Yes; Indexed: Yes (No
Duplicates)
Designação Text Field Size: 50; Caption: Designação da
Disciplina; Required: Yes; Indexed: Yes (No
Duplicates)
NCréditos Number Field Size: Single; Caption: Nº de Créditos;
Validation Rule: >=0; Validation Text: O número
de créditos tem de ser positivo; Required: Yes
Semestre Number Field Size: Byte; Default Value:1; Validation
Rule: In(1;2;3); Validation Text: Usar “1” para
disciplinas do 1º semestre, “2” para disciplinas
do 2º semestre e “3” para disciplinas anuais!;
Required: Yes
RefCódDocente Number Field Size: Integer; Caption: Código do Docente;
Required: Yes; Indexed: Yes (Duplicates OK)

Quadro 5. Atributos e Propriedades da Tabela Disciplina.

Atributo Data Type Properties


RefCódCurso Number Field Size: Integer; Caption: Código do Curso;
Required: Yes; Indexed: Yes (Duplicates OK)
RefCódDisciplina Number Field Size: Integer; Caption: Código da
Disciplina; Required: Yes; Indexed: Yes
(Duplicates OK)
AnoCurricular Number Field Size: Byte; Caption: Ano Curricular;
Default Value: 1; Validation Rule: In(1;2;3;4;5);
Validation Text: O Ano Curricular tem de estar
compreendido entre “1” e “5”!; Required: Yes

Quadro 6. Atributos e Propriedades da Tabela Curso/Disciplina.

2000 J Artur Vale Serrano, Carlos Carvalhal 43


Apontamentos de SGBD Parte II

Atributo Data Type Properties


CódInscrição AutoNumber Field Size: Long Integer; Caption: Código da
Inscrição; Indexed: Yes (No Duplicates)
TipoInscrição Text Field Size: 1; Input Mask: >L; Caption: Tipo de
Inscrição; Default Value: “N”; Validation Rule:
In(“N”;”M”;”R”); Validation Text: Usar "N":
Normal, "M": Melhoria de Nota e "R": Recurso!;
Required: Yes
AnoLectivo Number Field Size: Integer; Caption: Ano Lectivo;
Default Value: DatePart(“yyyy”; Date());
Required: Yes
RefNMec Number Field Size: Integer; Caption: Nº Mecanográfico;
Required: Yes; Indexed: Yes (Duplicates OK)
RefCódDisciplina Number Field Size: Integer; Caption: Código da
Disciplina; Required: Yes; Indexed: Yes
(Duplicates OK)

Quadro 7. Atributos e Propriedades da Tabela Inscrição.

Atributo Data Type Properties


RefCódIsnscrição Number Field Size: Long Integer; Caption: Código da
Inscrição; Required: Yes; Indexed: Yes (No
Duplicates)
Nota Number Field Size: Byte; Default Value: 0; Validation
RUle: >=0 And <=20; Validation Text: Tem de ser
um valor inteiro pertencente ao intervalo [0,
20]!; Required: Yes
Data Date/Time Format: Short Date; Default Value: Date();
Required: Yes

Quadro 8. Atributos e Propriedades da Tabela Nota.

5.5.- CRIAÇÃO DAS RELATIONSHIPS EM FALTA NA BDSERVACAD

8 Criar as Relationships apresentadas na Figura 32, tendo em conta que todas


as ligações têm as propriedades Enforce Referential Integrity, Cascade Update Related

Fields e Cascade Delete Related Records, activadas. Ter presente que o alvo de qualquer
ligação é uma Chave Estrangeira, facilmente identificável pelo prefixo Ref que precede
o seu nome.

2000 J Artur Vale Serrano, Carlos Carvalhal 44


Apontamentos de SGBD Parte II

Figura 32.- Janela das Relationships mostrando as ligações existentes entre as Tabelas da BDServAcad.

2000 J Artur Vale Serrano, Carlos Carvalhal 45


Apontamentos de SGBD Parte II

Tutorial 6.- CONSTRUÇÃO DE FORMS NO MS ACCESS


Objectivos: NESTE TUTORIAL DESCREVER-SE-ÃO OS PROCEDIMENTOS NECESSÁRIOS À CONSTRUÇÃO DE FORMS NO MS ACCESS,
DESDE OS MAIS SIMPLES ATÉ AOS MAIS ELABORADOS, OS FORMS QUE CONTÊM SUBFORMS . PRESTAR-SE- Á ESPECIAL
ATENÇÃO À INCLUSÃO DE CONTROLOS DO TIPO COMBO BOX NOS FORMS PELA SUA COMPLEXIDADE,
VERSATILIDADE E POTENCIALIDADES . TUDO ISSO SERÁ CONSEGUIDO ATRAVÉS DA IMPLEMENTAÇÃO DOS FORMS
“ENTRADA DE DOCENTES”, “ENTRADA DE CURSOS”, “ENTRADA DE ALUNOS”, “ENTRADA DE DISCIPLINAS” E “ATRIBUIÇÃO DE
DISCIPLINAS AOS CURSOS”.

6.1.- CONSTRUÇÃO DE FORMS NO MS ACCESS


A forma mais cómoda de consultar, alterar e introduzir dados nas BDs é através dos objectos do
tipo Form, pois permitem construir formulários gráficos para a introdução sincronizada de dados em
múltiplas Tabelas (quer recorrendo a Queries para combinar as várias Tabelas, quer utilizando Forms
com SubForms), associando a cada Campo o tipo de Controlo mais apropriado (Label, Text Box,
Combo Box, List Box, Check Box, Command Button, Toggle Button, Option Button, Image, entre

outros) e organizando-os da forma mais conveniente. Por outro lado é através deste tipo de objectos
que é possível definir a interface da BD com o utilizador, construindo menus e definindo múltiplas
janelas de interacção interligadas entre sí.
O primeiro passo a dar na construção de um Form é a definição da Tabela ou Query na qual este
vai ser baseado, i.e. a sua Fonte de Registos (Record Source), o que é conseguido tendo em conta o
objectivo pretendido. Seguidamente poder-se-á optar por um dos 2 métodos disponibilizados pelo MS
Access para a criação de Forms, presentes como itens na Janela da BD representada na Figura 33.
Estes métodos são:
Ä Create Form in Design View: Permite criar um novo Form de raíz.
Ä Create Form by using Wizard: Permite criar um novo Form usando o Auxiliar. Auxiliar
esse que, através de uma sequência de janelas, representadas na Figura 34, obtém a
informação necessária à construção do Form, nomeadamente o objecto Fonte de Registos,
os Campos a incluir no Form e o seu aspecto gráfico. Uma vez criado o Form usando este
processo é possível editá-lo por forma a adaptá-lo aos objectivos e aspecto gráfico
pretendido.

Por dar um contributo significativo na construção dos Forms utilizaremos neste curso o método
Create Form by using Wizard na criação dos Forms, efectuando de seguida as alterações

necessárias por forma a adaptá-lo aos objectivos pretendidos.

2000 J Artur Vale Serrano, Carlos Carvalhal 46


Apontamentos de SGBD Parte II

Figura 33.- Janela da BD com o separador Forms seleccionado.

6.1.1.- CONSTRUÇÃO DO FORM “ENTRADA DE DOCENTES”

8 Construir o Form “Entrada de Docentes”, baseado na Tabela Docente, usando


o método Create Form by using Wizard, incluindo nele todos os Campos desta Tabela e
tendo presente a informação presente na Figura 34 e Figura 35.

2000 J Artur Vale Serrano, Carlos Carvalhal 47


Apontamentos de SGBD Parte II

Figura 34.- Passos a seguir na construção de um Form usado o método Create Form by Using Wizard, neste caso
concreto do Form “Entrada de Docentes”.

Uma vez terminado o processo de criação dum Form usando o Auxiliar é possível redesenha-lo,
para o que é necessário compreeder o funcionamento da Janela de Desenho dos Forms.
Conforme é visível na Figura 35, os Forms são constituídos por 3 secções, Cabeçalho (Form
Header), Detalhe (Detail) e Rodapé (Form Footer), sendo o Detalhe a secção onde são apresentados

os valores dos diferentes Campos dos Registos, enquando que a informação presente no Cabeçalho e
no Rodapé mantem-se constante ao longo de todos os Registos. (Podem ser usados para definir um
cabeçalho para o Form, para incluir componentes de pesquisa, apresentar totais, etc.)
Ao conjunto dos Campos da Tabela/Query a partir da qual foi construído o Form, e que foram
incluídos no Form, designa-se Lista de Campos (Field List) do Form, representada na Figura 36. A
cada elemento da Lista de Campos está associado um componente gráfico designado Controlo, a partir
dos quais vai ser visualizada, alterada e introduzida a informação nos Registos. O MS Access
disponibiliza um conjunto de 9 tipos de Controlos padrão, existindo, no entanto, possibilidade de
recorrer a outros. Estes Controlos são: Label, Text Box, Combo Box, List Box, Check Box, Command
Button, Toggle Button, Option Button e Image. O Auxiliar associa, por defeito, uma Text Box a

cada um dos elementos da Lista de Campos, sendo possível, no entanto, associar outro tipo de
Controlo a um dado Campo recorrendo à Caixa de Ferramentas, representada na Figura 36. Para fazé-
lo basta seleccionar primeiro o tipo de Controlo na Caixa de Ferramentas e depois arrastar, para a área
do Form, o Campo pretendido da Janela Lista de Campos. Se estiver accionado o Auxiliar na Caixa de
Ferramentas a criação do objecto será guiada pelo Auxiliar, caso contrário será necessário alterar as
propriedades do Controlo manualmente. Ter presente que os Controlos vêm, usualmente,
acompanhados por um Label, sendo, dessa forma, um Controlo Composto.
Todas as componentes gráficas constituintes do Form, inclusive as suas secções e o próprio
Form têm propriedades, que podem ser consultadas e editadas recorrendo à Janela das Propriedades,

2000 J Artur Vale Serrano, Carlos Carvalhal 48


Apontamentos de SGBD Parte II

representada na Figura 36. De entre as propriedades dos Forms está a Default View, que define a
forma como o Form vai ser visualizado (por defeito), podendo ser visto Registo a Registo (Single
Form), como uma lista contínua de Registos (Continuous Form) ou como uma Tabela (Datasheet).

8 Para tornar visível as Janelas da Lista de Campos e das Propriedades basta


executar os comandos View→Field List e View→Properties, respectivamente. E para
tornar visível a Caixa de Ferramentas basta executar o comando View→Toolbox.

8 Editar o Form “Entrada de Docentes”, reposicionando e redimensionando os


seus controlos de modo a conseguir o aspecto indicado na Figura 35. Alterar a
propriedade Default Value do Controlo CódCurso para DMax ("[Docente]![CódDocente]";

"Docente")+1, com o objectivo de contribuir para a não repetição dos valores do


CódDocente na Tabela Docente.

Figura 35.- Form “Entrada de Docentes” em Modo de Desenho.

Figura 36.- Da esquerda para a direita e de cima para baixo temos a Janela Lista de Campos (Field List Window), a
Janela das Propriedades (Properties Window), mostrando as propriedades do Form “Entrada de Docentes”, e a Caixa de
Ferramentas (Toolbox).

2000 J Artur Vale Serrano, Carlos Carvalhal 49


Apontamentos de SGBD Parte II

6.2.- CONSTRUÇÃO DE FORMS QUE UTILIZAM COMBO BOXES


As Combo Boxes são Controlos compostos por 3 elementos (4 se contarmos com o seu Label),
uma Text Box, um Command Button (com o desenho de uma seta a apontar para baixo) e uma List
Box (de escolha simples). A List Box permanece invisível até o Command Button ser accionado,
ficando outra vez invisível quando for feita uma escolha ou quando perder o focus. A Text Box
apresenta sempre o valor da primeira coluna, visível, da linha que foi seleccionada da List Box. O
valor com que o Controlo fica (aquele que é usualmente armazenado no Campo associado ao
Controlo) depende da propriedade Bound Column da Combo Box e pode não ser o que é mostrado na
Text Box. (É usual tirar-se partido desta possibilidade das Combo Boxes.)
Existem 3 tipos de Combo Boxes, aquelas que apresentam uma lista de valores (Row Source
Type: Value List), aquelas que apresentam valores extraídos de uma Tabela ou Query (Row Source

Type: Table/Query) e aquelas que apresentam a lista dos Campos de uma Tabela ou Query (Row

Source Type: Field List). Sendo os 2 primeiros tipos os mais usuais.

Para construir uma Combo Box usando o Auxiliar é necessário accionar os botões Wizard e
Combo Box da Caixa de Ferramentas, seguidamente arrastar o Campo (da Janela da Lista de Campos
representada na Figura 36) que vai estar associado à Combo Box para a secção Detalhe do Form e
interagir convenientemente com a sequência de janelas que o Auxiliar apresentará. A Figura 38
apresenta esta interacção para o caso das Combo Boxes do tipo Value List e a Figura 40 para o caso
das Combo Boxes do tipo Table/Query.
Para construir uma Combo Box sem usar o Auxiliar é necessário accionar o botão Combo Box e
desaccionar o botão Wizard da Caixa de Ferramentas, seguidamente arrastar o Campo (da Janela da
Lista de Campos) que vai estar associado à Combo Box para a secção Detalhe do Form e configurar
convenientemente as propriedades seguintes:
o Row Source Type: Indica qual o tipo de Combo Box (Value List,
Table/Query ou Field List).

o Row Source: Contem os valores que vão ser mostrados na List Box associada à
Combo Box. O seu valor pode ser indicado através de uma lista de valores ou através de
uma Tabela ou Query (descrito, nomeadamente, através de uma instrução SQL)
o Column Count: Indica o número de colunas da List Box associada à Combo
Box.
o Columns Widths: Lista com as larguras das diferentes colunas da List Box.
o List Width: Largura total da List Box. (Convem ser preenchida para evitar o
aparecimento de Scroll Bars horizontais.)

2000 J Artur Vale Serrano, Carlos Carvalhal 50


Apontamentos de SGBD Parte II

o Bound Column: Indica qual a coluna cujo valor vai ser armazenado no Controlo.

Nas secções seguintes serão apresentados exemplos de configuração destas propriedades para as
Combo Boxes do tipo Value List e Table/Query.

6.2.1.- CONSTRUÇÃO DO FORM “ENTRADA DE CURSOS”

8 Construir o Form “Entrada de Cursos”, baseado na Tabela Curso, usando o


método Create Form by using Wizard, incluindo nele todos os Campos desta Tabela e
tendo presente a informação presente na Figura 37. Utilizar o Auxiliar na construção
das Combo Boxes guiando-se pela informação contida na Figura 38. Se por outro lado
preferir pode construi-las sem o Auxiliar configurando as suas propriedades conforme
indicado na Caixa de Instruções seguinte.

8 Editar o Form “Entrada de Cursos”, criando as Combo Boxes Grau e Duração, e


reposicionando e redimensionando os seus controlos de modo a conseguir o aspecto
indicado na Figura 37. (É evidente que para criar as Combo Boxes associadas aos
Campos Grau e Duração vai ser necessário remover primeiro as Text Boxes que o
Auxiliar associou a estes Campos.) A Combo Box Grau deve ser construída de modo à
lista que lhe está associada ser constituída por 2 colunas, a 1ª coluna (de largura 0) com
os valores (“B” e “L”) e a 2ª coluna com os valores (“Bacharelato” e “Licenciatura”). (Em
termos de propriedades ter-se-á: Control Source: Grau | Row Source Type: Value List |

Row Source: “B”; “Bacharelato”; “L”; “Licenciatura” | Column Count: 2 | Columns Widths:

0cm;1,773cm | List Width: 1,773cm | Bound Column: 1 | Limit to List: Yes.) A Combo
Box Duração deve ser construída de modo à lista que lhe está associada ser constituída
por 1 coluna1, com os valores (3, 4 e 5). (Em termos de propriedades ter-se-á: Control

Source: Duração| Row Source Type: Value List | Row Source: 3; 4; 5 | Column Count: 1 |

Columns Widths: 0,9cm | List Width: 0,9cm | Bound Column: 1 | Limit to List: Yes.)

8 Alterar a propriedade Default Value do Controlo CódCurso para DMax

("[Curso]![CódCurso]"; "Curso")+1, com o objectivo de contribuir para a não repetição


dos valores do CódCurso na Tabela Curso.

2000 J Artur Vale Serrano, Carlos Carvalhal 51


Apontamentos de SGBD Parte II

Figura 37.- Form “Entrada de Cursos” em Modo de Desenho.

Figura 38.- Passos a seguir na construção de uma Combo Box do tipo Value List usando o Auxiliar, neste caso concreto a
Combo Box Grau.

2000 J Artur Vale Serrano, Carlos Carvalhal 52


Apontamentos de SGBD Parte II

6.2.2.- CONSTRUÇÃO DO FORM “ENTRADA DE ALUNOS”

8 Construir o Form “Entrada de Alunos”, baseado na Tabela Aluno, usando o


método Create Form by using Wizard, incluindo nele todos os Campos desta Tabela e
tendo presente a informação presente na Figura 39. Utilizar o Auxiliar na construção da
Combo Box RefCódCurso guiando-se pela informação contida na Figura 40. Se por outro
lado preferir pode construi-la sem o Auxiliar configurando as suas propriedades
conforme indicado na Caixa de Instruções seguinte.

8 Editar o Form “Entrada de Alunos ”, criando as Combo Boxes Sexo, Regime e


RefCódCurso, e reposicionando e redimensionando os seus controlos de modo a conseguir
o aspecto indicado na Figura 39. (É evidente que para criar as Combo Boxes associadas
aos Campos Grau e Duração vai ser necessário remover primeiro as Text Boxes que o
Auxiliar associou a estes Campos.) A Combo Box Sexo deve ser construída de modo à
lista que lhe está associada ser constituída por 2 colunas, a 1ª coluna (de largura 0) com
os valores (“M” e “F”) e a 2ª coluna com os valores (“Masculino” e “Feminino”). (Em termos
de propriedades ter-se-á: Control Source: Sexo | Row Source Type: Value List | Row

Source: “M”; “Masculino”; “F”; “Feminino” | Column Count: 2 | Columns Widths:

0cm;1,482cm | List Width: 1,482cm | Bound Column: 1 | Limit to List: Yes.) A Combo
Box Regime deve ser construída de modo à lista que lhe está associada ser constituída
por 2 colunas, a 1ª coluna (de largura 0) com os valores (“O”, “T”, “A”; “M” e “D”) e a 2ª
coluna com os valores (“Ordinário”, “Trabalhador Estudante”, “Atleta de Alta Competição”,

“Ao Abrigo do Regime Militar”, “Dirigente Associativo”). (Em termos de propriedades ter-
se-á: Control Source: Regime | Row Source Type: Value List | Row Source:

"O";"Ordinário";"T";"Trabalhador Estudante";"A";"Atleta de Alta Competição";"M";"Ao


Abrigo do Regime Militar";"D";"Dirigente Associativo" | Column Count: 2 | Columns

Widths: 0cm;3,704cm | List Width: 3,704cm | Bound Column: 1 | Limit to List: Yes.) A
Combo Box RefCódCurso deve ser construída de modo à lista que lhe está associada ser
constituída pelas colunas CódCurso e Designação da Tabela Curso, tendo, a 1ª coluna
largura 0. (Em termos de propriedades ter-se-á: Control Source: RefCódCurso | Row Source

Type: Table/Query | Row Source: SELECT [Curso].[CódCurso], [Curso].[Designação] FROM


Curso | Column Count: 2 | Columns Widths: 0cm;5,318cm | List Width: 5,318cm | Bound

Column: 1 | Limit to List: Yes.)

8 Alterar a propriedade Default Value do Controlo NMec para DMax

2000 J Artur Vale Serrano, Carlos Carvalhal 53


Apontamentos de SGBD Parte II

("[Aluno]![NMec]"; "Aluno")+1, com o objectivo de contribuir para a não repetição dos


valores do NMec na Tabela Aluno.

Figura 39.- Form “Entrada de Alunos” em Modo de Desenho.

2000 J Artur Vale Serrano, Carlos Carvalhal 54


Apontamentos de SGBD Parte II

Figura 40.- Passos a seguir na construção de uma Combo Box do tipo Table/Query usando o Auxiliar, neste caso
concreto a Combo Box RefCódCurso.

6.2.3.- CONSTRUÇÃO DO FORM “ENTRADA DE DISCIPLINAS”

8 Construir o Form “Entrada de Disciplinas”, baseado na Tabela Disciplina,


usando o método Create Form by using Wizard, incluindo nele todos os Campos desta
Tabela e tendo presente a informação presente na Figura 41.

8 Editar o Form “Entrada de Disciplinas”, criando as Combo Boxes Semestre e


RefCódDocente, e reposicionando e redimensionando os seus controlos de modo a
conseguir o aspecto indicado na Figura 41. (É evidente que para criar as Combo Boxes
associadas aos Campos Grau e Duração vai ser necessário remover primeiro as Text
Boxes que o Auxiliar associou a estes Campos.) A Combo Box Semestre deve ser
construída de modo à lista que lhe está associada ser constituída por 2 colunas, a 1ª
coluna (de largura 0) com os valores (1, 2 e 3) e a 2ª coluna com os valores (“1º
Semestre”, “2º Semestre” e “Anual”). (Em termos de propriedades ter-se-á: Control Source:

Sexo | Row Source Type: Value List | Row Source: 1;"1º Semestre";2;"2º
Semestre";3;"Anual" | Column Count: 2 | Columns Widths: 0cm;1,482cm | List Width:

1,482cm | Bound Column: 1 | Limit to List: Yes.) A Combo Box RefCódDocente deve ser
construída de modo à lista que lhe está associada ser constituída pelas colunas
CódDocente e NomeDoc da Tabela Docente, tendo, a 1ª coluna largura 0. (Em termos de
propriedades ter-se-á: Control Source: RefCódDocente | Row Source Type: Table/Query | Row

Source: SELECT DISTINCTROW [Docente].[CódDocente], [Docente].[NomeDoc] FROM Docente |


Column Count: 2 | Columns Widths: 0cm;3,918cm | List Width: 3,918cm | Bound Column: 1 |

Limit to List: Yes.)

8 Alterar a propriedade Default Value do Controlo CódDisciplina para DMax

2000 J Artur Vale Serrano, Carlos Carvalhal 55


Apontamentos de SGBD Parte II

("[Disciplina]![CódDisciplina]"; "Disciplina")+1, com o objectivo de contribuir para a


não repetição dos valores do CódDisciplina na Tabela Disciplina.

Figura 41.- Form “Entrada de Disciplinas” em Modo de Desenho.

6.3.- CONSTRUÇÃO DE FORMS/SUBFORMS NO MS ACCESS


Um SubForm não é mais do que um Form que foi inserido dentro de outro Form e que
usualmente está ligado a ele através de um Campo, por forma a que sempre que houver alteração do
Registo actual no Form Principal o SubForm mostre os seus Registos relacionados. A ligação entre o
Form Principal e o SubForm é feita através dos Campos indicados nas propriedades Link Child
Fields e Link Master Fields. A primeira apresenta a lista dos Campos ligantes do SubForm e a

segunda a lista dos Campos ligantes do Form Principal.


Em termos de desenvolvimento, é aconselhável construir primeiro o SubForm e depois inserí-lo
e só depois o Form Principal, inserindo neste último o SubForm.

6.3.1.- CONSTRUÇÃO DO FORM/SUBFORM “ATRIBUIÇÃO DE DISCIPLINAS AOS CURSOS”

8 Construir o Query “Query para o SubForm Atribuição de Disciplinas aos Cursos”

com base na informação apresentada na Figura 42.

2000 J Artur Vale Serrano, Carlos Carvalhal 56


Apontamentos de SGBD Parte II

Figura 42.- Query “Query para o SubForm Atribuição de Disciplina do Curso” em Modo de Desenho.

8 Construir o Form “SubForm Atribuição de Disciplinas aos Cursos”, baseado no


Query “Query para o SubForm Atribuição de Disciplinas aos Cursos”, usando o método
Create Form by using Wizard, incluindo nele todos os Campos deste Query, com Layout
Tabular e tendo presente a informação presente na Figura 43.
8 Editar este Form, criando as Combo Boxes AnoCurricular e RefCódDisciplina, e
reposicionando e redimensionando os seus controlos de modo a conseguir o aspecto
indicado na Figura 43. A Combo Box AnoCurricular deve ser construída de modo à lista
que lhe está associada ser constituída por 2 colunas, a 1ª coluna (de largura 0) com os
valores (1, 2, 3, 4 e 5) e a 2ª coluna com os valores (“1º”, “2º”, “3º”, “4º” e “5º”). (Em
termos de propriedades ter-se-á: Control Source: AnoCurricular | Row Source Type: Value

List | Row Source: 1;"1º";2;"2º";3;"3º";4; "4º";5; "5º" | Column Count: 2 | Columns

Widths: 0cm;0,9cm | List Width: 0,9cm | Bound Column: 1 | Limit to List: Yes.) A Combo
Box RefCódDisciplina deve ser construída de modo à lista que lhe está associada ser
constituída pelas colunas CódDisciplina e Designação da Tabela Disciplina. (Em termos de
propriedades ter-se-á: Control Source: RefCódDisciplina | Row Source Type: Table/Query |

Row Source: SELECT [Disciplina].[CódDisciplina], [Disciplina].[Designação] FROM


Disciplina | Column Count: 2 | Columns Widths: 1cm;6,113cm | List Width: 7,113cm | Bound

Column: 1 | Limit to List: Yes.).

2000 J Artur Vale Serrano, Carlos Carvalhal 57


Apontamentos de SGBD Parte II

Figura 43.- Form “SubForm Atribuição de Disciplinas aos Cursos” em Modo de Desenho.

8 Construir o Form “Atribuição de Disciplinas aos Cursos”, baseado na Tabela


Curso, usando o método Create Form by using Wizard, incluindo nele somente os atributos
CódCurso e Designação e tendo presente a informação presente na Figura 44.
8 Editar este Form, inserindo nele o Form “SubForm Atribuição de Disciplinas

aos Cursos”, e reposicionando e redimensionando os seus controlos de modo a conseguir


o aspecto indicado na Figura 44. Para inserir o SubForm, usando o Auxiliar, activar os
botões Wizard e SubForm/SubReport da Caixa de Ferramentas, clicar sobre a Secção
Detalhe do Form “Atribuição de Disciplinas aos Cursos” e preencher convenientemente a
sequência de Janelas apresentada pelo Auxiliar, conforme apresentado na Figura 45.

Figura 44.- Form “Atribuição de Disciplinas aos Cursos” em Modo de Desenho.

2000 J Artur Vale Serrano, Carlos Carvalhal 58


Apontamentos de SGBD Parte II

Figura 45.- Passos a seguir para inserir um SubForm dentro de um Form, neste caso concreto o Form “SubForm
Atribuição de Disciplinas aos Cursos”.

2000 J Artur Vale Serrano, Carlos Carvalhal 59


Apontamentos de SGBD Parte II

Tutorial 7.- CONSTRUÇÃO DE QUERIES AVANÇADOS NO MS ACCESS


Objectivos: NESTE TUTORIAL DESCREVER-SE-ÃO OS PROCEDIMENTOS NECESSÁRIOS À CONSTRUÇÃO, NO MS ACCESS, DE TOTAL
QUERIES, CROSSTAB QUERIES E ACTION QUERIES DAS CATEGORIAS MAKE-TABLE QUERY, DELETE QUERY,
APPEND QUERY E UPDATE QUERY. ISSO SERÁ CONSEGUIDO ATRAVÉS DA IMPLEMENTAÇÃO DO TOTAL QUERY
“NÚMERO DE HOMENS <=18 ANOS E MULHERES >=18 ANOS POR CURSO ”, DO CROSSTAB QUERY “CROSSTAB QUERY # ALUNOS
DE CADA SEXO POR CURSO”, DO MAKE-TABLE QUERY “CONSTRÓI TABELA “ALUNO + CURSO”, DO DELETE QUERY “REMOVE
OS ALUNOS COM MENOS DE 18 ANOS DA T ABELA “BACKUP: ALUNO””, DO APPEND QUERY “ADICIONA À TABELA “BACKUP :
ALUNO” OS ALUNOS COM <=18 ANOS” E DO UPDATE QUERY “PASSA PARA MAIÚSCULA O N OME DOS C URSOS”.

7.1.- CONSTRUÇÃO DE TOTAL QUERIES


Um Total Query não é mais do que um Select Query capaz de efectuar agrupamento de
Registos, com base nos valores de um ou vários Campos, e cálculos de totais sobre os grupos assim
formados. Este tipo de Query disponibiliza um conjunto pré-definido de totais (Sum, Avg, Min, Max,
Count, StDev, Var, First, Last) sendo, no entanto, possível definir totais específicos através da

descrição das expressões que o calculam. A sua construção processa-se da mesma forma que os
restantes Select Queries, sendo necessário, na fase final, executar o comando View→Totals por forma
a tornar visível a linha Total da Grelha QBE. É nesta linha que vão ser indicados os Campos pelos
quais vão ser agrupados os Registos (Group By), aqueles sobre os quais vão ser calculados os totais
(Sum, Avg, Min, Max, Count, StDev, Var, First, Last ou Expression) e, finalmente, aqueles que vão
ser usados na filtragem, à priori, dos dados (Where). A Figura 47 apresenta um Total Query em Modo
de Desenho e a Figura 46 em Modo de Processamento.

7.1.1.- CONSTRUÇÃO DO TOTAL QUERY “NÚMERO DE HOMENS <=18 ANOS E MULHERES >=18
ANOS POR CURSO”

Este Total Query, como o seu nome indica, vai permitir determinar o número de Alunos do Sexo
masculino, com no máximo 18 anos, e o número de Alunos do Sexo feminino, com pelo menos 18
anos , de cada um dos Cursos, indicando também a média das suas idades. Para conseguir isso é
necessário agrupar os Alunos inicialmente por Curso e depois por Sexo, procedendo de seguida à sua
contagem e cálculo da média das idades, conforme indicado na Caixa de Instruções seguinte.

8 Construir o Select Query “Número de Homens <=18 anos e Mulheres >=18 anos por

Curso” com base na informação apresentada na Figura 33. Prestar especial atenção às
colunas Número de Alunos e Média das Idades. Na primeira é feita a contagem dos NMec ,

para assim determinar o número de Alunos de cada grupo, e na segunda é feito o


cálculo da média das idades dos Alunos de cada grupo, fazendo uso de uma expressão

2000 J Artur Vale Serrano, Carlos Carvalhal 60


Apontamentos de SGBD Parte II

específica. As colunas Sexo e Idade determinam o critério de filtragem dos Registos.


8 Executar o Query e analisar o seu comportamento.

Figura 46.- Total Query “Número de Homens <=18 anos e Mulheres >=18 anos por Curso” em Modo de
Processamento.

Figura 47.- Total Query “Número de Homens <=18 anos e Mulheres >=18 anos por Curso” em Modo de Desenho.

7.2.- CONSTRUÇÃO DE CROSSTAB QUERIES


Um Crosstab Query é uma categoria de Query que permite gerar uma tabela de 2 ou mais
entradas a partir dos dados contidos na BD. A sua construção processa-se como se de um Select Query
se tratasse, sendo necessário, na fase final, executar o comando Query→Crosstab Query. Após isso
serão acrescentadas 2 novas linhas, à Grelha QBE, designadas Total e Crosstab. A primeira permite
definir a forma como os Registos vão ser agrupados e os totais que vão ser calculados, e a segunda
permite definir as entradas (Campos) da tabela que vão ser representadas em Coluna (Row Heading) e
em Linha (Column Heading) e o Campo que vai ser usado no cálculo do Valor (Value). Um Crosstab
Query pode ter vários Campos da categoria Row Heading, mas somente um Campo das categorias
Column Heading e Value. A Figura 50 apresenta um Crosstab Query em Modo de Desenho e a Figura

49 em Modo de Processamento.
Os Crosstab Query são representados por um icon próprio na Janela da BD, conforme se pode
verificar na Figura 48, não podendo, os dados da Tabela resultante da sua execução, serem alterados.

2000 J Artur Vale Serrano, Carlos Carvalhal 61


Apontamentos de SGBD Parte II

Figura 48.- Janela da BD, com o separador Query seleccionando, mostrando os diferentes tipos de icons associados às
diferentes categorias de Queries.

7.2.1.- CONSTRUÇÃO DO CROSSTAB QUERY “CROSSTAB QUERY NÚMERO DE ALUNOS DE CADA


SEXO POR CURSO”
Este Crosstab Query vai permitir gerar uma tabela de 2 entradas, Designação e Sexo, com a
contagem do número de Alunos de cada Sexo existente em cada Curso, conforme apresentado na
Figura 49. Adicionalmente é calculado o total de Alunos de cada Curso. Os procedimentos a seguir na
sua construção são os apresentados na Caixa de Instruções seguinte:

8 Construir o Crosstab Query “Número de Alunos de cada Sexo por Curso” com
base na informação apresentada na Figura 50. Os valores dos Campos Designação e Total
vão ser representados em coluna, i.e., vão ser Cabeçalhos de Linha (Row Heading), os
valores do Campo Sexo vão ser representados em linha, i.e., vão ser Cabeçalho de
Coluna (Column Heading) e os valores do Campo NMec vão ser usados no cálculo do Valor
da tabela de 2 entradas gerada por este Query.
8 Executar o Query e analisar o seu comportamento.

Figura 49.- Crosstab Query “Número de Alunos de cada Sexo por Curso” em Modo de Processamento.

2000 J Artur Vale Serrano, Carlos Carvalhal 62


Apontamentos de SGBD Parte II

Figura 50.- Crosstab Query “Número de Alunos de cada Sexo por Curso” em Modo de Desenho.

7.3.- CONSTRUÇÃO DE ACTION QUERIES


Um Action Query é uma categoria de Query capaz de alterar a estrutura, criando novas Tabelas,
ou os dados, apagando, modificando ou adicionando Registos, armazenados na BD. Classificam-se em
4 sub-categorias dependendo da acção desempenhada:
Ä Make-Table Query: Criam uma nova Tabela a partir dos dados extraídos de outras Tabelas
ou resultantes de cálculos ou processamentos efectuados sobre estes. Esta nova Tabela pode
ser criada numa outra BD.
Ä Delete Query: Remove os Registos, que satisfaçam um determinado critério, de uma
Tabela.
Ä Append Query: Adiciona Registos a uma Tabela, que pode ser exterior à BD.
Ä Update Query: Altera os Registos de uma Tabela.

A sua construção processa-se como se de um Select Query se tratasse, sendo necessário, na fase
final, executar um dos comandos Query→Make-Table Query..., Query→Delete Query,

Query→Append Query... e Query→Update Query em função do tipo de Query pretendido.

Seguidamente, e para os Queries do tipo Make-Table e Append Query, será apresentada uma Caixa
de Diálogo, representada na Figura 51 e Figura 54, onde deve ser introduzido o nome da Tabela que
vai ser criada pelo Query ou à qual vão ser adicionados novos Registos. E finalmente será necessário
configurar convenientemente o Query.

2000 J Artur Vale Serrano, Carlos Carvalhal 63


Apontamentos de SGBD Parte II

Cada tipo de Action Query é representado por um icon próprio na Janela da BD, conforme é
possível verificar na Figura 48. Executar um Action Query (dar um duplo click sobre o item
correspondente da Janela da BD ou executar o comando Query→Run) corresponde a executar a acção
que lhe está associada, no entanto, se se pretender, somente, visualizar a lista de Registos produzida
pelo Query dever-se-á executar o comando View→Datasheet View.

7.3.1.- CONSTRUÇÃO DO MAKE-TABLE QUERY “CONSTRÓI TABELA “ALUNO + CURSO””


Como o seu nome indica, este Make-Table Query vai permitir construir uma Tabela que
combina dados oriundos das Tabelas Aluno e Curso, que se designará “Aluno + Curso”. Os
procedimentos a seguir na sua construção são os apresentados na Caixa de Instruções seguinte:

8 Construir o Make-Table Query “Constrói Tabela “Aluno + Curso”” com base na


informação apresentada na Figura 51 e Figura 52. Este Query deverá ser construído
como se de um Select Query se tratasse, devendo-se, na fase final, executar o comando
Query→Make-Table Query.... Seguidamente aparecerá a Caixa de Diálogo representada na
Figura 51 onde deve ser introduzido o nome, e a localização, no caso de se tratar duma
Tabela exterior à BD, da Tabela a ser criada pelo Query. Finalmente deverse-á
configurar-lo com base na informação apresentada na Figura 52.
8 Executar o Query e analisar o seu comportamento.

Figura 51.- Caixa de Diálogo de Configuração de Make-Table Queries.

2000 J Artur Vale Serrano, Carlos Carvalhal 64


Apontamentos de SGBD Parte II

Figura 52.- Make-Table Query “Constrói a Tabela “Aluno + Curso”” em Modo de Desenho.

7.3.2.- CONSTRUÇÃO DO DELETE QUERY “REMOVE OS ALUNOS COM MENOS DE 18 ANOS DA


TABELA “BACKUP: ALUNO”
Como o seu nome indica, este Delete Query vai remover os Alunos com menos de 18 anos de
idade da Tabela Backup: Aluno. Os procedimentos a seguir na sua construção são os apresentados na
Caixa de Instruções seguinte:

8 Criar uma cópia da Tabela Aluno e baptizá-la com o nome Backup: Aluno.

8 Construir o Delete Query “Remove os Alunos com menos de 18 anos da Tabela

“Backup: Aluno”” com base na informação apresentada na Figura 53. Este Query deverá
ser construído como se de um Select Query se tratasse, devendo-se, na fase final,
executar o comando Query→Delete Query. Seguidamente dever-se-á configurar-lo com
base na informação apresentada na Figura 53. Neste tipo de Query existem 2 tipos de
Campos, aqueles cujos valores vão ser apagados dos Registos da Tabela em causa (têm
o valor From na linha Delete da Grelha QBE) e aqueles usados na definição do criterio de
selecção dos Registos a serem removidos (têm o valor Where na linha Delete da Grelha
QBE). Neste caso concreto vamos remover todos os Campos ([Backup: Aluno].*) da
Tabela Aluno dos Registos onde a Idade seja <=18.
8 Executar o Query e analisar o seu comportamento.

2000 J Artur Vale Serrano, Carlos Carvalhal 65


Apontamentos de SGBD Parte II

Figura 53.- Delete Query “Remove os Alunos com menos de 18 anos da Tabela “Backup: Aluno”” em Modo de
Desenho.

7.3.3.- CONSTRUÇÃO DO APPEND QUERY “ADICIONA À TABELA “BACKUP: ALUNO” OS ALUNOS


COM <=18 ANOS”

Como o seu nome indica, este Append Query vai adicionar à Tabela Backup: Aluno os Alunos
com menos de 18 anos de idade da Tabela Aluno. Os procedimentos a seguir na sua construção são os
apresentados na Caixa de Instruções seguinte:

2000 J Artur Vale Serrano, Carlos Carvalhal 66


Apontamentos de SGBD Parte II

8 Construir o Append Query “Adiciona à Tabela “Backup: Aluno” os Alunos com

<=18 anos” com base na informação apresentada na Figura 54 e Figura 55. Este Query
deverá ser construído como se de um Select Query se tratasse, devendo-se, na fase final,
executar o comando Query→Append Query.... Seguidamente aparecerá a Caixa de Diálogo
representada na Figura 54 onde deve ser introduzido o nome, e a localização, no caso de
se tratar duma Tabela exterior à BD, da Tabela à qual vão ser adicionados os Registos.
Finalmente deverse-á configurar-lo com base na informação apresentada na Figura 55.
A Grelha QBE associada a este tipo de Queries apresenta 2 tipos de Campos, aqueles
que vão definir o Registo a ser adicionado à Tabela (na linha Append To deve ser indicado
o nome do Campo destino onde vai ficar guardado o valor do Campo origem) em causa
e aqueles usados na definição de critérios de selecção de Registos das Tabelas fonte.
Neste caso concreto vamos copiar o valor de todos os Campos da Tabela Aluno para os
Campos do mesmo nome da Tabela Backup: Aluno e para os Registos onde a Idade seja
<=18 anos.
8 Executar o Query e analisar o seu comportamento.

Figura 54.- Caixa de Diálogo de Configuração de Append Queries.

2000 J Artur Vale Serrano, Carlos Carvalhal 67


Apontamentos de SGBD Parte II

Figura 55.- Append Query “Adiciona à Tabela “Backup: Aluno” os Alunos com <=18 anos” em Modo de Desenho.

7.3.4.- CONSTRUÇÃO DO UPDATE QUERY “PASSA PARA MAIÚSCULA O NOME DOS CURSOS”
Como o seu nome indica, este Update Query vai passar para maiúscula o nome dos Cursos da
Tabela Curso. Os procedimentos a seguir na sua construção são os apresentados na Caixa de
Instruções seguinte:

8 Construir o Update Query “Passa para Maiúscula o Nome dos Alunos” com base
na informação apresentada na Figura 56. Este Query deverá ser construído como se de
um Select Query se tratasse, devendo-se, na fase final, executar o comando Query→Update
Query. Seguidamente dever-se-á configurar-lo com base na informação apresentada na
Figura 56. A Grelha QBE associada a este tipo de Queries apresenta 2 tipos de Campos,
aqueles que vão ser alterados (na linha Update To deve ser inscrito o novo valor do
Campo) e aqueles usados na definição do critério de selecção dos Registos que vão ser
alterados. Neste caso concreto vamos passar para maiúscula o valor do Campo
Designação (UCase([Designação]) de todos os Registos da Tabela Curso.
8 Executar o Query e analisar o seu comportamento.

2000 J Artur Vale Serrano, Carlos Carvalhal 68


Apontamentos de SGBD Parte II

Figura 56.- Update Query “Passa para Maiúscula o Nome dos Cursos” em Modo de Desenho.

2000 J Artur Vale Serrano, Carlos Carvalhal 69


Apontamentos de SGBD Parte II

Tutorial 8.- AUTOMATIZAÇÃO DOS FORMS ATRAVÉS DE MACROS


Objectivos: NESTE TUTORIAL DESCREVER-SE-ÃO OS PROCEDIMENTOS NECESSÁRIOS À CONSTRUÇÃO DE MACROS NO MS
ACCESS E À SUA UTILIZAÇÃO NA AUTOMATIZAÇÃO DOS FORMS. ISSO SERÁ CONSEGUIDO ATRAVÉS DA
IMPLEMENTAÇÃO DOS FORMS “PESQUISA DE ALUNOS” E “INSCRIÇÃO DOS ALUNOS NAS DISCIPLINAS”.

8.1.- CONSTRUÇÃO DE MACROS NO MS ACCESS


Uma Macro é simplesmente uma lista de Comandos, gravada sob a forma de um objecto, que
permite automatizar operações que decorrem da mesma forma sempre que são executadas. São
usualmente invocadas em resposta a um evento. Para construir uma nova Macro é necessário accionar
o botão New da Janela da BD (ver Figura 57), sendo a sua Interface de Desenho a apresentada na
Figura 60. Esta Interface de Desenho está dividida em 2 secções, uma secção superior constituída por
uma grelha, que apresenta usualmente 2 colunas, Action e Comment (para tornar visível a 3ª coluna,
Macro Name, é necessário executar o comando View→Macro Names), e onde é apresentada a lista das

acções a serem executadas pela Macro, e uma secção inferior onde são descritos os argumentos
associados a estas acções. Na secção inferior também está presente uma área onde é apresentada uma
mensagem de ajuda. O objectivo da coluna Macro Names é permitir definir várias Macros dentro do
mesmo objecto Macro.

Figura 57.- Janela da BD com o separador Macro seleccionado.

8.1.1.- CONSTRUÇÃO DO FORM “PESQUISA DE ALUNOS”


Como o seu nome indica este Form vai permitir fazer Pesquisa de Alunos a partir do seu Nº
Mecanográfico. Os controlos de pesquisa (controlos Unbound) estão localizados na secção Cabeçalho
do Form, conforme pode verificar-se na Figura 59, e consiste de uma Combo Box, designada
ComboBox NMec, que permite seleccionar o Aluno a localizar, e uma Text Box, designada TextBox

Nome, onde é apresentado o Nome do Aluno. Uma vez seleccionado um Aluno na Combo Box atrás

2000 J Artur Vale Serrano, Carlos Carvalhal 70


Apontamentos de SGBD Parte II

referida será executada uma Macro, apresentada na Figura 60, que fará com que os dados do Aluno
em causa sejam apresentados na secção Detalhe do Form. Isso é conseguido graças ao Form ter sido
construído a partir de um Parameter Query que só mostra os dados do Aluno cujo Nº Mecanográfico é
o indicado na Combo Box atrás referida, conforme apresentado na Figura 58. Este Form vai ser
configurado de modo a só permitir alterar os dados dos Registos já existentes, não sendo possível
inserir novos Registos nem remover Registos já existentes. A Macro para o Form Pesquisa de
Alunos além de fazer a actualização da informação apresentada no Form (através do seu Requery),

também é responsável pelo preenchimento da TextBox Nome com o Nome do Aluno cujo Nº
Mecanográfico foi seleccionado na ComboBox NMec. Essa Macro deve ser invocada sempre que
aconteça o evento After Update na ComboBox NMec, i.e., depois do seu valor ter sido alterado.

8 Construir o Parameter Query Query para o Form Pesquisa de Alunos com base
na informação apresentada na Figura 58. Prestar especial atenção à coluna NMec.,

responsável pela definição do critério de filtragem (serão apresentados os dados dos


Alunos cujo NMec seja o apresentado no controlo ComboBox NMec do Form Pesquisa de Alunos.

Figura 58.- Parameter Query “Query para o Form Pesquisa de Alunos” em Modo de Desenho.

8 Copiar o Form Entrada de Alunos e gravá-lo com o nome Pesquisa de Alunos.

8 Modificar a propriedade Record Source do novo Form assim criado para o


valor Query para o Form Pesquisa de Alunos. Inserir a Combo Box e a Text Box, na secção
Cabeçalho, conforme apresentado na Figura 59 (estes controlos são Unbounds, portanto a sua

2000 J Artur Vale Serrano, Carlos Carvalhal 71


Apontamentos de SGBD Parte II

propriedade Control Source deve ficar vazia). A Text Box deve designar-se TextBox Nome

(propriedade Name: TextBox Nome) e a ComboBox deverá ter as seguintes propriedades: Name:

ComboBox NMec | Control Source: | Row Source Type: Table/Query | Row Source: SELECT
DISTINCTROW [Aluno].[NMec], [Aluno].[Nome] FROM Aluno | Column Count: 2 | Columns Widths:
1,166cm;5cm | List Width: 6,164cm | Bound Column: 1 | Limit to List: Yes | After Update:
Macro para o Form Pesquisa de Alunos.Localizar Aluno.

8 Modificar as propriedades Allow Deletions e Allow Additions do Form para No ,

por forma a não ser possível nem adicionar nem remover Registos a partir deste Form.

Figura 59.- Form “Pesquisa de Alunos” em Modo de Desenho.

8 Construir a Macro para o Form Pesquisa de Alunos com base na informação


apresentada na Figura 60. A acção SetValue deverá ter os argumentos Item:

[Forms]![Pesquisa de Alunos]![TextBox Nome] e Expression:

DLookUp("[Aluno]![Nome]";"Aluno";"[Aluno]![NMec]=Forms![Pesquisa de Alunos]![ComboBox

NMec]"). A acção Requery não apresenta argumentos.

2000 J Artur Vale Serrano, Carlos Carvalhal 72


Apontamentos de SGBD Parte II

Figura 60.- Macro “Macro para o Form Pesquisa de Alunos” em Modo de Desenho.

8.2.- UTILIZAÇÃO DE MACROS NUM FORM/SUBFORM


No MS Access 2000, existem algumas restrições na utilização das Macros nos SubForms, o que
não acontecia nas versões anteriores. Estas restrições prendem-se com o acesso aos controlos do
SubForm, o que obriga à execução da acção pretendida duma forma indirecta através da acção
RunCode. A Figura 68 apresenta um exemplo de utilização desta acção.

8.2.1.- CONSTRUÇÃO DO FORM/SUBFORM “INSCRIÇÃO DOS ALUNOS NAS DISCIPLINAS”


Como o seu nome indica este Form vai permitir efectuar as Inscrições dos Alunos nas
Disciplinas. Trata-se dum Form com SubForm, onde, na secção Form, são apresentados alguns dados
referentes ao Aluno a inscrever e ao seu Curso, e, na secção SubForm, a lista das Inscrições em
curso (aquelas que ainda não têm Nota lançada), para o Aluno indicado na secção Form (para o que
vai ser necessário desenvolver um Query), sendo possível adicionar novas Inscrições. A inserção de
novas Inscrições é feita recorrendo a uma Combo Box que apresenta, na sua lista, somente as
Disciplinas nas quais o Aluno pode inscrever-se, o que, como veremos de seguida, vai obrigar ao

desenvolvimento dum Query um pouco elaborado e à construção de uma Macro que actualize esta
lista sempre que ela seja mostrada.

8 Construir o Select Query Query para o Form Inscrição dos Alunos nas

Disciplinas com base na informação apresentada na Figura 61.

2000 J Artur Vale Serrano, Carlos Carvalhal 73


Apontamentos de SGBD Parte II

Figura 61.- Select Query “Query para o Form Inscrição dos Alunos nas Disciplinas” em Modo de Desenho.

8 Construir o Form Inscrição dos Alunos nas Disciplinas, a partir do Query para

o Form Inscrição dos Alunos nas Disciplinas e com base na informação apresentada na
Figura 62. A ligação com o SubForm deve ser feita através dos Campos NMec, do Form,
e RefNMec, do SubForm, portanto a propriedade Link Master Fields, do SubForm, deverá
ter o valor NMec e a propriedade Link Child Fields, do SubForm, deverá ter o valor
RefNMec.

2000 J Artur Vale Serrano, Carlos Carvalhal 74


Apontamentos de SGBD Parte II

Figura 62.- Form “Inscrição dos Alunos nas Disciplinas” em Modo de Desenho.

8.2.1.1.- CONSTRUÇÃO DO SUBFORM “SUBFORM INSCRIÇÃO DOS ALUNOS NAS DISCIPLINAS”


Como já foi atrás referido, o objectivo deste SubForm é mostrar a lista das Inscrições em curso
para o Aluno em causa e permitir a sua Inscrição em novas Disciplinas. Dessa forma foi necessário
desenvolver o Query para o SubForm Inscrição dos Alunos nas Disciplinas, representado
na Figura 63. Este Form apresenta uma Combo Box, designada RefCódDisciplina, que permite
seleccionar a Disciplina na qual se pretende Inscrever o Aluno, de entre as Disciplinas nas quais ele
pode inscrever-se, conforme descrito mais afrente. Esta Combo Box terá de ser actualizada sempre
que for accionada por forma a só permitir a selecção duma Disciplina válida. Na secção Rodapé do
Form estão presentes 2 controlos Unbounds responsáveis pelo cálculo do total de Créditos das
Inscrições do Aluno e a sua quantidade, conforme pode verificar-se na Figura 64.

8 Construir o Select Query Query para o SubForm Inscrição dos Alunos nas

Disciplinas com base na informação apresentada na Figura 63. Prestar especial atenção
ao Join do tipo 2 definido entre as Tabelas Inscrição e Nota e ao criterio definido para o
Campo Nota.

2000 J Artur Vale Serrano, Carlos Carvalhal 75


Apontamentos de SGBD Parte II

Figura 63.- Select Query “Query para o SubForm Inscrição dos Alunos nas Disciplinas” em Modo de Desenho.

8 Construir o Form SubForm Inscrição dos Alunos nas Disciplinas, com o Layout

Columnar, a partir do Query para o SubForm Inscrição dos Alunos nas Disciplinas e com
base na informação apresentada na Figura 64. A Combo Box RefCódDisciplina deverá ter
as seguintes propriedades: Control Source: RefCódDisciplina | Row Source Type:

Table/Query | Row Source: SELECT [Query Disciplinas em que o Aluno pode Inscrever-
se].[RefCódDisciplina], [Query Disciplinas em que o Aluno pode Inscrever-
se].[Designação] FROM [Query Disciplinas em que o Aluno pode Inscrever-se] | Column
Count: 2 | Columns Widths: 0,717cm;5,877cm | List Width: 7,019cm | Bound Column: 1 |
Limit to List: Yes | On Enter: Macro para o Form Inscrição dos Alunos nas

Disciplinas.Actualiza Lista de Disciplinas. A Combo Box TipoInscrição deverá ter as


seguintes propriedades: Control Source: TipoInscrição | Row Source Type: Value List |

Row Source: "N";"Normal";"M";"Melhoria de Nota";"R";"Recurso" | Column Count: 2 |


Columns Widths: 0cm;2,408cm | List Width: 2.408cm | Bound Column: 1 | Limit to List:

Yes. As Text Boxes presentes na secção Rodapé são Unbounds, tendo as suas propriedades
Name e Control Source, respectivamente, os valores NDisciplina e
=Count([RefCódDisciplina]), para a Text Box mais à esquerda, e, TCréditos e
=Sum([NCréditos]), para a Text Box mais à direita.

2000 J Artur Vale Serrano, Carlos Carvalhal 76


Apontamentos de SGBD Parte II

Figura 64.- Form “SubForm Inscrição dos Alunos nas Disciplinas” em Modo de Desenho.

8.2.1.1.1.- CONSTRUÇÃO DO SELECT QUERY “QUERY DISCIPLINAS EM QUE O


ALUNO PODE INSCREVER-SE”
O objectivo deste Query é gerar a lista que vai ser apresentada pela Combo Box
RefCódDisciplina do SubForm Inscrição dos Alunos nas Disciplinas. Para determinar esta

lista vai ser necessário fazer a “diferença” entre os resultados de outros 2 Queries, o Query
Disciplinas do Curso do Aluno a Inscrever e o Query Disciplinas em que o Aluno não

se pode Inscrever. O primeiro destes Queries é um Parameter Query que apresenta a lista das

Disciplinas do Curso do Aluno em causa, conforme pode verificar-se na Figura 65. O segundo destes
Queries é também um Parameter Query que apresenta a lista das Disciplinas em que o Aluno em
causa já tem uma Inscrição, em curso ou com Nota positiva, conforme pode verificar-se na Figura 66.
A “diferença” entre estes 2 Queries é feita conforme indicado na Figura 67.

8 Construir o Parameter Query Query Disciplinas do Curso do Aluno a Inscrever

com base na informação apresentada na Figura 65. Prestar especial atenção ao critério
definido para o Campo RefCódCurso.

Figura 65.- Parameter Query “Query Disciplinas do Curso do Aluno a Inscrever” em Modo de Desenho.

8 Construir o Parameter Query Query Disciplinas em que o Aluno não se pode

Inscrever com base na informação apresentada na Figura 66. Prestar especial atenção ao
Join do tipo 2 definido entre as Tabelas Inscrição e Nota e aos critérios definidos para os
Campos Nota e RefNMec.

2000 J Artur Vale Serrano, Carlos Carvalhal 77


Apontamentos de SGBD Parte II

Figura 66.- Select Query “Query Disciplinas em que o Aluno não se pode Inscrever” em Modo de Desenho.

8 Construir o Select Query Query Disciplinas em que o Aluno pode Inscrever-se

com base na informação apresentada na Figura 67. Prestar especial atenção ao Join do
tipo 2 definido entre os Queries Query Disciplinas do Curso do Aluno a Inscrever e Query

Disciplinas em que o Aluno não se pode Inscrever e ao critério definido para o Campo
RefCódDisciplina.

Figura 67.- Select Query “Query Disciplinas em que o Aluno pode Inscrever-se” em Modo de Desenho.

8.2.1.2.- CONSTRUÇÃO DA MACRO “MACRO PARA O FORM INSCRIÇÃO DOS ALUNOS NAS
DISCIPLINAS”
O objectivo desta Macro é actualizar a lista apresentada pela Combo Box RefCódDisciplina, o
que é conseguido fazendo o seu Requey, conforme pode verificar-se na Figura 68. Esta Macro deve
ser invocada sempre que aconteça o evento On Enter na Combo Box, i. é., sempre que for requerida a
visualização da lista que lhe está associada.

2000 J Artur Vale Serrano, Carlos Carvalhal 78


Apontamentos de SGBD Parte II

8 Construir a Macro para o Form Inscrição dos Alunos nas Disciplinas com base
na informação apresentada na Figura 68. A acção RunCode deverá ter o argumento
Function Name: [RefCódDisciplina].Requery e tem como objectivo executar o método
Requery do controlo RefCódDisciplina.

Figura 68.- Macro “Macro para o Form Inscrição dos Alunos nas Disciplinas” em Modo de Desenho.

8.2.1.3.- UTILIZAÇÃO DE CONDICIONAIS NAS MACROS


As Macros do MS Access suportam a definição das Condições necessárias à realização duma
determinada Acção. Para fazé-lo é necessário, inicialmente, tornar visível a coluna Condition, na
interface de desenho duma dada Macro; para fazé-lo é necessário executar o comando
View→Conditions. Seguidamente é necessário definir nesta coluna, e para a linha correspondente à

acção a condicionar, a Condição que tem de ser verdadeira para que a acção seja realizada. Se uma
mesma Condição condiciona a execução de mais do que uma Acção, nas Acções contiguas sub-
sequentes pode-se abreviar a escrita da Condição, substituíndo-a por “...”. Como é óbvio, todas as
Acções que não tenham nenhuma Condição na coluna Conditions serão de execução incondicional.
Verificar o que foi aqui dito analizando a Figura 73.

8.2.2.- CONSTRUÇÃO DO FORM “LANÇAMENTO DE NOTAS”


Este Form, como o seu nome indica, permite efectuar o lançamento da Nota obtida por um
Aluno numa dada Inscrição, numa Disciplina. Como pode verificar-se, na Figura 70, este Form
apresenta no seu Cabeçalho uma série de Controlos Unbound que serão usados na selecção da
Disciplina, ComboBox CódDisciplina, do Aluno, ComboBox NMec, e da Inscrição (apesar do Form
Inscrição dos Alunos das Disciplinas não permitir que um Aluno tenha mais do que uma Inscrição
válida em cada momento), ComboBox CódInscrição, e na introdução da Nota, TextBox Nota, e da
Data do seu lançamento, TextBox Data. Está igualmente presente no Cabeçalho do Form um Command

2000 J Artur Vale Serrano, Carlos Carvalhal 79


Apontamentos de SGBD Parte II

Button que quando accionado fará o Lançamento da Nota, através da execução da Macro para o

Form Lançamento de Notas.Lançar Nota, representado na Figura 73. Este Form foi construído a

partir do Parameter Query Query para o Form Lançamento das Notas, representado na Figura 69,
permitindo, assim, que só sejam apresentados os Alunos com Inscrições na Disciplina seleccionada.
Apesar do Lançamento das Notas dever ser feito usando os Controlos do Cabeçalho do Form, também
é possível fazé-lo usando os Controlos da Secção Detalhe.
Quando for feita uma selecção na ComboBox CódDisciplina será executada a Macro para o
Form Lançamento de Notas. Actualiza Designação Disciplina e Lista de Alunos
responsável, entre outras coisas, pela actualização da Lista de Registos apresentada pelo Form. As
Combo Boxes ComboBox NMec e ComboBox CódDisciplina, são baseadas, respectivamente, nos
Parameter Queries Parameter Query Alunos Inscritos numa Disciplina, representado na
Figura 71, e Parameter Query Inscrições Válidas dum Aluno numa Disciplina, representado
na Figura 72. Estes Parameter Queries garantem, juntamente com o método Requery, invocado na
propriedade On Enter de cada uma das Combo Boxes, o sincronismo entre elas.

8 Construir o Parameter Query Query para o Form Lançamento de Notas com base
na informação apresentada na Figura 69. Prestar especial atenção ao Join do tipo 2
definido entre as Tabelas Inscrição e Nota e ao critério definido para o Campo
RefCódDisciplina.

Figura 69.- Parameter Query “Query para o Form Lançamento de Notas” em Modo de Desenho.

2000 J Artur Vale Serrano, Carlos Carvalhal 80


Apontamentos de SGBD Parte II

8 Construir o Form Lançamento de Notas, com o Layout Columnar, a partir do Query


para o Form Lançamento de Notas e com base na informação apresentada na Figura 70. A
primeira das Combo Boxes deverá ter as seguintes propriedades: Name: ComboBox

CódDisciplina | Row Source Type: Table/Query | Row Source: SELECT


[Disciplina].[CódDisciplina], [Disciplina].[Designação] FROM Disciplina | Column Count:
2 | Columns Widths: 0,854cm;6,117cm | List Width: 6,958cm | Bound Column: 1 | Limit to
List: Yes | On Enter: =[ComboBox CódDisciplina].Requery | After Update: Macro para o

Form Lançamento de Notas.Actualiza Designação Disciplina e Lista de Alunos. A segunda


das Combo Boxes deverá ter as seguintes propriedades: Name: ComboBox NMec | Row Source

Type: Table/Query | Row Source: Query Alunos Inscritos numa Disciplina | Column Count: 2
| Columns Widths: 1cm;6cm | List Width: 7cm | Bound Column: 1 | Limit to List: Yes | On
Enter: =[ComboBox NMec].Requery | After Update: Macro para o Form Lançamento de

Notas.Actualiza Nome Aluno. A terceira das Combo Boxes deverá ter as seguintes
propriedades: Name: ComboBox CódInscrição| Row Source Type: Table/Query | Row Source:

Query Inscrições Validas dum Aluno numa Disciplina | Column Count: 3 | Columns Widths:
1cm;0,507cm;1cm | List Width: 2,501cm | Bound Column: 1 | Limit to List: Yes | On Enter:

=[ComboBox CódInscrição].Requery. A primeira das Text Boxes recebe o nome de TextBox


Designação (propriedade Name: TextBox Designação), a segunda o nome de TextBox
Nome (propriedade Name: TextBox Nome), a terceira o nome de TextBox Nota
(propriedade Name: TextBox Nota) e, finalmente, a quarta o nome de TextBox Data
(propriedade Name: TextBox Data). O Command Button deverá ter as seguintes
propriedades: Name: Lançar Nota | On Click: Macro para o Form Lançamento de Notas.Lança

Nota).

Figura 70.- Form “Lançamento de Notas” em Modo de Desenho.

2000 J Artur Vale Serrano, Carlos Carvalhal 81


Apontamentos de SGBD Parte II

8 Construir o Parameter Query Query Alunos Inscritos numa Disciplina com base
na informação apresentada na Figura 71. Prestar especial atenção ao Join do tipo 2
definido entre as Tabelas Inscrição e Nota e aos critérios definidos para os Campos
RefCódDisciplina e RefCódInscrição.

Figura 71.- Parameter Query “Query Alunos Inscritos numa Disciplina” em Modo de Desenho.

8 Construir o Parameter Query Query Inscrições Válidas dum Aluno numa

Disciplina com base na informação apresentada na Figura 72. Prestar especial atenção
ao Join do tipo 2 definido entre as Tabelas Inscrição e Nota e aos critérios definidos para
os Campos RefCódDisciplina ([Forms]![Lançamento de Notas]![ComboBox CódDisciplina]),

RefCódInscrição ([Forms]![Lançamento de Notas]![ComboBox NMec]) e RefCódInscrição (Is

Null).

2000 J Artur Vale Serrano, Carlos Carvalhal 82


Apontamentos de SGBD Parte II

Figura 72.- Parameter Query “Query Inscrições Válidas dum Aluno numa Disciplina” em Modo de Desenho.

8.2.2.1.- CONSTRUÇÃO DA MACRO “MACRO PARA O FORM LANÇAMENTO DE NOTAS”


Este Objecto Macro contém as 3 Macros necessárias à automatização do Form Lançamento de
Notas, conforme pode verificar-se na Figura 73. A primeira destas Macros, Macro para o Form

Lançamento de Notas.Actualiza Designação Disciplina e Lista de Alunos, associada ao

evento After Update da ComboBox CódDisciplina, é responsável pelo preenchimento da TextBox


Designação, com o nome da Disciplina seleccionada nesta Combo Box, e pela filtragem dos Registos

apresentados no Form. A segunda Macro, Macro para o Form Lançamento de Notas.Actualiza


Nome Aluno, associada ao evento After Update da ComboBox NMec, é a responsável pelo
preenchimento da TextBox Nome, com o nome do Aluno seleccionado na ComboBox. A terceira
Macro, Macro para o Form Lançamento de Notas.Lança Nota, associada ao evento On Click do
Command Button Lançar Nota, é a responsável pela verificação das condições necessárias ao
Lançamento da Nota, pelo Lançamento da Nota e pela actualização dos Controlos do Form. O
Lançamento da Nota será feito através da execução do Append Query, Query Lançar uma Nota,
representado na Figura 74. Este Append Query tem a particularidade de “não ter Tabelas”, i.e., o
Registo a ser adicionado, à Tabela Nota, é composto a partir duma série de parâmetros extraídos do
Form Lançamento de Notas.

8 Construir a Macro para o Form Lançamento de Notas com base na informação


apresentada na Figura 73. Na primeira Macro, Actualiza Designação Disciplina e Lista

de Alunos, a acção Requery não terá argumentos, a acção SetValue deverá ter os
argumentos: Item: [Forms]![Lançamento de Notas]![TextBox Designação] | Expression:

DLookUp("[Disciplina]![Designação]";"Disciplina";"[Disciplina]![CódDisciplina]=

Forms![Lançamento de Notas]![ComboBox CódDisciplina]"). Na segunda Macro, Actualiza

Nome Aluno, a acção SetValue deverá ter os argumentos: Item: [Forms]![Lançamento de

2000 J Artur Vale Serrano, Carlos Carvalhal 83


Apontamentos de SGBD Parte II

Notas]![TextBox Nome]| Expression: DLookUp("[Aluno]![Nome]";"Aluno";"[Aluno]![NMec]=

Forms![Lançamento de Notas]![ComboBox NMec]"). Na terceira Macro, Lança Nota, as acções


MsgBox (Messagem: O Código da Inscrição, a Nota e a Data não podem ser Nulos! | Beep: Yes

| Type: Critical | Title: Campos Obrigatórios não Preenchidos) e StopMacro estão


condicionadas à condição IsNull([Forms]![Lançamento de Notas]![ComboBox CódInscrição])

Or IsNull([Forms]![Lançamento de Notas]![TextBox Nota]) Or IsNull([Forms]![Lançamento de

Notas]![TextBox Data]), a acção OpenQuery deverá ter os argumentos: Query Name: Query

Lançar uma Nota | View: Datasheet | Data Mode: Edit; a primeira das acções SetValue

deverá ter os argumentos: Item: [Forms]![Lançamento de Notas]![ComboBox NMec] |

Expression: Null; a segunda das acções SetValue deverá ter os argumentos: Item:

[Forms]![Lançamento de Notas]![TextBox Nome] | Expression: Null; a terceira das acções


SetValue deverá ter os argumentos: Item: [Forms]![Lançamento de Notas]![ComboBox

CódInscrição] | Expression: Null; a quarta das acções SetValue deverá ter os argumentos:
Item: [Forms]![Lançamento de Notas]![TextBox Nota] | Expression: Null; e a quinta acção
SetValue deverá ter os argumentos: Item: [Forms]![Lançamento de Notas]![TextBox Data] |

Expression: Date(). Nesta mesma Macro a acção Requery não terá argumentos.

Figura 73.- Macro “Macro para o Form Lançamento de Notas” em Modo de Desenho.

8 Construir o Append Query Query Lançar uma Nota com base na informação

2000 J Artur Vale Serrano, Carlos Carvalhal 84


Apontamentos de SGBD Parte II

apresentada na Figura 74. Este Append Query adicionará Registos à Tabela Nota. Prestar
especial atenção à identificação dos Campos cujos valores vão compor o Registo a
adicionar à Tabela Nota (CódInscrição: [Forms]![Lançamento de Notas]![ComboBox

CódInscrição], Nota: [Forms]![Lançamento de Notas]![TextBox Nota] e Data:

[Forms]![Lançamento de Notas]![TextBox Data]).

Figura 74.- Append Query “Query Lançar uma Nota” em Modo de Desenho.

2000 J Artur Vale Serrano, Carlos Carvalhal 85


Apontamentos de SGBD Parte II

Tutorial 9.- CONSTRUÇÃO DE REPORTS NO MS ACCESS


Objectivos: NESTE TUTORIAL DESCREVER-SE-ÃO OS PROCEDIMENTOS NECESSÁRIOS À CONSTRUÇÃO DE REPORTS NO MS,
NOMEADAMENTE REPORTS QUE APRESENTAM CÁLCULOS DE TOTAIS SOBRE OS REGISTOS APRESENTADOS. ISSO
SERÁ CONSEGUIDO ATRAVÉS DA IMPLEMENTAÇÃO DOS REPORTS “ALUNOS INSCRITOS NAS DISCIPLINAS” E “FICHA DE
NOTAS”.

9.1.- CONSTRUÇÃO DE REPORTS NO MS ACCESS


Os Reports são objectos do MS Access que permitem sumarizar a informação contida em
Tabelas ou produzida por Queries, sendo um dos três mecanismos, disponíveis, de visualização de
dados. Os outros dois mecanismos são os Forms e os Datasheets. À semelhança dos Datasheets, os
Reports mostram múltiplos Registos simultaneamente. No entanto, permitem controlar o formato de
apresentação da informação, o que não acontece nos Datasheets. O resultado de um Report é um
documento destinado à visualização no monitor ou à impressão em papel (a única interacção possível,
entre o utilizador e o Report, em Modo de Visualização, é fazer o zoom e mudar de página), razão
pela qual o Modo de Visualização dum Report é designado Preview, como pode verificar-se na Janela
da BD, representada na Figura 57.
Em termos de estrutura um Report apresenta um conjunto fixo de secções (Report Header,
Report Footer, Page Header, Page Footer e Detail) e um conjunto variável que é função do número de
agrupamentos que forem definidos sobre os dados a serem apresentados pelo Report. Por cada novo
agrupamento passa a existir um Header e um Footer, apesar deste último não estar usualmente visível.
A definição de novos Grupos e configuração da visibilidade das suas secções Header e Footer é
efectuada através da Caixa de Diálogo de Configuração de Grupos e Ordenações, representada na
Figura 82, a qual é invocada através do comando View→Sorting and Grouping.
Uma vez definida a Fonte de Registos a ser usada pelo Report (Tabela ou Query), e tal como
acontecia com os Forms, poder-se-á optar por um dos 2 métodos, disponibilizados pelo MS Access,
para a construção do Report. Este métodos, presentes como itens na Janela da BD representada na
Figura 57, são os seguintes:
Ä Create Report in Design View: Permite criar um Report de raíz.
Ä Create Report by using Wizard: Permite criar um novo Report usando o Auxiliar. Auxiliar
esse que, através de uma sequência de caixas de diálogo, representadas na Figura 77, obtém
a informação necessária à construção do Report, nomeadamente o objecto fonte de
Registos, os Campos a incluir no Report, os agrupamentos e ordenações a aplicar aos

2000 J Artur Vale Serrano, Carlos Carvalhal 86


Apontamentos de SGBD Parte II

Registos e o seu aspecto gráfico. Uma vez criado o Report usando este precesso é possível
editá-lo de modo a adaptá-lo ao aspecto gráfico pretendido.

Por dar um contributo significativo na construção dos Reports utilizaremos neste curso o método
Create Report by using Wizard na criação dos Reports, efectuando de seguida as alterações

necessárias de modo a adaptá-lo aos objectivos pretendidos.

Figura 75.- Janela da BD com o separador Report seleccionado.

9.1.1.- CONSTRUÇÃO DO REPORT “ALUNOS INSCRITOS NAS DISCIPLINAS”


Este Report, representado na Figura 78, produzirá um documento contendo a listagem dos
Alunos inscritos em cada uma das Disciplinas, para o ano corrente, para o que tornou-se necessário
construir o Query para o Report Alunos Inscritos nas Disciplinas, representado na Figura
76. Os Alunos serão agrupados por Disciplinas e, dentro de cada Disciplina, ordenados
alfabeticamente por Nome, para o que tornou-se necessário definir o Grupo
Disciplina.Designação, conforme pode verificar-se na segunda caixa de diálogo da Figura 77.

8 Construir o Select Query Query para o Report Alunos Inscritos nas Disciplinas

com base na informação apresentada na Figura 76. Prestar especial atenção à coluna
AnoLectivo, responsável pela definição do critério de filtragem (serão apresentados, para
cada Disciplina, os dados dos Alunos nela inscritos no Ano Lectivo actual).

2000 J Artur Vale Serrano, Carlos Carvalhal 87


Apontamentos de SGBD Parte II

Figura 76.- Select Query “Query para o Report Alunos Inscritos nas Disciplinas” em Modo de Desenho.

8 Construir o Report Alunos Inscritos nas Disciplinas, baseado no Query para o

Report Alunos Inscritos nas Disciplinas e com base na informação apresentada na Figura
77. Redesenhá-lo de modo a obter o aspecto apresentado na Figura 78. Prestar especial
atenção à definição do Grupo Disciplina.Designação.

2000 J Artur Vale Serrano, Carlos Carvalhal 88


Apontamentos de SGBD Parte II

Figura 77.- Passos a seguir na construção do Report “Alunos Inscritos nas Disciplinas”.

Figura 78.- Report “Alunos Inscritos nas Disciplinas” em Modo de Desenho.

9.2.- CÁLCULO DE TOTAIS NOS REPORTS


É usual incluir nas secções Footer dos Reports controlos que efectuam cálculos de totais sobre
os Registos incluídos em cada Grupo (secção Footer de cada um dos Grupos) e eventualmente sobre

2000 J Artur Vale Serrano, Carlos Carvalhal 89


Apontamentos de SGBD Parte II

todos os Grupos (Report Footer). Tratam-se de Controlos Unbound cuja propriedade Control Source
envolve uma função de cálculo de total (Count(), Sum(), Avg(), etc.) sobre um determinado Campo.

9.2.1.- CONSTRUÇÃO DO REPORT “FICHA DE NOTAS”


Este Report, representado na Figura 81, produzirá um documento contendo, para cada Aluno, a
listagem das Disciplinas nas quais já obteve aproveitamento, com a sua respectiva Nota, assim como
também o total de Créditos obtidos e a sua Média Ponderada. Para conseguir isso foi necessário
construir o Query para o Report Ficha de Notas, representado na Figura 79. Em termos de
estrutura, os Registos serão agrupados por Aluno (Grupo NMec) e ordenados alfabeticamente por
Disciplina, conforme pode verificar-se na Figura 80.

8 Construir o Select Query Query para o Report Ficha de Notas com base na
informação apresentada na Figura 79. Prestar especial atenção ao critério definido para
a Coluna Nota e à coluna, calculada, Nota Parcial Ponderada.

Figura 79.- Select Query “Query para o Report Ficha de Notas” em Modo de Desenho.

8 Construir o Report Ficha de Notas, baseado no Query para o Report Ficha de

Notas e com base na informação apresentada na Figura 80. Redesenhá-lo de modo a


obter o aspecto apresentado na Figura 81. Prestar especial atenção ao facto dos

2000 J Artur Vale Serrano, Carlos Carvalhal 90


Apontamentos de SGBD Parte II

Controlos Nome e Curso.Designação terem sido retirados na secção Detail e incluídos na


secção NMec Header. Para tornar visível a secção NMec Footer é necessário recorrer à Caixa
de Diálogo de Configuração de Grupos e Ordenações representada na Figura 82. As
Text Boxes incluídas nesta secção são Unbound e têm, da esquerda para a direita, como
propriedade Control Source os valores =Sum([NCréditos]) e =Sum([Nota Parcial

Ponderada])/Sum([NCréditos]).

2000 J Artur Vale Serrano, Carlos Carvalhal 91


Apontamentos de SGBD Parte II

Figura 80.- Passos a seguir na construção do Report “Ficha de Notas”.

2000 J Artur Vale Serrano, Carlos Carvalhal 92


Apontamentos de SGBD Parte II

Figura 81.- Report “Ficha de Notas” em Modo de Desenho.

Figura 82.- Caixa de Diálogo de Configuração de Grupos e Ordenações.

2000 J Artur Vale Serrano, Carlos Carvalhal 93


Apontamentos de SGBD Parte II

Tutorial 10.- INTERLIGAÇÃO DOS OBJECTOS NUMA APLICAÇÃO FINAL


Objectivos: NESTE TUTORIAL DESCREVER-SE-ÃO OS PROCEDIMENTOS NECESSÁRIOS À INTERLIGAÇÃO ENTRE FORMS ATRAVÉS
DE COMMAND BUTTONS (EXEMPLIFICADO ATRAVÉS DO FORM “INSCRIÇÃO E REMOÇÃO DE ALUNOS”), À CRIAÇÃO
DE MENUS DE COMMAND BUTTONS RECORRENDO A TABULADORES , À CRIAÇÃO DE MENUBARS E, FINALMENTE, OS
PROCEDIMENTOS NECESSÁRIOS À PRODUÇÃO DA A PLICAÇÃO FINAL.

10.1.- INTERLIGAÇÃO ENTRE FORMS ATRAVÉS DE COMMAND BUTTONS


A criação de Command Buttons, usando o Auxiliar, permite, duma forma fácil e rápida, inserir
nos Forms botões que quando accionados executam operações sobre Registos, Forms, Reports, etc.,
conforme pode verificar-se na Figura 86, Figura 87, Figura 88 e Figura 91. E ainda, se o Command
Button que for inserido for da categoria Form Operations e executar a acção Open Form é possível
fazer com que o Form que vai ser aberto mostre Registos relacionados com o Registo apresentado no
Form onde está inserido o Command Button, conforme pode verificar-se na Figura 86.

10.1.1.- CONSTRUÇÃO DO FORM “INSCRIÇÃO E REMOÇÃO DE ALUNOS”


Este Form vai permitir pesquisar, duma forma intuitiva, um Aluno, efectuar eventuais alterações
dos seus dados pessoais, remové-lo, se necessário, e proceder à sua inscrição nas Disciplinas, via
Form “Inscrição dos Alunos nas Disciplinas”. Estando estas duas últimas acções associadas a
Command Buttons. A funcionalidade de Inscrição dum Aluno nas Disciplinas vai obrigar à
interligação entre os Forms “Inscrição e Remoção de Alunos” e “Inscrição dos Alunos nas
Disciplinas”, interligação essa que será feita via Nº Mecanográfico, conforme pode verificar-se na

Figura 86.

8 Fazer uma cópia do Form “Pesquisa de Alunos” e baptizá-la com o nome


“Inscrição e Remoção de Alunos”, conforme apresentado na Figura 83. Este novo Form
baseia-se no “Query para o Form Inscrição e Remoção de Alunos”, devendo-se, dessa
forma, alterar a sua propriedade Record Source para Query para o Form Inscrição e Remoção

de Alunos. A ComboBox NMec (localizada no Form Header) passa a invocar a “Macro para o

Form Inscrição e Remoção de Alunos” quando acontece o evento After Update, devendo-
se, dessa forma, alterar a sua propriedade After Update para Macro para o Form Inscrição e

Remoção de Alunos. Efectuar as restantes alterações apresentadas na Figura 83. As


instruções para a construção (usando o Auxiliar) dos Command Buttons Inscrever (com
o label “Inscrever nas Disciplinas”), Remover (com o label “Remover Aluno”) e Sair

2000 J Artur Vale Serrano, Carlos Carvalhal 94


Apontamentos de SGBD Parte II

(com o label pictórico) estão indicadas, respectivamente na Figura 86, Figura 87 e


Figura 88.

Figura 83.- Form “Inscrição e Remoção de Alunos” em Modo de Desenho.

8 Fazer uma cópia do Query “Query para o Form Pesquisa de Alunos” e baptizá-la
com o nome “Query para o Form Inscrição e Remoção de Alunos”, conforme apresentado
na Figura 84. Substituir as referências ao Form “Pesquisa de Alunos” por referências ao
Form “Inscrição e Remoção de Alunos”.

2000 J Artur Vale Serrano, Carlos Carvalhal 95


Apontamentos de SGBD Parte II

Figura 84.- Select Query “Query para o Form Inscrição e Remoção de Alunos” em Modo de Desenho.

8 Fazer uma cópia da Macro “Macro para o Form Pesquisa de Alunos” e baptizá-la
com o nome “Macro para o Form Inscrição e Remoção de Alunos”, conforme apresentado
na Figura 85. Substituir as referências ao Form “Pesquisa de Alunos” por referências ao
Form “Inscrição e Remoção de Alunos”.

Figura 85.- Macro “Macro para o Form Inscrição e Remoção de Alunos” em Modo de Desenho.

2000 J Artur Vale Serrano, Carlos Carvalhal 96


Apontamentos de SGBD Parte II

Figura 86.- Passos a seguir na construção de um Command Button da Categoria Form Operations/Open Form com
ligação entre Form (Command Inscrever).

2000 J Artur Vale Serrano, Carlos Carvalhal 97


Apontamentos de SGBD Parte II

Figura 87.- Passos a seguir na construção de um Command Button da Categoria Record Operations/Delete Record
(Command Remover).

Figura 88.- Passos a seguir na construção de um Command Button da Categoria Form Operations/Close Form
(Command Fechar).

2000 J Artur Vale Serrano, Carlos Carvalhal 98


Apontamentos de SGBD Parte II

10.2.- CONSTRUÇÃO DE MENUS


Numa aplicação é importante criar um ambiente de trabalho que permita o acesso fácil e
intuitivo as diferentes potencialidades por ela disponibilizada. Dessa forma torna-se necessário, além
de interligar convenientemente os diferentes objectos (navegação intuitiva), desenvolver Menus de
acesso às funcionalidades do sistema. É precisamente isso que vai ser feito nesta secção através do
desenvolvimento do Form “Menu Principal” apresentado na Figura 89. Notar que este Form faz uso
dum controlo da categoria Tabulador para permitir catalogarizar as diferentes funcionalidades
disponibilizadas, as quais são acedidas através de Command Buttons.

8 Construir o Form “Menu Principal”, apresentado na Figura 89, sem usar o


Auxiliar. Trata-se dum Form sem Record Source, portanto, esta propriedade deve ser
deixada em branco. A inserção de novas páginas no Tab Control é feita accionando o
botão direito do rato, quando o cursor estiver sobre este, e escolhendo a opção Insert

Page do PopUp Menu que aparecerá. A etiqueta associada a cada uma das páginas deve
ser configurada através da sua propriedade Caption. Os Command Buttons, presentes em
cada uma das páginas devem abrir o Form ou Report com o nome do seu label, dessa
forma, o Command Button Entrada de Alunos deve abrir o Form “Entrada de Alunos”, o
Command Button Ficha de Notas deve abrir o Report “Ficha de Notas” em Preview, e assim
sucessivamente. As páginas que não estão visíveis na Figura 89 têm os seguintes
Command Buttons: Página Cursos: Command Button Entrada de Cursos e Command Button

Atribuição de Disciplinas aos Cursos ; Página Disciplinas: Command Button Entrada de

Disciplinas, Command Button Lançamento de Notas e Command Button Alunos Inscritos nas

Disciplinas; Página Docentes: Command Button Entrada de Docentes. A Figura 90 e Figura


91 apresentam os passos a seguir na construção do Comman Button Entrada de Alunos e
Command Button Ficha de Notas, respectivamente.
8 Configurar as propriedades Allow Edits, Allow Deletions, Allow Additions, Data

Entry, Record Selectors e Navigation Buttons para No.

2000 J Artur Vale Serrano, Carlos Carvalhal 99


Apontamentos de SGBD Parte II

Figura 89.- Form “Menu Principal” em Modo de Desenho.

2000 J Artur Vale Serrano, Carlos Carvalhal 100


Apontamentos de SGBD Parte II

Figura 90.- Passos a seguir na construção de um Command Button da Categoria Record Operations/Open Form
(Command EntradaAlunos).

Figura 91.- Passos a seguir na construção de um Command Button da Categoria Report Operations/Preview Report
(Command FichaNotas).

10.3.- CONSTRUÇÃO DE TOOLBARS


Outra técnica de acesso às funcionalidades disponibilizadas por uma aplicação é via ToolBars.
Estas Toolbars, que podem ser de 3 tipos: ToolBar, MenuBar e PopUp, contêm um conjunto de
Menus cujas opções permitem aceder às diferentes funcionalidades da aplicação. O desenvolvimento
duma Toolbar no MS Access é feito através duma Macro que posteriormente será transformada em
Toolbar através do comando Tools→Macro→Create Menu From Macro. Esta Macro de definição da
Toolbar conterá a lista de Menus que contem, indicando para cada a Macro que o define, conforme

2000 J Artur Vale Serrano, Carlos Carvalhal 101


Apontamentos de SGBD Parte II

pode verificar-se na Figura 92. A Macro de definição de um Menu deverá conter uma entrada para
cada opção deste, indicando as acções por ela executada, conforme pode verificar-se na Figura 93.

8 Construir a Macro “BDServAcad MenuBar”, apresentada na Figura 92, que vai ser
usada na criação da MenuBar da aplicação. Esta MenuBar apresenta 5 Menus: File,

Aluno, Cursos, Disciplina e Docentes (valores do Argumento Menu Name de cada uma das
Acções). Cada uma das acções desta Macro cria um destes Menus fazendo uso da
Macro correspondente (valores do Argumento Menu Macro Name de cada uma das Acções).
Dessa forma, a 1ª Acção AddMenu terá os Argumentos Menu Name: &File e Menu Macro Name:

BDServAcad MenuBar_File; a 2ª Acção AddMenu terá os Argumentos Menu Name: &Aluno e Menu
Macro Name: BDServAcad MenuBar_Alunos; a 3ª Acção AddMenu terá os Argumentos Menu Name:

&Cursos e Menu Macro Name: BDServAcad MenuBar_Cursos; a 4ª Acção AddMenu terá os


Argumentos Menu Name: &Disciplinas e Menu Macro Name: BDServAcad MenuBar_Disciplinas ; e
a 4ª Acção AddMenu terá os Argumentos Menu Name: Docen&tes e Menu Macro Name:

BDServAcad MenuBar_Docentes. O caracter & presente no nome dos Menus define qual é a
tecla de acesso directo.
8 Depois de construir as Macros associadas a cada um dos Menus executar o
comando Tools→Macro Create Menu From Macro, seleccionando previamente a Macro
“BDServAcad MenuBar”. Uma vez feito isso aprecerá no ambiente MS Access uma ToolBar
contendo a MenuBar construída.

Figura 92.- Macro “BDServAcad MenuBar” em Modo de Desenho.

8 Construir a Macro “BDServAcad MenuBar_Alunos”, apresentada na Figura 93, que


define o Menu Aluno da MenuBar. Cada uma das entradas desta Macro corresponde a

2000 J Artur Vale Serrano, Carlos Carvalhal 102


Apontamentos de SGBD Parte II

uma entrada deste Menu, sendo responsável pela abertura do Form/Report


correspondente. Dessa forma a sua Acção será OpenForm/Open Report e o Argumento
Form/Report Name indicará qual o Form/Report que vai ser aberto quando for accionada
esta opção.

Figura 93.- Macro “BDServAcad MenuBar_Alunos” em Modo de Desenho.

8 Construir a Macro “BDServAcad MenuBar_Cursos”, apresentada na Figura 94, que


define o Menu Cursos da MenuBar. Cada uma das entradas desta Macro corresponde a
uma entrada deste Menu, sendo responsável pela abertura do Form correspondente.
Dessa forma a sua Acção será OpenForm e o Argumento Form Name indicará qual o Form
que vai ser aberto quando for accionada esta opção.

Figura 94.- Macro “BDServAcad MenuBar_Cursos” em Modo de Desenho.

2000 J Artur Vale Serrano, Carlos Carvalhal 103


Apontamentos de SGBD Parte II

8 Construir a Macro “BDServAcad MenuBar_Disciplinas”, apresentada na Figura


95, que define o Menu Disciplinas da MenuBar. Cada uma das entradas desta Macro
corresponde a uma entrada deste Menu, sendo responsável pela abertura do Form/Report

correspondente. Dessa forma a sua Acção será OpenForm/OpenReport e o Argumento


Form/Report Name indicará qual o Form/Report que vai ser aberto quando for accionada esta
opção.

Figura 95.- Macro “BDServAcad MenuBar_Disciplinas” em Modo de Desenho.

8 Construir a Macro “BDServAcad MenuBar_Docentes”, apresentada na Figura 96,


que define o Menu Docentes da MenuBar. A única entrada desta Macro corresponde à
única entrada deste Menu, sendo responsável pela abertura do Form “Entrada de

Docentes”. Dessa forma a sua Acção será OpenForm e o Argumento Form Name terá o valor
Entrada de Docentes.

Figura 96.- Macro “BDServAcad MenuBar_Docentes” em Modo de Desenho.

8 Construir a Macro “BDServAcad MenuBar_File”, apresentada na Figura 97, que


define o Menu File da MenuBar. A única entrada desta Macro corresponde à única
entrada deste Menu, sendo responsável pelo termino da aplicação. Dessa forma a sua

2000 J Artur Vale Serrano, Carlos Carvalhal 104


Apontamentos de SGBD Parte II

Acção será Quit, não sendo necessário alterar o valor inicial dos seus Argumentos.

Figura 97.- Macro “BDServAcad MenuBar_File” em Modo de Desenho.

10.4.- PRODUÇÃO DA APLICAÇÃO FINAL


Uma vez desenvolvido o Ambiente da Aplicação, só falta produzir a Aplicação Final, i.e.,
definir qual o Menu e a MenuBar da Aplicação e inibir o acesso do utilizador ao Modo de Desenho
dos Objectos e duma forma geral aos Objectos que não façam parte da Interface do Utilizador. Tudo
isso é feito na Caixa de Diálogo de Configuração da Aplicação Final, apresentada na Figura 98,
acessível através do comando Tools→Startup... Ter o cuidado de criar uma cópia de segurança da
BD antes de executar este último passo, pois poderá não ser possível aceder novamente ao Modo de
Desenho da Base de Dados.

8 Criar uma cópia de segurança da BDServAcad.


8 Executar o comando Tools→Startup... Após o que aparecerá a caixa de
diálogo que permitirá configurar a Aplicação Final. Configurar as opções apresentadas
conforme indicado na Figura 98. Prestar especial atenção aos Campos Display Form/Page

e Menu Bar.

8 Fechar e abrir a BD e verificar que o Ambiente MS Access apresentará


somente a BDServAcad MenuBar e o Form “Menu Principal”, não permitindo aceder a
nenhuma outra funcionalidade. (Na realidade as coisas não são bem assim por não
termos desactivado o item Use Access Special Keys. Experimente carregar e manter
carregada a tecla Shift enquanto o MS Access carrega a BD.)

2000 J Artur Vale Serrano, Carlos Carvalhal 105


Apontamentos de SGBD Parte II

Figura 98.- Caixa de Diálogo de Configuração da Aplicação Final.

2000 J Artur Vale Serrano, Carlos Carvalhal 106

Você também pode gostar