Aplicações de Microsoft Access Caso de Estudo: Questionários

Propaganda
Aplicações de Microsoft Access
Caso de Estudo: Questionários Online
[email protected]
2004
Aplicações em MSAccess, Questionários Online
Aplicações de Microsoft Access
Caso de Estudo: Questionários Online
Índice
1
Módulo Básico .............................................................................................................6
1.1
Funcionalidades ...................................................................................................6
1.2
Base de Dados ......................................................................................................8
1.2.1
1.3
A Estrutura da Base de Dados......................................................................8
O Desenho da Base de Dados no Access ...........................................................12
1.3.1
Criação de uma Base de Dados..................................................................12
1.3.2
Criação de Listas de Valores (ComboBox) ................................................22
1.3.3
Manutenção de dados.................................................................................23
1.4
Formulário Questionário – Dados Pessoais .......................................................24
1.5
Formulário Questionário – Avaliação de Disciplinas ........................................34
1.6
Formulário Questionário – Avaliação de Docentes ...........................................39
1.7
Macros: Ligação Formulário Questionário – Avaliação de Docentes ...............41
1.7.1
2
3
‘Queries’: Inserção Automática das Questões ...........................................45
1.8
Relatórios ...........................................................................................................49
1.9
Inicialização .......................................................................................................53
1.10
Notas Finais ........................................................................................................54
Módulo Intermédio ....................................................................................................55
2.1
Funcionalidades .................................................................................................55
2.2
O Redesenho da Base de Dados.........................................................................55
2.3
Formulário Questionário ....................................................................................57
2.4
Formulário Síntese .............................................................................................65
2.5
Página Web Questionário ...................................................................................72
Módulo Avançado......................................................................................................87
3.1
Funcionalidades .................................................................................................87
3.2
O Redesenho da Base de Dados.........................................................................87
3.3
Formulário Lista de Chaves ...............................................................................97
3.4
Formulário Preencher Questionário .................................................................104
(c) Pedro Ramos, 2004
2
Aplicações em MSAccess, Questionários Online
3.5
Formulário Questionário ..................................................................................107
3.6
Página Web Preencher Questionário ................................................................108
3.7
Formulário Menu Estatístico............................................................................111
3.8
Formulário Est_EvolDisciplina .......................................................................121
3.9
Formulário Est_EvolDocente ...........................................................................122
3.10
Formulário Est_ComparaDisciplina ................................................................125
3.11
Formulário Est_ ComparaDocente ...................................................................126
3.12
Pivot Table .......................................................................................................128
(c) Pedro Ramos, 2004
3
Aplicações em MSAccess, Questionários Online
Aplicações de Microsoft Access
Caso de Estudo: Questionários Online
Introdução
O caso de estudo que ilustra o presente texto consiste num conjunto de formulários de
apoio à recolha e processamento de questionários de avaliação pedagógica. No diagrama
da Figura 1 sistematiza-se a funcionalidade pretendida para a aplicação que suporta o
caso de estudo.
Os quest ionários poderão ser preenchidos remotamente através de formulários web ou
localmente (aplicação) através dos habituais formulários do Microsoft Access. Em ambos
os casos apenas utilizadores autorizados poderão preencher os formulários (no caso dos
formulários web as senhas de validação são geradas automaticame nte e enviadas aos
utilizadores por correio electrónico). Através da aplicação é possível obter
automa ticamente informação agregada que possibilita uma análise evolutiva e
comparativa entre as diferentes avaliações. É também disponibilizada a possibilidade de
exportar automaticamente os dados dos questionários para o Microsoft Excel.
Enquanto que algumas funcionalidades descritas são simples de implementar no
Microsoft Access, outras exigem o desenvolvimento de alguns procedimentos ou
algoritmos com um nível de exigência avançado. Estes diferentes níveis de exigência /
dificuldade levaram a que optássemos por estruturar o presente texto em três módulos,
com grau crescente de dificuldade : módulos Básico, Intermédio e Avançado. A sequência
adoptada na exposição da matéria tem como pressuposto que o leitor apenas inicia a
leitura de um módulo após ter concluído o módulo anterior.
A descrição da forma de implementar todas as funcionalidades fica apenas concluída no
final do terceiro módulo. Algumas soluções apresentadas nos primeiros módulos serão
substituídas mais adiante por outras mais elaboradas. O objectivo do presente texto não é
o de apresentar a forma mais correcta (nomeadamente em termos de eficiência) de
implementar o caso de estudo mas sim de, através dele, apresentar algumas
funcionalidades do Microsoft Access.
O presente texto não deve ser entendido como um manual de Microsoft Access. Apesar
de no primeiro módulo o texto assumir que o leitor utiliza o Microsoft Access pela
primeira vez, nos restantes módulos, e principalmente no terceiro, exige-se que o leitor
tenha alguns conhecimentos prévios de Microsoft Access, nomeadamente ao nível da
programação em Visual Basic e da linguagem SQL.
(c) Pedro Ramos, 2004
4
Aplicações em MSAccess, Questionários Online
Figura 1- Funcionalidade do Caso de Estudo
(c) Pedro Ramos, 2004
5
Aplicações em MSAccess, Questionários Online
1 Módulo Básico
1.1 Funcionalidades
O essencial das funcionalidades e requisitos pretendidos no presente módulo são
ilustradas pelas três seguintes figuras.
Figura 2 - Formulário ‘Dados Pessoais ’
Figura 3 – Formulário ‘Avaliações ’
(c) Pedro Ramos, 2004
6
Aplicações em MSAccess, Questionários Online
Figura 4 – Lis tagem das médias de avaliações
As duas primeiras figuras dizem respeito aos formulários para preenchimento de
questionário s. A terceira figura ilustra uma listagem com as médias dos questionários por
disciplina.
Pela leitura dos dois formulários podemos depreender que, para cada questionário , é
necessário atribuir um número e armazenar um conjunto de dados pessoais,
nomeadamente profissão, licenciatura, universidade da licenciatura, média de licenciatura
e sexo do inquirido. O símbolo
à direita de um campo indica que o utilizador deverá
preencher o campo recorrendo a uma lista de valores (Combo Box) predefinidos que
poderá ser acedida se clicar na seta, tal como ilustra a figura seguinte.
(c) Pedro Ramos, 2004
7
Aplicações em MSAccess, Questionários Online
Figura 5 – Lista de Va lores (Combo Box)
Caso, por exemplo, a profissão do utilizador não conste na lista ele poderá preencher o
campo com o valor ‘Outra’ e preencher o campo ‘Outra Profissão’ com a sua profissão. A
mesma funcionalidade se aplica aos campos ‘Licenciatura’ e ‘Universidade’.
Pelo formulário da Figura 3 observa-se que para cada questionário é possível avaliar um
conjunto de disciplinas. O botão ‘Editar Questionário Disciplina’ permite aceder ao
formulário apresentado na Figura 3 onde o utilizador poderá avaliar a disciplina e os
docentes que nela leccionaram. A funcionalidade do botão ‘Prepara Perguntas’ será
apresentada mais adiante.
Sobre cada disciplina, para além de uma questão aberta, existem seis aspectos sujeitos a
avaliação quantitativa (entre 1 e 5), e sobre cada docente sete diferentes aspectos e
também uma questão aberta.
Um pressuposto dos formulários da Figura 2 e da Figura 3 é o de que as disciplinas e
docentes sujeitos a avaliação tenham sido previamente inseridos na base de dados.
1.2 Base de Dados
1.2.1 A Estrutura da Base de Dados
De uma forma simplificada podemos dizer que uma base de dados corresponde a um
conjunto de tabelas devidamente estruturadas. Uma tabela é um conjunto de linhas (ou
registos) e colunas (ou campos) em que nas colunas estão os atributos sobre os quais
pretendemos armazenar valores e as linhas são os valores que neles armazenamos. Na
figura seguinte ilustra-se a tabela de disciplinas. É nos atributos ‘SiglaDisciplina’ e
‘Disciplina’ que armazenamos os dados que consideramos relevantes para a aplicação.
Figura 6 – Dados da tabela ‘Disciplina’
(c) Pedro Ramos, 2004
8
Aplicações em MSAccess, Questionários Online
Todas as tabelas têm associada uma propriedade fundamental: uma forma única de
identificar uma linha. Normalmente essa forma consiste em designar a qual dos seus
atributos vai ser atribuída essa função de identificação (atributo chave). Por exemplo,
podemos convencionar que não podem existir duas disciplinas com a mesma sigla, ou
seja, convenciona-se que o atributo ‘SiglaDisciplina’ é a chave da tabela (também
poderíamos ter optado pelo atributo ‘Disciplina’). Como se verá mais adiante, nem
sempre apenas um atributo é suficiente para determinar o mecanismo de identificação.
Um atributo chave tem uma particularidade: é de preenchimento obrigatório (se um
atributo não for de preenchimento obrigatório, nem que seja em situação excepcionais,
nunca poderá fazer parte da chave).
Na seguinte figura é ilustrada a tabela de docentes.
Figura 7 – Dados da t abela ‘Docente’
No caso da tabela de docentes o nome nunca poderá ser chave dado que existem pessoas
com o mesmo nome. No presente exemplo, a chave terá que ser composta pelo atributo
‘IDDocente’ (é habitual utilizar as letras ‘ID’ – abreviatura de identificador – para indicar
os atributos que foram criados unicamente com o objectivo de servirem de chave para
uma tabela). Note-se que todas as tabelas têm que ter uma chave, logo dado que ‘Nome ’
não pode ser chave e porque não existe nenhum outro atributo cujo preenchimento fosse
considerado obrigatório (‘BI’, ‘Nº Contribuinte’, etc.) optou-se por criar o atributo fictício
‘IDDocente’.
Considera-se que tabelas estão devidamente estruturadas quando é possível cruzar a
informação considerada relevante. Por exemplo, as duas tabelas anteriormente
apresentadas permitem- nos (através de um programa apropriado) listar todas as
disciplinas e listar todos os docentes. No entanto, não permitem cruzar a informação, i.e.,
não permitem, por exemplo, responder às questões “Quem lecciona a disciplina de
Matemática?”, ou, “Que disciplina(s) lecciona a Carla Madeira?”. A razão porque não é
possível responder às questões é porque na base de dados não há espaço para associar as
disciplinas aos docentes, ou seja, porque a base de dados não está devidamente
estruturada.
(c) Pedro Ramos, 2004
9
Aplicações em MSAccess, Questionários Online
Embora pudesse parecer intuitivo, a solução, neste caso, não passa por acrescentar
atributos a uma (ou às duas) das tabelas existentes. Vejam-se as seguintes figuras e
respectivos comentários.
Figura 8 – Tabela ‘Disciplina ’, a lternativa (uma disciplina apenas com um docente)
A tabela da Figura 8 estaria correcta se uma disciplina apenas pudesse ter um docente.
Por exemplo, pela tabela saberíamos que a discip lina cuja sigla é ‘ARQ ’ é leccionada
pelo docente cujo identificador é ‘1’ e, pela tabela de docentes, saberíamos que o seu
nome é ‘Pedro Jorge’. Ainda no pressuposto que uma disciplina apenas pode ter um
docente, a solução da próxima figura não é correcta na medida em que repete
desnecessariamente os nomes dos docentes. Por exemplo, a associação entre o
identificador ‘1’ e o nome ‘Pedro Jorge’ fica registada desnecessariamente em dois
lugares (na tabela de docentes e na tabela de disciplinas) o que, para além dos perigos de
inconsistência (alterar-se numa tabela e não se alterar na outra) penaliza a eficiência da
operação de associação de docentes a disciplinas1 .
Figura 9 – Tabela ‘Disciplina’, a lternativa incorrecta
Dado que é um requisito da aplicação a possibilidade de uma disciplina ser leccionada
por vários docentes (e um docente leccionar várias disciplinas 2 ), a solução da Figura 9
não se adequa. Não é possível, por exemplo, adicionar mais um docente à disc iplina
‘ARQ’ porque, dado que a sigla é chave da tabela, não poderá existir mais nenhuma linha
cujo valor no atributo ‘SiglaDisciplina’ assuma o valor ‘ARQ’.
1
Uma possível solução seria manter o atributo nome na tabela de disciplina e remover a tabela de docentes.
No entanto, por razões cuja explicação sai fora do alcance deste texto, as desvantagens dessa solução
seriam substanciais.
2
Daí a razão de também não ser uma solução correcta colocar a sigla da disciplina na tabela de docentes.
(c) Pedro Ramos, 2004
10
Aplicações em MSAccess, Questionários Online
A solução da próxima figura também não é adequada: apenas permite dois docentes a
leccionarem a mesma disciplina. E se numa disciplina (por exemplo uma disciplina de
seminários) tivéssemos quatro docentes? Ou seis?. Iríamos prever seis colunas na tabela
disciplina?. Seria sempre uma solução rígida, pouco eficiente e pouco intuitiva.
Figura 10 - Tabela ‘Disciplina’, alternativa incorrecta
Nesta situação, a solução passa por criar uma nova tabela, no exemplo, a tabela
‘Lecciona’. Esta tabela apenas tem por objectivo associar os docentes às respectivas
disciplinas, e vice-versa, tal como é ilustrado na Figura 11.
Figura 11 – Dados da t abela ‘Lecciona’
Esta tabela (‘Lecciona’ ) tem como chave um conjunto de atributos constituído pelos
atributos ‘SiglaDisciplina’ e ‘IDDocente’. A sigla da disciplina pode repetir-se (‘SO’ no
exemplo) desde que o docente seja diferente e, o identificador do docente pode repetir-se
(7 no exemplo), isto é, um docente leccionar várias disciplinas, desde que mude a sigla da
disciplina. O que nunca se poderá repetir é a chave, i.e., o par ‘SiglaDisciplina’ e
‘IDDocente’.
(c) Pedro Ramos, 2004
11
Aplicações em MSAccess, Questionários Online
Os atributos da tabela ‘Lecciona’ permitem o relacionamento (denominado relationship
no Microsoft Access) entre as tabelas ‘Disciplina’ e ‘Docente’. Ao indicarmos
explicitamente esse relacionamento, o Microsoft Access automatiza algumas tarefas,
nomeadamente a elaboração de formulários e, mais importante, assegura
automaticamente a integridade parcial dos dados, tal como de seguida se exemplifica.
Se considerarmos a tabela ‘Lecciona’, ao atributo ‘SiglaDisciplina’ apenas nos interessa
associar disciplinas que existam na tabela ‘Disciplina’ (as siglas constantes na lista de
valores), caso contrário, estaríamos a associar um docente a uma sigla que não existia.
Pelo mesma razão, o Microsoft Access apenas deverá permitir associar disciplinas a
identificadores de docentes ( ‘IDDocente’) que constem na tabela de docentes. Ainda pelo
mesmo tipo de razões, caso alguém tente remover, por exemplo, a disciplina com a sigla
‘ARQ’ da tabela das disciplinas, a operação apenas deverá ser permitida caso
previamente sejam removidas da tabela ‘Lecciona’ todas as linha s que refiram essa
disciplina. Essa remoção poderá ser feita automaticamente pelo Microsoft Access (ou
seja, para além de remover a disciplina da tabela de disciplinas, o Access
automaticamente remove todas as linhas que a referenciem na tabela ‘Lecciona’ – no
exemplo da Figura 11 removia a primeira linha) ou deverá ser feita manualmente pelo
utilizador (o Access informa o utilizador que não permite a anulação da disciplina
enquanto não forem removidas as suas referências na tabela ‘Lecciona’). O mesmo tipo
de situação se colocaria caso o utilizador na tabela ‘Disciplina’ decidisse mudar a sigla,
por exemplo, da disciplina ‘ARQ’ (ele não poderá alterar ‘ARQ’ para, por exemplo, ‘AQ’
se mantiver ‘ARQ’ na tabela ‘Lecciona’). Neste caso a operação de alteração apenas
deverá ser permitida caso previamente sejam alteradas na tabela ‘Lecciona ’ todas as
linhas que refiram essa disciplina.
A integridade anteriormente (denominada integridade referencial) é assegurada
automaticamente se explicitamente indicarmos o relacionamento entre as tabelas
‘Disciplina’, ‘Lecciona’ e ‘Docente’.
1.3 O Desenho da Base de Dados no Access
Na secção anterior referimos os principais aspectos a ter em conta na definição das
tabelas do modelo relacional. Nesta secção descreve -se a forma de criar as tabelas no
Microsoft Access.
1.3.1 Criação de uma Base de Dados
Para criar uma base de dados seleccionam-se as opções ‘File’ e ‘New’, escolhendo-se de
seguida a opção ‘Blank Database ’. Depois de indicamos o nome do ficheiro (ficheiro
onde, por omissão, ficam armazenados todas as tabelas e formulários) e a sua respectiva
localização (a extensão de um ficheiro do Microsoft Access é ‘dbf’), surgirá o ecrã
ilustrado na figura seguinte.
(c) Pedro Ramos, 2004
12
Aplicações em MSAccess, Questionários Online
Figura 12 – Janela principal do Microsoft Access
Existem sete tipos de objectos (‘Tables ’, ‘Queries’, ‘Forms’, ‘Reports’, ‘Pages’, ‘Macros ’
e ‘Modules’), sendo que os objectos do tipo ‘Table’ correspondem às tabelas referidas na
secção anterior. Para criar-mos uma tabela é aconselhável seleccionamos a opção ‘Create
Table in Design View’. Na figura seguinte ilustra-se a estrutura da tabela ‘Disciplina’.
(c) Pedro Ramos, 2004
13
Aplicações em MSAccess, Questionários Online
Figura 13 – Estrutura da tabela ‘Disciplina’
A tabela é composta por dois campos, ambos com o mesmo tipo de dados ‘Text’. Existem
vários tipos de dados (‘Text’, ‘Number’, ‘Date’, ‘Yes/No’, etc.), devendo ser escolhido o
que melhor se adequa ao atributo em questão. Na secção inferior do ecrã, na subsecção
‘General’ (apresentada na figura) podem-se indicar diferentes propriedades para os
atributos, entre eles: ‘Field Size’ (restringir o tipo de dados indicado na secção superior –
ver manual de Access para comparar os diferentes tipos e subtipos de dados), ‘Default
Value ’ (valor por omissão, i.e., valor que ficará registado caso o utilizador, no momento
em que insere a linha, não indique nenhum valor para o atributo) e ‘Required’ (o valor
‘yes’ indica que o camp o é de preenchimento obrigatório). No exemplo considerou-se
que a sigla era obrigatória (mesmo que indicássemos que não era obrigatório o Access
obrigaria ao seu preenchimento porque também indicámos que ‘SiglaDisciplina’ é a
chave da tabela) e do tipo texto com dimensão máxima de dez caracteres. O campo
‘Disciplina’ é do tipo texto com dimensão máxima de cinquenta caracteres e não é de
preenchimento obrigatório. A forma mais fácil de indicar a chave de uma tabela é
seleccionar o(s) campo(s) que compõem a chave e clicar no símbolo
.
De seguida apresentamos as tabelas ‘Docente’, ‘Lecciona ’, ‘Profissão’, ‘Universidade’,
‘Licenciatura’ e ‘Questionário’.
(c) Pedro Ramos, 2004
14
Aplicações em MSAccess, Questionários Online
Figura 14 – Estrutura da tabela ‘Docente’
O atributo ‘Nome’ tem como dimensão máxima 100 caracteres e é de preenchimento
obrigatório.
Figura 15 – Estrutura da t abela ‘Lecciona’
(c) Pedro Ramos, 2004
15
Aplicações em MSAccess, Questionários Online
Os atrib utos da tabela têm o mesmo tipo de dados dos atributos nas tabelas
correspondentes (‘Disciplina’ e ‘Docente’). A chave é composta pelos dois atributos.
Figura 16 – Dados da t abela ‘Profissão’
Os tipos de dados dos atributos ‘IDProfissão’ (chave) e Profissão são respectivamente
‘Number’ (‘Integer’) e ‘Text’ (100), ambos são obrigatórios.
Figura 17 – Dados da tabela ‘Universidade’
Os tipos de dados dos atributos ‘IDUniversidade ’ (chave) e ‘Universidade’ são
respectivamente ‘Text’ (10) e ‘Text’ (100), ambos são obrigatórios.
Figura 18 – Dados da t abela ‘Licenciatura’
Os tipos de dados dos atributos ‘IDLicenciatura’ (chave) e ‘Licenciatura’ são
respectivamente ‘Number’ (‘Integer’) e ‘Text’ (100), ambos são obrigatórios.
(c) Pedro Ramos, 2004
16
Aplicações em MSAccess, Questionários Online
Figura 19 – Estrutura da tabela ‘Questionário’
Na tabela ‘Questionario’ os tipos de dados dos atributos ‘Licenciatura’, ‘Universidade’ e
‘Profissão’ são os mesmos dos atributos ‘IDLicenciatura’, ‘IDUniversidade’ e
‘IDProfissão’, respectivamente. Os atributos ‘OutraUniversidade’, ‘OutraLicenciatura’ e
‘OutraProfissão’ têm o tipo de dados ‘Text’ (100). O atributo ‘MédiaLicenciatura’ é do
subtipo ‘Single’ e o aributo ‘NumQuestionário ’ é do subtipo ‘Integer’. Na figura pode-se
observar a utilização de duas outras propriedades dos atributos: ‘Validation Rule’ (regra
para validar a introdução de dados) e ‘Validation Text’ (texto a mostrar ao utilizador caso
preencha o campo com um valor que viole a regra). No exemplo permite-se que o
atributo ‘Sexo ’ assuma os valores ‘0’, ‘1’ ou ‘Null’ (ausência de valor). Se o campo fosse
obrigatório a regra apenas deveria considerar os valores ‘0’ ou ‘1’.
O único atributo de preenchimento obrigatório é o ‘NumQuestionário ’ (chave).
Apenas faltam as tabelas para armazenar as avaliações. Optámos por utilizar duas tabelas,
uma para armazenar as respostas relativas às disciplinas e outra para as respostas relativas
aos docentes, denominadas ‘RDisciplina’ e ‘RDocente’ respectivamente. As suas
estruturas são as apresentadas nas seguintes figuras.
(c) Pedro Ramos, 2004
17
Aplicações em MSAccess, Questionários Online
Figura 20 – Estrutura da tabela ‘RDisciplina’
De forma a assegurar o cruzamento com a tabela ‘Questionário’ (i.e., de forma a poder
associar uma linha da tabela questionário com as linhas respectivas da tabela
‘RDisciplina’), colocou-se o atributo ‘NumQuestionario’ na tabela ‘RDisciplina’. Dado
que para cada uma das disciplinas são recolhidas sete questões, é necessário colocar na
tabela o atributo ‘SiglaDisciplina’. A chave da tabela é composta por estes dois atributos
(para um inquérito não podem ser recolhidas duas ve zes respostas para a mesma
disciplina). O nome do atributo (‘Field Name’), caso na propriedade ‘Caption’ não esteja
indicado nenhum valor, será, por omissão, utilizado pelo Access para o desenho dos
formulários. Dado que os nomes ‘DI1’, ‘DI2’ ..., não são intuitivos para o utilizador,
optou-se por preencher a propriedade ‘Caption’ com uma designação mais intuitiva.
Pelo mesmo tipo de razões indicadas na apresentação da tabela ‘RDisciplina’, também no
caso da tabela ‘RDocente’ foi necessário considerar os atributos ‘NumQuestionário ’,
‘SiglaDisciplina’ e ‘IDDocente’. A chave é composta pelos três atributos porque num
questionário um docente pode ser avaliado duas vezes se for para disciplinas diferentes;
para a mesma disciplina apenas pode ser avaliado uma vez.
(c) Pedro Ramos, 2004
18
Aplicações em MSAccess, Questionários Online
Figura 21 – Estrutura da tabela ‘RDocente’
As três seguintes figuras ilustram possíveis valores das tabelas ‘Questionario ’,
‘RDisciplina’ e ’RDocente’.
Figura 22 – Dados da t abela ‘Questionário’
(c) Pedro Ramos, 2004
19
Aplicações em MSAccess, Questionários Online
Figura 23 – Dados da tabela ‘RDisciplina’
Figura 24– Dados da t abela ‘RDocente’
A definição do relacionamento entre as tabelas é efectuada na opção ‘RelationShips’ do
menu ‘Tools’. Dever-se-á inicialmente adicionar todas as tabelas. A indicação da relação
é efectuada da seguinte forma: se lecciona-se um atributo com o botão esquerdo do rato
(por exemplo o atributo ‘SiglaDisciplina’ da tabela ‘Lecciona ’) e arrasta-se o atributo
para cima do atributo relacionado (‘SiglaDisciplina’ na tabela ‘Disciplina’). A indicação
‘1 infinito’ é atribuída automaticamente pelo Access 3. Na figura seguinte podemos
observar todas as associações do presente caso de estudo.
3
Está fora do âmbito destas folhas a explicação dos vários tipos de associações entre tabelas e respectivas
cardinalidades.
(c) Pedro Ramos, 2004
20
Aplicações em MSAccess, Questionários Online
Figura 25 – Associações entre tabelas (‘Relationships’)
De forma a indicarmos que pretendemos que o Access assegure automaticamente a
integridade anteriormente referid a (muito recomendado) dever-se-á, para cada
associação, seleccioná-la através de um duplo clique que abre uma janela tal como a
ilustrada na seguinte figura (associação entre ‘Docente’ e ‘Lecciona’).
Figura 26 – Integridade das associações
A opção ‘Enforce Referencial Integrity’ (recomendada) indica que pretendemos que o
Access assegure automaticamente a integridade. Se optar- mos por ‘Cascate Update
(c) Pedro Ramos, 2004
21
Aplicações em MSAccess, Questionários Online
Related Fields’ estamos a indicar ao Access que, quando o identificador de um docente
(‘IDDocente’) for alterado na tabela de docentes ele deverá ser automaticamente alterado
na tabela ‘Lecciona’. Caso não indiquemos esta opção, o Access não deixará alterar o
identificador de docentes que existam na tabela ‘Lecciona’. Se optarmos por ‘Cascate
Delete Related Fields’ estamos a indicar ao Access que, quando um docente for removido
na tabela de docentes todas as referências a ele deverão ser automaticamente removidas
na tabela ‘Lecciona’. Caso não indiquemos esta opção, o Access não deixará remover
docentes que existam na tabela ‘Lecciona ’.
1.3.2 Criação de Listas de Valores (ComboBox)
Em várias anteriores figuras existem listas de valores associadas aos campos envolvidos
nas associações. Essas listas são muito úteis para auxiliar o utilizador no preenchimento
dos campos (evita que ele tenha que digitar valores ou memorizar códigos). Na Figura 27
ilustra-se a criação de uma Combo Box associada ao campo ‘Licenciatura’ na tabela
‘Questionário’ (ver funcionalidade na Figura 22 ). Na propriedade ‘Row Source’ indica-se a
tabela associada ao campo, ‘Licenciatura’ no exemplo. Nas propriedades ‘Bound
Column’ e ‘Column Count’ indica-se, respectivamente, qual das colunas da lista de
valores vai estar associada ao campo e quantas colunas da tabela indicada em ‘Row
Source’ vão constar na lista de valores. ‘Row Source ’ com o valor ‘2’ significa que as
duas colunas da tabela ‘Licenciatura’ vão ser mostradas na lista de valores, e o valor ‘1’
em ‘Bound Column’ significa que é a primeira dessas duas colunas (‘SiglaLicenciatura’)
que vai estar associada ao campo ‘Licenciatura’ da tabela ‘Questionário’. As
propriedades ‘Column Widths ’ e ‘List With’ têm, respectivamente, a ver com a dimensão
de cada uma das colunas e a dimensão da lista no seu todo. A propriedade ‘Limit To List’
assume o valor ‘yes’ se pretendermos que o utilizador apenas possa escolher um dos
valores da lista (neste caso mesmo que optássemos pelo valor ‘No’ o utilizador era
obrigado a escolher um valor da lista porque existe uma associação entre as tabelas com
indicação ‘Enforce Referencial Integrity’.
(c) Pedro Ramos, 2004
22
Aplicações em MSAccess, Questionários Online
Figura 27 – Combo Box associada a atributo ‘Licenciatura ’
1.3.3 Manutenção de dados
A forma preferencial de adicionar, editar ou remover dados das tabelas é através da
utilização de formulários. No entanto, é possível fazer a manutenção dos dados
directamente nas tabelas. Quando abrimos (open) uma tabela podemos ir- lhe adicionando
linhas. Na Figura 22 (tabela Questionário) podemos observar que na zona inferior do ecrã o
Access indica-nos que o cursor está posicionado no 13º registo de um total de 40 registos.
As setas à esquerda e direita dessa informação permitem- nos deslocar para as linhas
anteriores, seguintes, bem como adicionar um novo registo (botão mais à direita). Para
remover um registo basta seleccionar a linha e utilizar a tecla ‘Delete’.
No menu ‘Records’ estão uma série de funcionalidades úteis na pesquisa de registos,
nomeadamente a possibilidade de ordenar a tabela por qualquer um dos campos e filtrar
as linhas com base em valores constantes na tabela. Por exemplo, para imprimir apenas
os questionários de inquiridos do ISCTE podemos seleccionar a coluna ‘Universidade’ e
escolher as opções ‘Records’ e ‘Sort Ascending’. Posteriormente localizamos com o rato
um dos registos cuja universidade seja ISCTE, colocamos o rato na coluna
‘Universidade’ e seleccionamos as opções ‘Records’, ‘Filter’ e ‘Filter By Selection’. Por
(c) Pedro Ramos, 2004
23
Aplicações em MSAccess, Questionários Online
fim (apenas são visíveis as respostas de inquiridos do ISCTE) seleccionamos as opções
‘File’ e ‘Print’.
Nas próximas 3 secções vamos ilustrar os passos necessários à criação dos formulários
apresentados na Figura 2 e na Figura 3.
1.4 Formulário Questionário – Dados Pessoais
Numa primeira fase cria-se um formulário associado à tabela ‘Questionário ’, no qual
colocamos todos os atributos da tabela. A Figura 28, a Figura 29 e a Figura 30 mostram
os passos necessários para obtermos o formulário ‘Questionário’ da Figura 2. Entre os
passos indicados entre a Figura 29 e a Figura 30 existem dois passos intermédios (não
ilustrados) nos quais indicamos que pretend emos um formulário do tipo ‘Colu mnar’
(apenas um questionário por janela, por oposição a vários questionários listados na
mesma janela) com uma formatação ‘Standard’.
O formulário obtido já permite inserir, alterar e remover os dados pessoais dos
questionários. As Combo Box criadas automaticamente são insuficientes porque ,
desnecessariamente e de uma forma não intuitiva mostram, por exemplo, o ‘IDProfissão’
da tabela de profissões no formulário em vez de mostrar o atributo ‘Profissão’ da tabela
de profissões. Como foi referido anteriormente é de facto o ‘IDProfissão’ que tem que
ficar registado na base de dados (tabela ‘Questionário’), mas em termos de visualização
no formulário é conveniente ficar visível a profissão já que o identificador não é
esclarecedor.
Para esconder o atributo ‘IDProfissão’ (ou para alterar qualquer propriedade do
formulário) devemos abrir o formulário em modo de desenho (opções ‘View’, ‘Design
View’) e, caso não esteja activa, cha mar a janela de propriedades (opções ‘View’,
‘Properties’). Todas as alterações nos formulários são efectuadas nesta janela, ela mostra
sempre as propriedades do objecto presentemente seleccionado pelo rato). Na Figura 32
pode-se observar que a única alteração necessária consiste em colocar a zero a dimensão
do primeiro campo da Combo Box. (que, neste caso, corresponde ao campo
‘IDProfissão’). Para voltar a visualizar o formulário dever-se-á voltar ao modo de
visualização: opções ‘View’ e ‘Form View’ (é conveniente gravar as alterações
efectuadas no formulário: opções ‘File’ e ‘Save’). A mesma alteração deverá ser
efectuada para o campo ‘Licenciatura’.
(c) Pedro Ramos, 2004
24
Aplicações em MSAccess, Questionários Online
Figura 28 – Criação de formulário ‘Questionário’ – Indicação de tabela de s uporte
Figura 29– Criação de formulário ‘Questionário ’ – Indicação de a tributos
(c) Pedro Ramos, 2004
25
Aplicações em MSAccess, Questionários Online
Figura 30– Criação de formulário ‘Questionário’ – Indicação do nome do formulário
Figura 31 - Formulário ‘Questionário’ gerado automaticamente (versão incompleta)
(c) Pedro Ramos, 2004
26
Aplicações em MSAccess, Questionários Online
Figura 32 – Formatação Combo Box ‘Profissão’
O atrib uto ‘Sexo’, de forma a facilitar o preenchimento, também poderá ser transformado
num ‘Option Group’ tal como ilustrado na Figura 2.
Em modo de desenho deverá ser removido (tecla ‘Delete’) o atributo ‘Sexo’. De seguida,
na ‘Toolbox’ (caso não esteja visível deverá ser activada através das opções ‘View’ e
‘Toolbox’) deverá ser seleccionado e arrastado o símbolo respeitante aos ‘Option Groups’
(o símbolo no topo em que consta a expressão ‘xyz’) para dentro do formulário.
As seguintes imagens ilustram os passos necessários para a criação do ‘Option Group
associado ao atributo Sexo (deverá assegurar-se que o modo de desenho assistido –
‘Wizard’ – está activado:
)
(c) Pedro Ramos, 2004
27
Aplicações em MSAccess, Questionários Online
Figura 33 – Criação de ‘Option Group’ para atributo ‘Sexo ’ – Indicação de ‘Label’
Figura 34 - Criação de ‘Option Group’ para atributo ‘Sexo ’ – Indicação de valor por omissão
(c) Pedro Ramos, 2004
28
Aplicações em MSAccess, Questionários Online
Figura 35- Criação de ‘Option Group’ para atributo ‘Sexo ’ – Indicação de valores
Figura 36 - Criação de ‘Option Group’ para atributo ‘Sexo ’ – Indicação atributo na tabela ‘Questionario’
(c) Pedro Ramos, 2004
29
Aplicações em MSAccess, Questionários Online
Figura 37- Criação de ‘Option Group’ para atributo’ Sexo ’ – Formatação
Figura 38- Criação de ‘Option Group’ para atributo ’Sexo ’ – Indicação de título
Para finalizar o desenho da secção de ‘Dados Pessoais’ é conveniente alinhar e formatar
os atributos (as sub opções da opção ‘Format’ – ‘Align’, ‘Size’, ‘Horizontal’ e ‘Vertical
Spacing’ – são muito úteis na formatação), colocar um título na zona heading do
formulário e definir a ordem de mudança automática dos atributos (decidir que atributo
precede um outro quando o utilizador digita a tecla ‘Tab’ ou ‘Enter’). Antes de definir a
ordenação (‘Tab Order’) convém dar um nome ao atributo ‘Sexo’ anteriormente criado.
Para tal, depois de seleccionado o atributo em modo de desenho, na janela propriedades,
edita-se a propriedade ‘Name’ alterando o seu valor para ‘Sexo’. A ordenação dos
atributos está exemplificada na Figura 39 (opção ‘View’ e ‘TabOrder’).
(c) Pedro Ramos, 2004
30
Aplicações em MSAccess, Questionários Online
Figura 39 – Indicação da ordem dos atributos (‘Tab Order’)
Para garantir que os questionários estão ordenados por número de questionário, na janela
propriedades, depois de seleccionado o formulário como um todo (zona a cinzento), na
propriedade ‘Order By’ indica-se a designação do atributo: ‘NumQuestionario’ (Figura
40).
Figura 40 – Ordenação de registos
De forma a terminar o formulário, tal como consta na Figura 2, é necessário adicionar
uma lista (‘List Box’) com todas as disciplinas e os dois botões indicados.
A Figura 42, a Figura 43, a Figura 44, a Figura 45, a Figura 46 e a Figura 47 ilustram a
criação da lista denominada ‘ListBoxDisciplina’. Na lista pretende-se mostrar os dois
(c) Pedro Ramos, 2004
31
Aplicações em MSAccess, Questionários Online
atributos da tabela de disciplinas mas apenas armazenar (não se trata de armazenar na
base de dados – tabela ‘Q uestionário’ – mas, como será ilustrado mais adiante, armazenar
temporariamente para permitir a ligação ao formulário das avaliações) apenas a sigla. O
símbolo da ‘toolbox’ para a criação das listas de valores é
.
Figura 41 – Criação de ‘List Box’ – Indicação do tipo de fonte dos dados
Figura 42– Criação de ‘List Box’ – Indicação da fonte dos dados (tabela ‘Disciplina’)
(c) Pedro Ramos, 2004
32
Aplicações em MSAccess, Questionários Online
Figura 43– Criação de ‘List Box’ – Indicação dos atributos visíveis
Figura 44– Criação de ‘List Box’ – Formatação de c olunas
Figura 45– Criação de List Box – Indicação do Atributo de Identificação
(c) Pedro Ramos, 2004
33
Aplicações em MSAccess, Questionários Online
Figura 46– Criação de ‘List Box’ – Indicação da necessidade de memorizar o atributo de identificação
Figura 47– Criação de ‘List Box’ – Indicação da ‘Labe l’
A criação dos botões será apresentada mais adiante.
1.5 Formulário Questionário – Avaliação de Disciplinas
O formulário relativo às avaliações (Figura 3), apesar de ser apresentado numa única
janela, internamente para o Access corresponde a dois formulários: um para registar as
avaliações relativas às disciplinas e um segundo para avaliar os docentes. Nesta secção
descreve-se a criação do primeiro formulário.
O formulário constante na Figura 48 é obtido de forma semelhante à efectuada para criar
o formulário anterior. As opções a escolhe r são (pela ordem em que as questões vão
sendo colocadas quando optamos por criar um novo formulário): ‘Form Wizard ’
suportado pela tabela ‘RDisciplina’; todos os campos; ‘Columnar’; ‘Standard’ e
‘QDiscipina ’ (designação do formulário).
(c) Pedro Ramos, 2004
34
Aplicações em MSAccess, Questionários Online
Figura 48 - Formulário QDisciplina gerado automaticamente (versão incompleta)
De forma a obter o layout e funcionalidades pretendidas é necessário efectuar as
seguintes mod ificações:
1. Transformar os campos das seis primeiras questões em ‘Option Group ’. Depois de
apagar os atributos, eles deverão ser criados de forma idêntica à ilustrada para a criação
do atributo ‘Sexo’ no formulário anterior. A única diferença diz respeito à label. No
momento de criação é obrigatório indicar uma label para cada opção (Figura 49), apesar
de não a pretendermos no formulário. Posteriormente (Figura 51), através da tecla
‘Delete’ removemos a label.
Figura 49 – Criação de ‘Option Group’ para as q uestões – Indicação de valores
(c) Pedro Ramos, 2004
35
Aplicações em MSAccess, Questionários Online
Figura 50– Criação de ‘Option Group’ para as questões – Indicação de atributo para armazenamento de
escolha
Figura 51– Criação de ‘Option Group’ para as questões – Remoção de ‘Label’
2. Tornar os campos ‘NumQuestionario’ e ‘SiglaDisciplina’ invisíveis (Figura 52).
(c) Pedro Ramos, 2004
36
Aplicações em MSAccess, Questionários Online
Figura 52 – Tornar atributo ‘NumQuestionario’ invisível
3. Colocar no topo do formulário, centrado, a designação da disciplina que está a ser
avaliada (não esquecer que este formulário vai ser chamado após o utilizador, no
formulário dos dados pessoais, seleccionar uma disciplina). Uma forma fácil de colocar a
designação consiste em criar um campo (‘Text Box’ , ) e associá- lo à segunda coluna
da Combo Box. Na Figura 53 estão ilustradas algumas propriedades do atributo
(designado ‘DescricaoDisciplina’), nomeadamente, a propriedade ‘Control Source’ cujo
valor é ‘[SiglaDisciplina].[column](1)’, i.e., a segunda coluna (as colunas são numeradas
de 0 em diante) do atributo ‘SiglaDisciplina’ (que corresponde à Combo Box). As
propriedades ‘Enabled(No)’ e ‘Locked(Yes)’ asseguram que o cursor nunca vai poder
editar o atributo apesar de este estar igualmente visível.
Figura 53 – Criação de atributo para a designação da d isciplina
4. Ligações entre o formulário e a tabela. Quando o formulário for aberto ele deverá
posicionar-se na linha da tabela ‘RDisciplina’ que tenha o número de questionário igual
ao número de questionário constante no formulário a partir do qual ele é chamado. Dado
que para o mesmo número de questionário existem várias linhas, uma para cada
disciplina, é também necessário assegurar que o formulário ‘RDisciplina’ está
posicionado na linha que refira a sigla da disciplina seleccionada no formulário de dados
(c) Pedro Ramos, 2004
37
Aplicações em MSAccess, Questionários Online
pessoais. É também necessário assegurar que o utilizador não tem possibilidades de
inserir ou remover linhas da tabela ‘RDisciplina’, bem como deslocar-se para outra linha
da tabela. Essas restrições estão expressas nas propriedades ilustradas nas seguintes
figuras (propriedades do formulário como um todo).
A propriedade ‘Filter’ assume o va lor:
[RDisciplina]![NumQuestionario]=[Forms]![Questionario]![NumQuestionario] And
[RDisciplina]![SiglaDisciplina]=[Forms]![Questionario]![ListBoxDisciplina]
em
que
[Forms]![Questionario]![NumQuestionario]
refere-se
ao
atributo
‘NumQuestionario’ do formulário ‘Questionario’ e [RDisciplina]![NumQuestionario]
refere-se ao atributo ‘NumQuestionario ’ da tabela ‘RDisciplina ’.
As opções ‘Allow Deletions’ e ‘Allow Additions’ dizem respeito à possibilidade
oferecida ao utilizador de remover ou adicionar registos através do formulário (no
formulário ‘Questionário ’ os valores eram ‘yes’).
Figura 54 – Alteração de propriedades de edição de registos
Na Figura 55, as opções ‘Record Selectors’, ‘Navigation Buttoms’ e ‘Scroll Bars’ não
estão com os valores por omissão. Os valores foram alterados para que, respectivamente,
o utilizador não possa selecciona r um registo e utilizar a tecla ‘Delete’, não se possa
deslocar para outros registos, e não existam barras de deslocação inúteis.
Na Figura 56 pode-se observar que na propriedade ‘Cycle’ optou-se pelo valor ‘Current
Record’ para evitar que as teclas ‘Page Down’ e ‘Page Up’ permitam que o utilizador
acedesse a outros registos (esta alteração também deverá ser efectuada no formulário
‘Questionário’ anteriormente apresentado).
(c) Pedro Ramos, 2004
38
Aplicações em MSAccess, Questionários Online
Figura 55 – Alteração de propriedades de navegação e selecção de registos
Figura 56 – Propriedade ‘Cycle’ – Impedir acesso a outros registos
1.6 Formulário Questionário – Avaliação de Docentes
De forma a adicionar a secção de avaliações de docentes ao formulário anterior, é
primeiro conveniente criar um formulário autónomo para a avaliação de docentes. Numa
segunda fase este novo formulário será incorporado no formulário de avaliação de
disciplinas como um subformulário.
(c) Pedro Ramos, 2004
39
Aplicações em MSAccess, Questionários Online
O formulário ‘QDocente’ é obtido de forma quase idêntica à efectuada para criar o
formulário anterior. Ele é suportado pela tabela ‘RDocente’. As duas diferenças
significativas têm a ver com o facto de não ser necessário indicar nenhuma expressão na
propriedade ‘Filter’ (a ligação será efectuada no momento da ligação dos dois
formulários) e no facto da propriedade ‘Navigation Buttoms’ assumir o valor ‘Yes’ (o
utilizador deverá poder deslocar-se entre os diferentes registos, i.e., docentes da
disciplina). À semelhança do que foi efectuado no formulário da avaliação das
disciplinas, é conveniente criar um atributo com o nome do docente. Nesse atributo
(‘DescricaoDocente’ no exemplo) a propriedade ‘Control Source’ assume o valor
‘IDDocente.column(1)’, i.e., a segunda coluna da Combo box associada ao atributo
‘IDDocente’.
Para associar o novo formulário ao formulário ‘Qdisciplina’ dever-se-á abrir este último
em modo de desenho, e através do símbolo
da ‘Toolbox’ iniciar o processo de ligação
ilustrado na Figura 57 e na Figura 58: depois de indicarmos que o subform corresponde
ao formulário ‘Qdocente’, indicamos que a ligação será efectuada pelos atributos
‘NumQuestionario’ e ‘SiglaDisciplina’.
Figura 57 – Criação de ‘SubForm’ – Indicação de formulário
(c) Pedro Ramos, 2004
40
Aplicações em MSAccess, Questionários Online
Figura 58 – Criação de ‘SubForm’ – Indicação de atributos para relacionamento
1.7 Macros: Ligação Formulário Questionário – Avaliação de
Docentes
A próxima fase no desenho da aplicação consiste em associar o formulário ‘Questionário ’
com o formulário ‘Qdisciplina’. Como foi referido anteriormente essa ligação será
efectuada através do botão ‘Editar Questionário Disciplina’. Pretende-se que, após o
utilizador selecciona r uma disciplina e clicar no botão surja o formulário ‘QDisciplina’ (e
‘QDocente’) respeitante à avaliação da disciplina se leccionada. Caso o utilizador não
tenha previamente seleccionado uma disciplina deverá surgir a mensagem constante na
Figura 59.
(c) Pedro Ramos, 2004
41
Aplicações em MSAccess, Questionários Online
Figura 59 – Janela de erro
A melhor forma de efectuar esta operação sem recorrer à programação na linguagem
Visua l Basic consiste em utilizar Macros. As Macros são sequências de comandos prédefinidos. Essas sequências são normalmente associadas a botões. As macros são criadas
na janela principal do Access. A Figura 60 e a Figura 61 ilustram a macro
‘Questionario_RDisciplina’ cujo conteúdo associámos ao botão ‘Editar Questionário
Disciplina’.
(c) Pedro Ramos, 2004
42
Aplicações em MSAccess, Questionários Online
Figura 60 – Macro Para abertura de formulário ‘RDisciplina’ (I)
Na coluna ‘Action’ indica-se a acção que pretendemos efectuar. Caso essa acção apenas
deva ocorrer caso uma determinada condição esteja satisfeita, dever-se-á colocar a
condição respectiva na coluna ‘Condition’. Um conjunto de acções é expresso colocando
uma acção em cada linha consecutiva (o Access executa as acções sequencialmente até
encontrar uma linha vazia).
No exemplo colocámos como condição o atributo ‘ListBoxDisciplina’ estar preenchido e
como acção abrir o formulário ‘Qdisciplina’ com a seguinte condição (a tecla F2 em cima
da propriedade ‘Where Condition’ abre uma janela de zoom): o número de questionário
da tabela ‘RDisciplina’ ser igual ao número que consta no formulário ‘Questionário’, e a
sigla da disciplina de ‘RDisciplina’ também ser igual à seleccionada pelo utilizador no
formulário ‘Questionário’. Esta condição dupla assegura que o formulário ‘RDisciplina ’
será aberto no registo correcto. Um pressuposto desta solução é a de que o registo em
‘RDisciplina’ já tenha sido criado previamente. Caso contrário o utilizador verá um
formulário vazio e, voltando ao formulário ‘Questionário’, clica no botão ‘Prepara
Perguntas’ (ver mais adiante).
Na Figura 61 é mostrada a segunda acção: mostrar uma mensagem no ecrã a indicar que
o utilizador não seleccionou uma disciplina. Essa janela (‘MsgBox’) apenas será
mostrada caso o atributo ‘ListBoxDisciplina’ não esteja preenchido.
(c) Pedro Ramos, 2004
43
Aplicações em MSAccess, Questionários Online
Figura 61 – Macro para abertura de formulário ‘RDisciplina’ (II)
Depois de criada e gravada a macro (designada ‘Questionario_RDisciplina’ no exemplo),
ela deverá ser associada a um botão. Para criar o botão abre-se o formulário
‘Questionário’ em modo de desenho e arrasta-se o símbolo
da ‘Toolbox’. Ao
contrário do recomendado anteriormente, na criação deste tipo de botões recomendamos
que não se utilize o modo automático (wizard). Ou seja, antes de seleccionar o símbolo
do botão, dever-se-á desseleccionar o símbolo do modo automático (
). O processo de
criação manual do botão está ilustrado na Figura 62 e na Figura 63. As únicas
propriedades cujos valores por omissão foram alteradas são ‘Name ’, ‘Caption’ e
‘OnClick’. Esta última indica ao Access que assim que um utilizador clicar no botão
deverá mandar executar a macro ‘Questionario_RDisciplina ’.
Figura 62 – Criação de botão (atribuição de ‘Caption’ e nome)
(c) Pedro Ramos, 2004
44
Aplicações em MSAccess, Questionários Online
Figura 63– Criação de botão (associação de macro)
Como foi anteriormente referido, antes de podermos editar as questões da avaliação é
necessário criar os registos respectivos nas tabelas ‘RDisciplina’ e ‘RDocente’. O botão
‘Prepara Perguntas’ está associado à macro ‘Prepara_Disciplina_Docente ’ cujo conteúdo
é mostrado na Figura 64. A macro manda executar incondicionalmente duas querys :
‘PreparaQ uestionarioDisciplina’ e ‘PreparaQuestionarioDocente’. O significado de uma
query é descrito na próxima secção.
Figura 64 – Macro associada a botão ‘Prepara Perguntas’
1.7.1 ‘Queries’: Inserção Automática das Questões
As querys (interrogações) são um dos módulos principais do Access. Através das querys
é possível graficamente elaborar interrogações elaboradas a uma base de dados. A título
de exemplo das potencialidades e facilidade de utilização das interrogações do Access,
veja-se a Figura 65 a Figura 66 e a Figura 67 (não é objectivo deste texto explicar a
linguagem gráfica de interrogações do Access): após seleccionar na janela principal do
(c) Pedro Ramos, 2004
45
Aplicações em MSAccess, Questionários Online
Access a opção de criar uma nova query (‘Design View’) e adicionar as tabelas
‘Questionario’ e ‘Profissão’ (a ligação entre elas é feita automaticamente pelo Access
caso ela tenha sido indicada na janela das relationships ), podemos formular a
interrogação “listar, para cada profissão, o total de questio nários preenchidos por
inquiridos licenciados no ISCTE” (Figura 66). A “resposta” é apresentada no formato
apresentado na Figura 67.
Figura 65 – Criação de ‘Query’ para listagem de profissões – Indicação de tabelas envolvidas
(c) Pedro Ramos, 2004
46
Aplicações em MSAccess, Questionários Online
Figura 66– Criação de ‘Query ’ para listagem de profissões – Indicação das restrições
Figura 67– Criação de ‘Query’ para listagem de profissões – Resultado da execução da query
No presente caso de estudo, o objectivo não é o de criar uma listagem mas sim o de
utilizar a query para criar registos nas tabelas ‘RDisciplina ’ e ‘RDocente’. Para adicionar
os
registos
à
tabela
‘RDisciplina’
cria-se
uma
nova
query
(‘PreparaQuestionarioDisciplina’) adicionando- lhe apenas a tabela ‘Disciplina’.
Posteriormente, no menu ‘Query’, ‘Append Query’, indica-se que pretendemos adicionar
registos à tabela ‘RDisciplina’ (Figura 68). Na Figura 69 está indicada a query desejada:
inserir em ‘RDisciplina’ todas as siglas da tabela ´Disciplina’ e, para cada sigla, o número
do questionário que consta no formulário ‘Questionário’.
Para adicionar os registos à tabela ‘RDocente’
‘PreparaQuestionarioDocente ’ ilustrada na Figura 70.
(c) Pedro Ramos, 2004
é
criada
a
query
47
Aplicações em MSAccess, Questionários Online
Figura 68 – Criação de ‘Query ‘PreparaQuestionarioDisciplina’
Figura 69 – ‘Query’ ‘PreparaQuestionarioDisciplina’
(c) Pedro Ramos, 2004
48
Aplicações em MSAccess, Questionários Online
Figura 70 – ‘Query’ ‘PreparaQuestionarioDocente’
1.8 Relatórios
A criação de relatórios no Access (‘Reports’) é muito semelhante à forma de criação de
formulários. Os relatórios, dado que se destinam a ser impressos, não per mitem a edição
de dados.
Nas seguintes figuras (da Figura 71 à Figura 75) ilustra-se a criação de um relatório que
lista, para cada disciplina, todos os inquéritos recolhidos com as respostas respectivas
(apenas as seis primeiras). De seguida altera-se a listagem de modo a apresentar a média
de cada disciplina por questão (Figura 76). Numa primeira fase adicionam-se todos os
atributos das tabelas disciplina (Figura 71) e RDisciplina (Figura 72), depois indica-se
que os inquéritos são agrupados por disciplina (Figura 73) e que não é pretendido mais
nenhum agrupamento (Figura 74), e por fim indica-se o critério de ordenação (Figura 75).
As restantes fases da criação do relatório dizem respeito apenas a questões de formatação.
Depois de criada a listagem, convém atribuir um título e formatá- la de modo a caber
numa folha A4, nomeadamente remover a questão sete, diminuir o tamanho dos campos,
remover campos redundantes (não é necessário repetir a sigla e designação da disciplina
para todos os inquéritos). Por fim adiciona m-se seis atributos, um para cada questão,
onde, na propriedade ‘Control Source’, se indica que o seu conteúdo é a média das
respectivas respostas. A Figura 4 mostra a listagem tal como ficará impressa após
esconder- mos (Figura 77) a secção onde constam as respostas de cada inquérito.
(c) Pedro Ramos, 2004
49
Aplicações em MSAccess, Questionários Online
Figura 71 – Criação de listagem – Indicação de atributos de tabela ‘Disciplina’
.
Figura 72 – Criação de listagem – Indicação de atributos de tabela ‘RDisciplina’
(c) Pedro Ramos, 2004
50
Aplicações em MSAccess, Questionários Online
Figura 73 – Criação de listagem – Indicação de agrupamento por disciplina
Figura 74 – Criação de listagem – Indicação de não e xistência de mais agrupamentos
(c) Pedro Ramos, 2004
51
Aplicações em MSAccess, Questionários Online
Figura 75 – Criação de listagem – Indicação de ordenação por disciplina
Figura 76 – Listagem de avaliações e respectivas média
(c) Pedro Ramos, 2004
52
Aplicações em MSAccess, Questionários Online
Figura 77 – Tornar invisíveis as respostas por questionário
1.9 Inicialização
Para chamar a aplicação a partir do Windows é suficiente executar o ficheiro criado ao
longo deste texto. Caso pretendamos que, por exemplo, o formulário ‘Questionário ’ seja
automaticamente chamado no momento em que a base de dados é executada, devemos
indicar esse requisito através dos menus ‘Tools’ e ‘Startup’. Na opção ‘Display
Form/Page ’ indicamos o formulário ‘Questionário ’ (Figura 78). Nesta janela é possível
escolher um título para a aplicação, atribuir um ícone e definir outras opções associadas
às funcionalidades que pretendemos oferecer aos utilizadores (podemos, por exemplo,
inibir ao utilizador o acesso aos objectos do Access – ‘Display Database Window’)
(c) Pedro Ramos, 2004
53
Aplicações em MSAccess, Questionários Online
Figura 78 - Inicialização
1.10 Notas Finais
Ao longo deste capítulo ilustramos algumas funcionalidades do Access através de um
caso de estudo simples. Ao longo dos dois restantes capítulos serão introduzidas novas
funcionalidades e serão aperfeiçoadas algumas soluções aqui apresentadas,
nomeadamente, atribuição automática do número de questionário e flexibilizar o texto
das questões (não associar o texto directamente ao formulário, mas a uma tabela a que os
utilizadores com privilégios para tal terão acesso para poderem alterar o texto das
questões).
(c) Pedro Ramos, 2004
54
Aplicações em MSAccess, Questionários Online
2 Módulo Intermédio
2.1 Funcionalidades
O essencial das funcionalidades e requisitos pretendidos no presente módulo são:
1. Construir uma página Web para preenchimento remoto dos questionários;
2. Elaborar um formulário que sintetize as avaliações (valores médios);
3. Facultar ao gestor da aplicação a possibilidade de indicar quais as disciplinas cujo
inquérito pode ser disponibilizado;
4. Possibilitar ao gestor da aplicação editar e alterar o texto das questões;
5. No formulário e página Web, apenas permitir que o utilizador possa aceder aos
campos ‘Outra Licenciatura’, ‘Outra Profissão’ e ‘Outra Universidade’ caso tenha
optado pela opção ‘Outra’ nas respectivas listas de valores associadas;
6. Flexibilizar a base de dados para que esta possa armazenar a evolução das
avaliações (nomeadamente associar os inquéritos e os docentes às edições dos
cursos).
2.2 O Redesenho da Base de Dados
Para facultar ao gestor da aplicação a possibilidade de seleccionar as disciplinas cujo
inquérito pode ser disponibilizado torna-se necessário alterar a base de dados. Uma
solução simples e eficaz consiste em adicionar um campo booleano (um campo cujos
valores possíveis são ‘verdade’ ou ‘falso’) na tabela das disciplinas. Apenas as disciplinas
cujo atributo (que denominámos de ‘Questionário’) assume o valor ‘verdade’ serão
listadas na lista de disciplinas disponibilizadas aos utilizadores que acedem ao formulário
de preenchimento de questionários.
Figura 79 – Adicionar atributo ‘Questionário’ à tabela ‘Disciplina’
(c) Pedro Ramos, 2004
55
Aplicações em MSAccess, Questionários Online
De forma armazenar o historial dos inquéritos é necessário associar os questionários à
edição do curso. Para suportar esta funcionalidade são necessárias alterações na base de
dados, nomeadamente:
1. Associar uma edição a cada questionário (Figura 80);
2. Associar uma edição a cada associação entre docente e disciplina (à tabela
‘Lecciona’) (Figura 81).
Adicionar a edição à tabela ‘Lecciona’ envolve as seguintes fases:
a. Criar o atributo;
b. Remover a chave da tabela (porque a edição terá que fazer parte de chave),
o que deverá ser efectuado através da janela de índices (selecciona-se a
opção ‘View Indexes’ e, com a tecla ‘Delete ’, apagam-se todas as linhas
da tabela de índices);
c. Preencher a tabela de modo a que o novo atributo não tenha valores null
(isto porque os atributos que compõem a chave são de preenchimento
obrigatório), o que deverá ser efectuado depois de gravar as duas
alterações anteriormente efectuadas;
d. Voltar a editar a tabela e criar uma chave composta pelos três atributos.
Figura 80 – Acrescentar atributo ‘Edição’ à tabela ‘Questionário’
(c) Pedro Ramos, 2004
56
Aplicações em MSAccess, Questionários Online
Figura 81- Associar atributo ‘Edição’ à tabela ‘Lecciona’
Para possibilitar ao gestor da aplicação editar e alterar o texto das questões é necessário
criar uma tabela para armazenar as questões do questionário . A estrutura da tabela é a
constante na Figura 82.
Figura 82 – Tabela ‘Questão’
2.3 Formulário Questionário
O atributo booleano ‘Questionário’ da tabela de disciplinas foi criado para que, no
formulário ‘Questio nário ’, apenas se visualizassem as disciplinas cujo valor do atributo
fosse ‘verdade’. Para obter essa funcionalidade é necessário redefinir a ‘Row Source ’
(fonte dos dados) associada ao formulário: substituir a tabela ‘D isciplina’ (todas as
disciplinas) pela lista de disciplinas cujo atributo ‘Questionário ’ assume o valor
‘verdade’. A linguagem SQL (‘Structured Query Language ’), um standard na área das
bases de dados, possibilita indicar de uma forma fácil e intuitiva a definição da listagem
pretendida (Figura 83):
(c) Pedro Ramos, 2004
57
Aplicações em MSAccess, Questionários Online
SELECT Disciplina.SiglaDisciplina, Disciplina.Disciplina
FROM Disciplina WHERE (((Disciplina.Questionario)=Yes));
A expressão SQL significa “listar - SELECT - os atributos ‘SiglaDisciplina’ e
’Disciplina’ da – FROM - tabela Disciplina, mas apenas - WHERE - aquelas cujo
atributo ‘Questionário’ assuma o valor lógico ‘verdade´”.
A linguagem SQL é extremamente poderosa e a sua aprendizagem é fundamental para
que qualquer utilizador possa ter acesso a interrogações avançadas a bases de dados. Não
é objectivo deste texto apresentar a linguagem SQL. O módulo de interrogações
(‘Querys’) do Access (apresentado no módulo anterior) permite, de uma forma gráfica,
elaborar certo tipo de interrogações às tabelas. No entanto, no módulo de interrogações
(através do menu ‘File’) é possível aceder a uma janela onde, através de comandos SQL,
também se elaboram interrogações às tabelas. A linguagem SQL é mais poderosa do que
o modo gráfico oferecido pelo Access. Uma forma possível de treinar ou aprender SQL
consiste em elaborar graficamente uma interrogação e, recorrendo à janela de comandos
SQL, ver o comando SQL automaticamente gerado pelo Access.
Figura 83 – ‘Control Source’ associado à lista de disciplinas
Ainda relativamente ao formulário ‘Questionário’ é necessário acrescentar o atributo
‘Edição’ (Figura 84).
Figura 84 – Acrescentar atributo ‘Edição’ ao formulário ‘Questionário’
(c) Pedro Ramos, 2004
58
Aplicações em MSAccess, Questionários Online
Uma outra alteração desejável no formulário ‘Questionário’ consiste em apenas permitir
que o utilizador possa aceder aos campos ‘Outra Licenciatura’, ‘Outra Profissão’ e ‘Outra
Universidade’ caso tenha optado pela opção ‘Outra’ nas respectivas listas de valores
associadas. Para tal é necessário recorrer a programação na linguagem Visual Basic.
A linguagem Visual Basic (VB) é uma linguagem de programação que permite introduzir
um grande leque de funcionalidades nas aplicações. Uma aplicação que não recorra à
linguagem Visual Basic será certamente apenas um protótipo de aplicação dado que
muitas funcionalidades cruciais apenas poderão ser desenvolvidas recorrendo ao VB. Não
é objectivo deste texto apresentar a linguagem Visual Basic.
Para aceder ao editor de VB para, por exemplo, condicionar o acesso ao atributo ‘Outra
Profissão’, na janela de propriedades do atributo ‘Profissão’ selecciona-se o evento ‘After
Update’ (após o utilizador alterar o conteúdo do atributo Profissão), opta-se pelo tipo de
evento ‘Event Procedure ’ (Figura 85) e automaticamente temos acesso ao editor de VB.
As instruções VB necessárias à implementação do acesso condicionado aos atributos
constam na Figura 86. As designações dos procedimentos (‘Sub’) são atribuídas
automaticamente pelo VB e não devem ser alteradas. O controlo de acesso ao atributo
‘Outra Profissão’ é assegurado pelas seguintes instruções:
If Me.Profissão = 0 Then
Me.OutraProfissão.Enabled = True
Else
Me.OutraProfissão = Null
Me.OutraProfissão.Enabled = False
End If
O seu significado é o seguinte:
“se o atributo profissão do formulário activo (Me.Profissão, em que Me representa, no
exemplo, o formulário activo, i.e., o formulário ‘Questionário ’) tiver o valor ‘0’ (‘0’ é o
valor associado à descrição ‘Outra’ na lista de valores) então o atributo ‘OutraProfissão ’
fica acessível ao utilizador (Enabled = True ), caso contrário (Else) o atributo
‘OutraProfissão’ fica inacessível ao utilizador (Enabled = False) e é eliminado o seu
conteúdo (Me.OutraProfissão = Null).
(c) Pedro Ramos, 2004
59
Aplicações em MSAccess, Questionários Online
Figura 85 – Associação de evento VB ao atributo ‘Profissão’
Figura 86 – Acesso condicionado a atributos em VB
(c) Pedro Ramos, 2004
60
Aplicações em MSAccess, Questionários Online
Ao longo do texto são utilizados comandos e estruturas de dados que, por omissão, não
costumam estar disponíveis no Access. Na figura Figura 87 apresentam-se as referências
necessárias para a implementação do presente caso de estudo. A sua selecção é obtida
através do menu ‘Tools’ que é disponibilizado no ambiente de desenvolvimento do VB.
Figura 87 – ‘References’ necessárias para o caso de estudo
A última alteração necessária no formulário ‘Questionário’ prende-se com o
preenchimento das designações das questões. Pretende-se que quando os
(sub)formulários ‘QDisciplina’ e ‘QDocente’e são abertos, automaticamente o Access vá
buscar as designações das questões à tabela ‘Questão’ e as coloque nas labels (área onde
constam os nomes dos atributos do formulário) dos formulários. Também é desejável que
as setas de navegação (‘Navigation Buttoms’) no (sub)formulário ‘QDocente’ apenas
sejam acessíveis caso exista mais do que um docente para a disciplina.
O procedimento VB deverá estar associado ao evento ‘On Open’ dos formulários (o
procedimento é executado no momento em que o formulário é aberto) (na Figura 88
ilustra-se a criação do procedimento para o formulário ‘QDisciplina’). O conjunto de
instruções VB constam na Figura 90 e na Figura 91.
(c) Pedro Ramos, 2004
61
Aplicações em MSAccess, Questionários Online
Figura 88 – Evento ‘On Open’ no formulário ‘QDisciplina’
Sem entrar em detalhes, de seguida apresenta-se o significado do conjunto de instruções.
Definição de variáveis, i.e., criar “espaços” para armazenar o resultado de instruções:
Dim db As Database (variável que armazena a base de dados)
Dim ColecaoRegisto As DAO.Recordset (variável que armazena um conjunto
de registos seleccionados da base de dados)
Dim Sql As String (variável que armazena o comando SQL)
Dim i As Integer (variável auxiliar)
Indicar que pretendemos trabalhar com a base de dados activa
Set db = CurrentDb
Definir a interrogação desejada: lista ordenada alfabeticamente (ascendentemente) de
todas as questões cujo tipo é ‘DI’ (Disciplina).
Sql = "Select Questao From Questao Where Tipo = 'DI' Order By
IDQuestao ASC"
Executar a interrogação e guardar o resultado na lista ‘ColecaoRegisto’
Set ColecaoRegisto = db.OpenRecordset(Sql, dbOpenSnapshot)
i = 1
Enquanto ainda existirem elementos na lista, colocar na label do formulário o elemento
da lista (se for o primeiro elemento coloca-se na primeira label – questão 1, se for o
segundo ...). Note-se que Label_1, Label_2, ... são as designações que atribuímos às
labels no formulário (ver Figura 89).
(c) Pedro Ramos, 2004
62
Aplicações em MSAccess, Questionários Online
Do While Not ColecaoRegisto.EOF
If i = 1 Then Me.Label_1.Caption = ColecaoRegisto!Questao
If i = 2 Then Me.Label_2.Caption = ColecaoRegisto!Questao
If i = 3 Then Me.Label_3.Caption = ColecaoRegisto!Questao
If i = 4 Then Me.Label_4.Caption = ColecaoRegisto!Questao
If i = 5 Then Me.Label_5.Caption = ColecaoRegisto!Questao
If i = 6 Then Me.Label_6.Caption = ColecaoRegisto!Questao
i = i + 1
ColecaoRegisto.MoveNext
Loop
Figura 89 – Alteração do nome da ‘Label’
As instruções VB adicionais associadas ao formulário QDocente têm por função apenas
permitir que o utilizador possa ter acesso aos botões de navegação caso exista mais do
que um docente para a disciplina. A seguinte expressão retorna o total de docentes
associado à disciplina na presente edição:
Sql = "Select count(*) As total From leciona Where Edicao = " &
Forms!Questionario!Edicao & " And "
Sql = Sql + "SiglaDisciplina = '" &
Forms!QDisciplina!SiglaDisciplina & "'"
(c) Pedro Ramos, 2004
63
Aplicações em MSAccess, Questionários Online
Figura 90 – Preenchimento das labels das questões sobre disciplinas
Figura 91 Preenchimento das labels das questões sobre docentes
(c) Pedro Ramos, 2004
64
Aplicações em MSAccess, Questionários Online
2.4 Formulário Síntese
O formulário apresentado nesta secção, e ilustrado na Figura 92, sintetiza os resultados
dos questionários por questão e para cada disciplina (valores médios). Os botões de
navegação na zona da avaliação dos docentes devem-se ao facto de podermos visualizar
as avaliações médias de todos os docentes (à semelhança do efectuado na secção anterior,
poderíamos ter “escondido” os botões quando apenas existisse um docente).
O formulário divide-se em cinco zonas:
a) principal;
b) questões relativas às disciplinas;
c) questões relativas aos docentes;
d) avaliações médias das questões relativas às disciplinas;
e) avaliações médias das questões relativas aos docentes.
A zona principal não está assente sobre nenhuma tabela e contém as duas listas de valores
(edição e disciplina), o botão para exportação de dados para Excel e a ligação às restantes
quatro zonas.
As figuras que ilustram a criação do formulário assumem que o leitor já se encontra
familiarizado com o modo de desenho dos formulários. Não são mostradas as sequência s
de passos (modo assistido, wizard) necessários à criação de alguns objectos, mas apenas o
resultado final. Por exemplo, na Figura 93 podemos observar os valores das propriedades
das duas Combo Box e, ao contrário do efectuado no primeiro capítulo, não ilustramos os
vários passos necessários à sua criação através do modo assistido. O modo assistido é
sempre facultativo e, frequentemente, é necessário recorrer ao modo manual para
especificar algumas propriedades. O presente formulário foi integralmente desenhado
sem recorrer ao modo assistido.
(c) Pedro Ramos, 2004
65
Aplicações em MSAccess, Questionários Online
Figura 92 – Formulário de síntese de avaliações
Na janela de propriedades da lista de valores associada às disciplinas, as opções ‘Row
Source Type ’, ‘Row Source’, ‘Column Count’ e ‘Bound Column’ significam,
respectivamente, o tipo de fonte dos dados (em vez de os dados serem provenientes de
uma tabela ou query, eles poderiam ser valores constantes associados unicamente a este
campo), a fonte dos dados (usualmente o nome da tabela ou, o nome ou definição da
query), o número de colunas que pretendemos mostrar (quando, por exemplo, optamos
por uma tabela, a ordem dos atributos da tabela é relevante porque no formulário irão ser
mostrados os n primeiros campos) e a indicação de qual o campo cujo valor ficará
registado no campo do formulário associado à lista de valores. No caso da lista de valores
associada à edição, dado que não existe nenhuma tabela que armazene as edições optouse por recorrer a uma interrogação que lista ordenadamente todos os valores do campo
‘Edição’ (eliminando duplicados – ‘Distinct’) da tabela de questionário s.
A ligação entre o formulário às quatro zonas que suportam as questões é feita através de
subformulários (‘SubForm’). Um subformulário é um formulário igual aos restantes mas
que é aberto dentro de outro formulário. O procedimento manual para a sua criação
consiste em primeiro criar o formulário de uma forma autónoma e, posteriormente, no
formulário que o vai abrir (formulário pai) criar um objecto do tipo subformulário. No
momento da criação do subformulário indicamos o nome do formulário (criado
anteriormente) e, caso seja relevante (usualmente é), a forma como o formulário pai se
(c) Pedro Ramos, 2004
66
Aplicações em MSAccess, Questionários Online
vai relacionar com ele (i.e., a indicação dos campos em comum). No formulário pai é
necessário atribuir um nome ao objecto subformulário que não tem necessariamente que
corresponder ao nome do formulário aberto pelo formulário pai. Na Figura 92 indica-se
que o subformulário ‘ChildQuestãoDisciplina’ está associado ao formulário
‘SubQuestao_SinteseQuestionarioDisciplina ’, o subformulário ‘ChildQuestaoDocente ’
está associado ao formulário ‘SubQuestaoDoc_SinteseQuestionarioDisciplina’, etc. Na
Figura 94 pode-se observar que o atributo SiglaDisciplina é o escolhido para associar o
formulário com o subformulário ‘ChildValoresDisciplina’. A associação com o
subformulário ‘ChildValoresDocente’ também é assegurada pelo atributo
‘SiglaDisciplina’. Não existem atributos a associar o formulário com os dois restantes
subformulários (ou seja, as questões não são dependentes dos questionários).
Figura 93 – Propriedades das Combo Box
(c) Pedro Ramos, 2004
67
Aplicações em MSAccess, Questionários Online
Figura 94 - Ligação entre formulário e sub formulário
Na
Figura
95
apresentam-se
algumas
propriedades
do
formulário
‘SubQuestao_SinteseQuestionarioDisciplina ’ bem como propriedades do único atributo
do formulário, o atributo ‘Questão ’. A fonte de dados (‘Data Source ’) do formulário é o
conjunto ordenado das questões relacionadas com a disciplina (o resultado da
interrogação apresentada). O facto da propriedade ‘RecordSet Type’ assumir o valor
‘Snapshot’ significa que através deste formulário é impossível alterar os dados da base de
dados (por razões de eficiência é importante indicar sempre que a propriedade ‘RecordSet
Type’ assume o valor ‘Snapshot’ quando o formulário é apenas de consulta).
A única diferença entre os formulários ‘SubQuestao_SinteseQuestionarioDisciplina’ e
‘SubQuestaoDoc_SinteseQuestionarioDisciplina’ diz respeito ao valor da propriedade
‘Record Source’: no segundo formulário o seu valor é: SELECT questao FROM
Questao WHERE Tipo='DO' ORDER BY IDQuestao.
(c) Pedro Ramos, 2004
68
Aplicações em MSAccess, Questionários Online
Figura 95 – Propriedades de subformulário e atributo ‘Questão’
Na
Figura
75
apresentam-se
algumas
propriedades
do
formulário
‘SubDocente_SinteseQuestionarioDisciplina ’. Para além do atributo ‘Nome ’ (para
mostrar o nome do docente) existem sete atributos, cada um deles para armaze nar a
média das questões respectivas. A propriedade ‘Record Source’ assume o valor
‘SubDocente_SinteseQuestionarioDisciplina ’, valor que corresponde a uma query
apresentada na Figura 97. Essa query encarrega-se de calcular os valores médios,
colocando cada valor num atributo específico (‘AvgOfDI1’ para a média da questão ‘1’,
‘AvgOfDI2’ para a média da questão ‘2’, etc.). Os campos do formulário têm como
‘Control Source’ os campos da referida query. A query, para além de retornar os sete
valores médios, também retorna o nome do docente. É por essa razão que o nome do
docente pode surgir como o ‘Control Source’ de um atributo do formulário.
A query (Figura 97) foi criada recorrendo ao módulo de ‘Querys’ do Access. As tabelas
envolvidas são:
(i) ‘Questionário ’ (necessária por forma a assegurar que apenas são contabilizados os
questionários da edição seleccionada pelo utilizador no formulário, e.g.,
‘Questionario.Edicao = [Forms]![SinteseQuestionarioDisciplina]![Edicao] ’);
(ii) ‘Docente’ (apenas para seleccionar o nome do docente);
(iii) ‘RDocente’.
As associações entre as tabelas são efectuadas automaticamente pelo Access. A função
‘Avg’ calcula, para cada questão, o seu valor médio. A expressão ‘RDocente.
SiglaDisciplina = [Forms]![SinteseQuestionarioDisciplina]![SiglaDisciplina]’ assegura
(c) Pedro Ramos, 2004
69
Aplicações em MSAccess, Questionários Online
que apenas são calculadas as questões relativas à disciplina indicada pelo utilizador no
formulário.
A interrogação expressa na linguagem SQL é também apresentada na figura.
Alternativamente poder-se-ia ter optado por, na propriedade ‘Record Source’ ter colocado
comando SQL em vez do nome da query, Desta forma a query seria dispensável.
Figura 96 – Propriedades de subformulário
Figura 97 – Query de suporte a ‘Row Source’
Na Figura 98 ilustra-se a interrogação necessária para o formulário
‘SubDisciplina_SinteseQuestionarioDisciplina’. A interrogação apenas envolve as tabelas
‘Questionário’ (apenas por causa da edição) e ‘RDisciplina’.
(c) Pedro Ramos, 2004
70
Aplicações em MSAccess, Questionários Online
Figura 98 - Query de suporte a ‘Row Source’
Para finalizar o formulário é necessário colocar um botão que exporte os dados constantes
no formulário para uma folha de cálculo Excel (Figura 99). Ao evento ‘OnClick’ do
botão associamos a macro ‘ExportaQuestionarioExcel’. A macro (também apresentada na
figura) executa a acção ‘TransferSpreadsheet’ que tem como consequência a criação, na
directoria corrente, de um ficheiro denominado ‘DadosQue stionario.xls’.
(c) Pedro Ramos, 2004
71
Aplicações em MSAccess, Questionários Online
Figura 99 – Exportação de dados para Excel
2.5 Página Web Questionário
Ao longo desta secção serão apresentados os passos necessários para a criação de uma
página Web para preenchimento do questionário através do browser Internet Explorer
versão 6 ou superior. O Microsoft Access não é a solução ideal para criar soluções Web
de grande porte ou distribuídas (as páginas obrigam a que o utilizador tenha no seu
computador o Internet Explorer e o Microsoft Access), no entanto é uma solução possível
para intranets. Na Figura 100 apresenta-se o layout da página para preenchimento dos
questionários online.
Na sequência de passos que de seguida se indica, foi utilizado o modo assistido apenas
para o passo inicial (Figura 101 e Figura 102), i.e., associar a página à tabela
‘Questionário’ indicando apenas o atributo relativo ao número de que stionário. Para que o
Access automaticamente crie as Combo Box, os restantes atributos foram colocados
(“arrastados”) manualmente (Figura 103).
(c) Pedro Ramos, 2004
72
Aplicações em MSAccess, Questionários Online
Figura 100 – Página para preenchimento de questionário
(c) Pedro Ramos, 2004
73
Aplicações em MSAccess, Questionários Online
Figura 101 – Criação de página, indicação de tabela de suporte
Figura 102- Criação de página, indicação campo para ordenação
Na Figura 110 ilustra-se, através da propriedade ‘List Display Field’, a forma de, nas
Combo Box (aqui denominadas de ‘DropDown List’), indicar qual o campo que será
(c) Pedro Ramos, 2004
74
Aplicações em MSAccess, Questionários Online
visível ao utilizador. À semelhança do que tínhamos efectuado no formulário
‘Questionário’, o atributo ‘Sexo ’ será preenchido através de ‘Radio Button’ (Figura 105).
Figura 103 Criação de página, colocação de atributos
Figura 104 . Página web, criação de ‘Option Group’
(c) Pedro Ramos, 2004
75
Aplicações em MSAccess, Questionários Online
Figura 105 – Página web, criação de ‘Radio Button’
Na Figura 106 ilustra-se a criação da zona de questões relativas à disciplina: arrasta-se a
query ‘Page RDisciplina ’ (que consta na lista vertical à direita da figura) para a zona
inferior da página (de modo a surgir a sentença “Create New Section below
Questionário”). Opta-se pelo atributo ‘NumQuestio nario’ para fazer a ligação entre as
duas zonas (Figura 107).
Figura 106 - Página web, criação de subsecções
(c) Pedro Ramos, 2004
76
Aplicações em MSAccess, Questionários Online
Figura 107 - Página web, criação de subsecções
A utilização da query ‘PageRDisciplina’ (Figura 108), por oposição à utilização da tabela
‘RDisciplina’, deve-se ao facto de pretendermos apenas as disciplinas cujo atributo
‘Questionário’ assume o valor ‘True’, isto é, disciplinas cuja disponibilização dos
questionários está autorizada. Ao contrário da propriedade ‘Record Source’ dos
formulários, nas páginas web a mesma propriedade só pode assumir valores de tabelas ou
querys (Figura 109), i.e., não pode assumir uma expressão SQL. É por essa razão que foi
criada a query. Note-se que o valor da propriedade ‘Record Source’ da Figura 109 foi
automaticamente atribuído no momento da criação da subsecção (Figura 106 e Figura
107).
(c) Pedro Ramos, 2004
77
Aplicações em MSAccess, Questionários Online
Figura 108 - Query ParerDisciplina
Figura 109 – A propriedade ‘Record Source’
(c) Pedro Ramos, 2004
78
Aplicações em MSAccess, Questionários Online
Figura 110 - Página web, criação de ‘DropDown List’
Para que não seja mostrada mais do que uma disciplina em simultâneo é necessário
aceder à janela de ‘Group Level Properties’ (botão direito do rato em cima de
‘Header:PageRDisciplina’) (Figura 111) e, na propriedade ‘DataPageSize’ indicar o valor
‘1’ (idêntico procedimento deverá ser efectuado para as três secções da página).
Figura 111 - Página web, activar as propriedades de grupo (‘Group Level’)
(c) Pedro Ramos, 2004
79
Aplicações em MSAccess, Questionários Online
Figura 112 - Página web, propriedades de grupo (‘Group Level’)
A terceira secção da página diz respeito às questões relacionadas com a avaliação do
docente. O procedimento para a sua criação é idêntico ao utilizado para a criação da
secção anterior. Como pode ser observado na Figura 113, são necessários dois campos
para fazer a ligação entre a tabela ‘RDocente’ e a secção ‘PagerDisciplina’.
(c) Pedro Ramos, 2004
80
Aplicações em MSAccess, Questionários Online
Figura 113 - Página web, ligação entre subsecções
Os atributos ‘NumQuestionário ’ nas duas secções inferiores são necessários para permitir
a associação entre as secções. No entanto, para o utilizador, esse atributo é irrelevante e
deverá ser tornado invisível (Figura 114). Alguns atributos, nomeadamente a sigla da
disciplina, o nome do docente, o número do questionário e a edição, não poderão ser
alterados pelo utilizador. Para prevenir uma alteração acidental é conveniente impedir o
acesso aos atributos (Figura 115, propriedades Disabled e ReadOnly).
Figura 114 - Página web, tornar atributo invisível
(c) Pedro Ramos, 2004
81
Aplicações em MSAccess, Questionários Online
Figura 115 - Página web, impedir acesso a atributo
À semelhança do que foi efectuado no formulário ‘Questionário ’, o acesso aos atributos
‘Outra Profissão’, ‘Outra Universidade’ e ‘Outra Licenc iatura’ deverá ser cond icionado.
Esse controlo deverá ser efectuado através da linguagem VBScript (bastante semelhante à
linguagem VB). Na Figura 116 ilustra-se a forma de activar o editor de VBScript de
modo a associar o controlo de acesso ao campo ‘Profissão’. O conteúdo do procedimento
VBScript é apresentado na Figura 117.
Figura 116 - Página web, abrir o editor de VBScript
(c) Pedro Ramos, 2004
82
Aplicações em MSAccess, Questionários Online
Figura 117 - Página web, um exemplo de VBScript para controlo de acesso a campos
Para finalizar a página acrescentámos uma caixa (‘border’) à volta de cada secção. De
forma a não impedir que o cursor tenha acesso aos objectos da página é preciso indicar
que a caixa deverá ser disposta por detrás dos restantes objectos (Figura 118 – ‘Send To
Back’).
(c) Pedro Ramos, 2004
83
Aplicações em MSAccess, Questionários Online
Figura 118 - Página web, dispor caixa por detrás
De forma a garantir que a página pode ser acedida de qualquer computador é necessário
assegurar que, no Access, a página está associada ao ficheiro html correcto (Figura 119),
e que, nas propriedades da página (‘Questionário’) o atributo ‘Conection String’ refere o
endereço correcta da base de dados (Figura 120). Note-se que no exemplo das figuras,
‘10.10.33.248’ refere-se ao endereço IP do computador que aloja a aplicação
(concretamente, os dois ficheiros – Questionario.mdb e Questionário.htm – estão alo jados
(c) Pedro Ramos, 2004
84
Aplicações em MSAccess, Questionários Online
na directoria ‘C :\Inetpub\wwwroot\Questionario\’). A disponibilização das páginas é
assegurada pelo servidor da Microsoft que acompanha o Microsoft Windows, o IIS
(‘Internet Information Services’), Figura 121. Na Figura 122 ilustra-se a forma de, no
Internet Explorer, abrir a página de acesso aos questionários.
Figura 119 - Referência à localização das páginas
Figura 120 – Referência à localização da base de dados
(c) Pedro Ramos, 2004
85
Aplicações em MSAccess, Questionários Online
Figura 121 – Disponibilizar as páginas através do IIS
Figura 122 – Abrir a página ‘Questionário.html’
(c) Pedro Ramos, 2004
86
Aplicações em MSAccess, Questionários Online
3 Módulo Avançado
3.1 Funcionalidades
O essencial das funcionalidades e requisitos pretendidos no presente módulo são:
1. Condicionar o acesso ao preenchimento de questionários através de um sistema de
senhas geradas automaticamente e distribuídas por email;
2. Disponibilizar um conjunto de formulários para cálculo e análise de estatísticas
comparativas entre disciplinas e docentes.
Associado à primeira funcionalidade foi definido o seguinte procedimento: a aplicação
gera automaticamente uma lista de senhas e associa cada uma delas a um endereço de
email (assume-se que se encontra predefinida uma lista de endereços de email). Cada
endereço de email recebe um email onde, para além de constar a senha, é também
indicado o endereço http da página onde o questionário está disponível. Ao aceder a essa
página o utilizador introduz a senha e, caso seja a primeira vez que acede ao questionário,
terá previamente que optar pela opção ‘Criar Questionário’ (Figura 123).
Figura 123 – Página para validação de senha
3.2 O Redesenho da Base de Dados
A implementação de um sistema de controlo de acessos através de senhas enviadas por
email tem várias implicações na base de dados. Para além de ser necessário acrescentar
um atributo à tabela ‘Questionário’ (atributo ‘Senha’), é também necessário criar duas
novas tabelas: uma tabela para armazenar as chaves (senhas de acesso) e outra para
guardar os endereços de email.
Na Figura 124 apresenta-se a estrutura da tabela ‘Chave’. De forma a controlar o envio de
senhas e a sua recepção de questionários foram criados os seguintes atributos:
1. ‘Chave ’
- armazena a chave (senha) gerada automaticamente;
2. ‘Cativa ’ – indica (valor true) que a chave já foi enviada por email para o
destinatário;
3. ‘DataCativa ’ – data em que a chave ficou cativa;
(c) Pedro Ramos, 2004
87
Aplicações em MSAccess, Questionários Online
4. ‘Entregue’ – indica (valor true) que a chave foi utilizada para criar um
questionário, ou seja, o destinatário já a utilizou;
5. ‘DataEntregue ’ – data em que a chave ficou entregue;
6. ‘Inibida’ - indica (valor true) que a chave não poderá ser enviada por email (por
alguma razão o administrador poderá ter criado chaves de reserva).
Note-se que não fica registado na base de dados quais os endereços de email que ficaram
associados às chaves, ou seja, fica preservado o anonimato do questionário.
Figura 124 – Tabela ‘Chave’
Na Figura 125 apresenta-se a tabela que armazena a lista de emails (tabela ‘ListaEmail’).
O atributo ‘Contactado’ serve para registar se já foi enviado o email com a chave ao
destinatário. Este atributo é necessário porque não fica registado na base de dados a
relação entre as senhas e os endereços de email.
Na Figura 126 ilustra-se a criação do atributo ‘Chave ‘na tabela ‘Questionário ’. O
atributo é necessário para permitir que um utilizador edite (altere) o seu questionário (o
questionário vai sendo respondido ao longo do ano lectivo consoante vão terminando as
disciplinas). Note-se que se optou por indicar que não poderão existir dois questionários
associados à mesma chave (‘Indexed Yes No Duplicates’).
(c) Pedro Ramos, 2004
88
Aplicações em MSAccess, Questionários Online
Figura 125 – Tabela ‘ListaEmail’
Figura 126 – Atributo ‘Chave’ na tabela ‘Questionário’
(c) Pedro Ramos, 2004
89
Aplicações em MSAccess, Questionários Online
Na Figura 131, na Figura 132, na Figura 133 e na Figura 134 apresentam-se os quatro
formulários implementados para auxiliar a aná lise dos questionários. O primeiro faculta a
evolução de uma disciplina ao longo das várias sessões. O segundo a evolução da
prestação de um docente. Os dois restantes permitem para uma edição, respectivamente,
comparar uma disciplina com as restantes e um docente com os restantes.
Figura 127 - Formulário ‘Est_EvolDisciplina’
Figura 128 - Formulário ‘Est_EvolDocente’
Figura 129 - Formulário ‘Est_ComparaDisciplina’
(c) Pedro Ramos, 2004
90
Aplicações em MSAccess, Questionários Online
Figura 130 - Formulário ‘Est_ComparaDocente’
As tabelas associadas aos formulários são apresentadas na Figura 131, Figura 132, Figura
133 e Figura 134 respectivamente.
Note-se que estas tabelas foram criadas apenas para facilitar a elaboração dos
formulários. Dado que são tabelas com valores de cálculos intermédios, sempre que o
utilizador indica que quer calcular os valores estatísticos, o programa automaticamente
apaga todos os valores das tabelas e volta a recalculá-los.
(c) Pedro Ramos, 2004
91
Aplicações em MSAccess, Questionários Online
Figura 131 – Tabela ‘Est_EvolDisciplina’
Na tabela ‘Est_EvolDisciplina’ os atributos ‘ED1’ ... ‘ED6’ guardam sequencialmente o
número da edição do questionário. Os atributos ‘MED1’ ... ‘MED6’ guardam o valor
médio por questão para a edição respectiva. Veja-se o seguinte exemplo.
Na base de dados apenas existe informação sobre duas edições (a edição 4 e a edição 5). Apenas
foram consideradas duas questões (Q1 e Q2) e uma disciplina (MAT). A tabela
‘Est_EvolDisciplina’ ficará preenchida com os dois seguintes registos:
MAT – Q1 – 4 – 5 – null – null – null – null - 3,5 – 4,2 – null – null – null – null
MAT – Q2 – 4 – 5 – null – null – null – null - 3,5 – 4,2 – null – null – null – null
O primeiro registo significa que as duas primeiras colunas (ED1=4 e ED2=5) do formulário dizem
respeito respectivamente às edições 4ª e 5ª do curso e, a disciplina de Matemática relativamente à
primeira questão obteve uma de 3,5 valores na 4ª edição e 4,2 valores na 5ª edição. As restantes
quatro colunas do formulário não são preenchidas.
(c) Pedro Ramos, 2004
92
Aplicações em MSAccess, Questionários Online
Figura 132 - Tabela ‘Est_EvolDocente’
Na tabela ‘Est_ComparaDisciplina’ os atributos ‘D1’ ...’D12’ guardam a sigla das 12
disciplinas que podem ser comparadas no formulário. Para cada disciplina é armazenado
o valor médio da avaliação para a questão em causa (atributo ‘IDQuestao’).
(c) Pedro Ramos, 2004
93
Aplicações em MSAccess, Questionários Online
Figura 133 - Tabela ‘Est_ComparaDisciplina’
(c) Pedro Ramos, 2004
94
Aplicações em MSAccess, Questionários Online
Figura 134 - Tabela ‘Est_ComparaDocente’
Na tabela ‘Est_ComparaDocente’ os atributos ‘D1’ ...’D12’ guardam o ‘ID’ dos 12
docentes que podem ser comparados no formulário. Para cada docente é armazenado o
valor médio da avaliação para a questão em causa (atributo ‘IDQuestao’). O nome dos
docentes será mostrado no formulário sob a forma de legenda (para cada número é
mostrado o nome respectivo).
A última alteração na base de dados consiste na criação de uma tabela denominada
‘Dummy’ (Figura 135) e que apenas possui uma coluna (cujo nome e valores são
indiferentes). Esta tabela não é necessária criar em outros sistemas de gestão de base de
(c) Pedro Ramos, 2004
95
Aplicações em MSAccess, Questionários Online
dados alternativos ao Microsoft Access. Trata-se de uma tabela sem semântica de
utilidade exclusivame nte técnica e que apenas é utilizada para contornar certas limitações
de comandos SQL. Ela será utilizada mais adiante.
Figura 135 – Tabela ‘Dummy’
Na Figura 136 podemos observar as relações entre todas as tabelas.
(c) Pedro Ramos, 2004
96
Aplicações em MSAccess, Questionários Online
Figura 136 – Relações entre tabelas
3.3 Formulário Lista de Chaves
O formulário da Figura 137 permite gerar automaticamente as chaves, enviá-las por
email, inibir (cancelar) chaves ainda não enviadas e monitorizar as chaves que já foram
utilizadas para criar questionários.
Figura 137 – Visualização de formulário ‘Lista de Chaves’
(c) Pedro Ramos, 2004
97
Aplicações em MSAccess, Questionários Online
O botão ‘Inibir’ altera na base de dados o valor do atributo ‘Inibida’ (coloca a True caso o
valor seja False e vice versa). O botão ‘Gerar Chaves’ apaga as chaves que existem na
tabela e automaticamente e aleatoriamente gera novas chaves (o número de chaves é igual
ao número de registos na tabela ‘ListaEmail’). O botão ‘Enviar Emails’ recorre ao
programa de email por defeito no Windows e envia a seguinte mensagem para todos os
endereços de email que constam na tabela ‘ListaEmail’ cujo atributo ‘Contactado’ não
tenha o valor True:
"Por favor diriga-se ao Site
http://10.10.10.10/Questionario/Questionario.Htm
para
preencher
o
Inquérito. A Palavra Chave que lhe foi aleatoriamente atribuída é XXXXX:
"
O programa percorre a tabela de chaves e, para cada chave não inibida e não cativa,
selecciona o primeiro endereço de email ainda não contactado (atributo ‘Contactado’ com
valor diferente de True) da tabela ‘ListaEmail’.
Os atributos da secção inferior do formulário estão ‘Unbound’, ou seja, não estão
associados a nenhum atributo da base de dados (Figura 138). Os seus valores são
preenchidos automaticamente por um programa em VB.
(c) Pedro Ramos, 2004
98
Aplicações em MSAccess, Questionários Online
Figura 138 – Desenho do formulário ‘Lista de Chaves’
Existem programas em VB associados a:
1. Botão ‘Inibir’;
2. Botão ‘Gerar Chaves’;
3. Botão ‘Enviar Emails’;
4. Um programa associado a cada designação dos atributos (na zona ‘Form
Header’).
Estes últimos programas permitem que, ao clicar na designação de um campo (por
exemplo, ‘Chave’), os registos sejam ordenados pelo atributo em causa (‘Chave’). Ou
seja, o utilizador pode ordenar os registos por ‘Chave’, ‘Cativa?’, ‘Data Cativação’,
‘Entregue?’, ‘Data Entrega ’ e ‘Inibida? ’. O programa em VB associado, por exemplo, à
designação (label) ‘Chave’ é:
Private Sub Chave_Label_Click()
Me.RecordSource = "Select * From Chave Order by Chave;"
End Sub
(c) Pedro Ramos, 2004
99
Aplicações em MSAccess, Questionários Online
Os restantes são idênticos apenas variando o valor da cláusula ‘Order By’ (cláusula que
indica o campo utilizado para a ordenação). No caso da designação ‘Cativa?’ A expressão
será ... Order by Cativa;".
O programa associado ao botão ‘Gerar Chave s’ é o que consta na Figura 139. O
programa começa por perguntar ao utilizador se confirma a anulação de todas as chaves
existentes e, caso o utilizador confirme, o programa apaga as chaves todas, calcula o total
de chaves e, para cada chave chama o procedimento ‘Gerachave’ (Figura 140) e caso este
consiga retornar a chave (retorne um valor diferente de null) a nova chave é inserida na
base de dados e é efectuado o re-display do formulário (Me.RecordSource = "Select * ...).
Por fim são actualizados os totais do formulário através do procedimento ‘Form_Open’.
Este procedimento é também chamado no momento da abertura do formulário e o seu
conteúdo é o seguinte:
Me.TotalChave = DCount("Chave", "Chave")
Me.TotalCativa = DCount("Chave", "Chave", "Cativa=True")
Me.TotalInibida = DCount("Chave", "Chave", "Inibida=True")
Me.TotalEntregue = DCount("Chave", "Chave", "Entregue=True")
O programa recorre à função ‘DCount’ que conta o número de vezes que o atributo
‘Chave ’ existe na tabela ‘Chave’ mas apenas quando a condição expressa no terceiro
argumento seja verdadeira (por exemplo, ‘Cativa=True’). Este tipo de funções por vezes
serve como alternativa à utilização da linguagem SQL. O resultado da aplicação das
funções é apresentado no formulário.
(c) Pedro Ramos, 2004
100
Aplicações em MSAccess, Questionários Online
Private Sub bt_gerar_chaves_Click()
Dim i As Integer
Dim db As Database
Dim Sql As String
Dim ColecaoRegisto As DAO.Recordset
Dim vChave As String
Dim TotalChaves As Integer
Beep
If MsgBox("Atenção, eventuais chaves existentes serão eliminadas,
confirma a geração de novas chaves?", vbYesNo + vbDefaultButton2 +
vbQuestion, "Geração de Novas Chaves") = vbYes Then
DoCmd.RunSQL ("Delete * from Chave")
Set db = CurrentDb
Sql = "Select Count(*) As Total From ListaEmail"
Set ColecaoRegisto = db.OpenRecordset(Sql, dbOpenSnapshot)
If Not ColecaoRegisto.EOF And Not IsNull(ColecaoRegisto!Total)
Then
TotalChaves = ColecaoRegisto!Total
Else
TotalChaves = 0
End If
ColecaoRegisto.Close
db.Close
For i = 1 To TotalChaves
vChave = gera_chave()
If vChave <> "null" Then
DoCmd.RunSQL ("Insert into chave (chave, cativa,
entregue, inibida) values ('" + gera_chave() + "'
,false,false,false)")
End If
Next
Me.RecordSource = "Select * From Chave Order by Chave;"
Call Form_Open(0) 'chama o procedimento Form_Open
End If
End Sub
Figura 139 – Procedimento para criar chaves
(c) Pedro Ramos, 2004
101
Aplicações em MSAccess, Questionários Online
Private Function gera_chave()
Dim i As Integer
Dim vChave As String
Dim db As Database
Dim ColecaoRegisto As DAO.Recordset
vChave = "X" 'todas as chaves começam com a letra X
Set db = CurrentDb()
For i = 1 To 10
vChave = vChave + Chr(Int((120 - 97 + 1) * Rnd + 97))
vChave = Right(vChave, 15)
Sql = "Select * From Chave where chave = '" + vChave + "'"
Set ColecaoRegisto = db.OpenRecordset(Sql, dbOpenSnapshot)
If ColecaoRegisto.EOF Then 'se ainda não existe a chave
gera_chave = Right(vChave, 20)
Else
gera_chave = "null"
End If
ColecaoRegisto.Close
Next
db.Close
End Function
Figura 140 – Procedimento para gerar chaves
O programa associado ao botão ‘Enviar Emails’ é o apresentado na Figura 141. O
programa associado ao botão ‘Inibir ’ é o que consta na Figura 142. Dado que o
formulário é apenas de leitura (‘Snapshot’), para poder alterar o valor do atributo
‘Inibida’ é necessário mudar a propriedade ‘RecordsetType’ para ‘escrita’ (valor 1) e,
depois de alterado o valor, voltar a repor o valor ‘leitura’ (valor 2) (caso contrário não
poderiam ser possíveis as alterações aos registos da tabela ‘Chave’ efectuadas nos
programas anteriores). Quando é mudada a propriedade ‘RecordsetType ’
automaticamente é efectuado o re-display do formulário. Para evitar que se “perca” a
localização do registo onde o utilizador pretende alterar o valor do atributo inibida, é
necessário utilizar a variável ‘Chave’ e o comando ‘Find Record’ para “encontrar” o
registo cuja chave corresponde à chave seleccionada antes do re-display. O comando
‘GoToControl’ (indica qual o campo activo) é necessário porque o comando
‘FindRecord’ procura no campo activo (é necessário colocar o campo chave ‘Enabled’
para poder utilizar o comando ‘GoToControl’). No final, é actualizado o total de chaves
inibidas.
(c) Pedro Ramos, 2004
102
Aplicações em MSAccess, Questionários Online
Private Sub bt_Email_Click()
Dim db As Database
Dim Mensagem As String
Dim ColecaoRegisto_1 As DAO.Recordset
Dim ColecaoRegisto_2 As DAO.Recordset
Set db = CurrentDb()
Set ColecaoRegisto_1 = db.OpenRecordset("Select Email, Contactado
From ListaEmail where contactado <> true", dbOpenDynaset)
Set ColecaoRegisto_2 = db.OpenRecordset("Select Chave, Cativa,
DataCativa From Chave where cativa <> true and Inibida <> true",
dbOpenDynaset)
Mensagem
=
"Por
favor
diriga-se
ao
Site
http://localhost/Questionario/Questionario.Htm
para
preencher
o
Inquérito. A Palavra Chave que lhe foi aleatoriamente atribuída é: "
Do While Not ColecaoRegisto_1.EOF
DoCmd.SendObject
,
,
,
ColecaoRegisto_1!Email,
,
,
"Questionário Online", Mensagem + ColecaoRegisto_2!Chave, False
ColecaoRegisto_1.Edit
ColecaoRegisto_2.Edit
ColecaoRegisto_1!Contactado = True
ColecaoRegisto_2!Cativa = True
ColecaoRegisto_2!DataCativa = Date
ColecaoRegisto_1.Update
ColecaoRegisto_2.Update
If Not ColecaoRegisto_2.EOF Then
ColecaoRegisto_2.MoveNext
End If
ColecaoRegisto_1.MoveNext
Loop
ColecaoRegisto_2.Close
ColecaoRegisto_1.Close
db.Close
End Sub
Figura 141 – Procedimento para enviar emails
Private Sub bt_inibir_Click()
Dim Chave As String
Registo = Me.CurrentRecord
Chave = Me.Chave
Me.RecordsetType = 1
Me.Chave.Enabled = True
DoCmd.GoToControl "Chave"
DoCmd.FindRecord Chave, acEntire, True, acDown, , acCurrent, True
If Me.Inibida = True Then Me.Inibida = False
Else: Me.Inibida = True
End If
Me.RecordsetType = 2
DoCmd.GoToControl "Chave"
DoCmd.FindRecord Chave, acEntire, True, acDown, , acCurrent, True
DoCmd.GoToControl "bt_inibir"
Me.Chave.Enabled = False
Me.TotalInibida = DCount("Chave", "Chave", "Inibida=True")
End Sub
Figura 142 – Procedimento para inibir chaves
(c) Pedro Ramos, 2004
103
Aplicações em MSAccess, Questionários Online
3.4 Formulário Preencher Questionário
Na Figura 143 é apresentado o formulário para preenchimento do questionário offline,
i.e., directamente através do Access. Qualquer que seja o botão que o utilizador opte, o
Access valida a chave, ou seja, apenas são aceites as chaves que não estejam inibidas. O
botão ‘Cria Questionário’ deverá ser seleccionado apenas na primeira vez que o utilizador
(chave) acede ao sistema. Caso contrário o sistema suspende a execução do procedimento
e avisa-o que já se encontra gerado um questionário. Caso o questionário ainda não
exista, são executadas três acções:
1. criar um questionário vazio onde apenas fica preenchido o número de questionário
(gerado automaticamente: adiciona-se uma unidade ao número de questionário
máximo);
2. alterar a tabela ‘Chave’ para armazenar o valor do atributos ‘Data Entregue’ e
‘Entregue’;
3. abrir o formulário ‘Questionário’ no registo criado no ponto 1).
Figura 143 – Formulário ‘Preencher Questionário’
O programa em VB encontra-se Figura 144 e na Figura 145. É neste programa que é
utilizada a tabela ‘Dummy’. A complexidade do comando SQL deve-se à necessidade de
evitar que, numa situação em que dois utilizadores estão em simultâneo a aceder à base
de dados, sejam criados dois questionários com o mesmo número.
(c) Pedro Ramos, 2004
104
Aplicações em MSAccess, Questionários Online
Private Sub bt_criar_questionario_Click()
Dim Sql As String
Dim vChave As String
Dim db As Database
Dim ColecaoRegisto As DAO.Recordset
If validaLogin(Forms!PreencherQuestionario!Chave) Then
vChave = Forms! PreencherQuestionario!Chave
Sql = "Select * From Questionario where Chave = '" + vChave + "'"
Set db = CurrentDb()
Set ColecaoRegisto = db.OpenRecordset(Sql, dbOpenSnapshot)
If Not ColecaoRegisto.EOF Then
ColecaoRegisto.Close
db.Close
Beep
MsgBox "Já existe um inquérito associado à chave que
indicou", vbInformation + vbDefaultButton1 + vbOKOnly, "Criação de novo
Questionário"
Else
ColecaoRegisto.Close
db.Close
Sql = "Insert Into Questionario (Chave, NumQuestionario,
Edicao ) "
Sql = Sql + "
Select '" + vChave + "' , Max(NovoNumero)
+ 1, " & Me.Edicao & " from "
Sql = Sql + "
("
Sql = Sql + "
Select Max(NumQuestionario)as NovoNumero
From Questionario"
Sql = Sql + "
Union"
Sql = Sql + "
Select 0 as NovoNumero from dummy"
Sql = Sql + "
)"
DoCmd.RunSQL (Sql)
Sql = "Update Chave Set Entregue = true, DataEntregue = #"
& Date & "# Where chave = '" + vChave + "'"
DoCmd.RunSQL (Sql)
DoCmd.OpenForm "Questionario", acNormal, , "Chave =
'" +
vChave + "'"
End If
Else
Beep
MsgBox
"Chave Inválida", vbCritical + vbDefaultButton1 +
vbOKOnly, "Validação de Chave"
End If
End Sub
Figura 144 - Programa associado ao botão para criar questionário
(c) Pedro Ramos, 2004
105
Aplicações em MSAccess, Questionários Online
Private Function validaLogin(vChave)
Dim db As Database
Dim ColecaoRegisto As DAO.Recordset
Dim Sql As String
validaLogin = False
If Not IsNull(vChave) Then
Set db = CurrentDb()
Sql = "Select * From Chave Where Chave = '" + vChave + "' And
Inibida = false"
Set ColecaoRegisto = db.OpenRecordset(Sql, dbOpenSnapshot)
If Not ColecaoRegisto.EOF Then
validaLogin = True
End If
ColecaoRegisto.Close
db.Close
End If
End Function
Figura 145 - Programa para validar a chave
O programa da Figura 146 é executado pelo botão ‘Editar Questionário’ e apenas abre o
formulário ‘Questionário’ associado à chave introduzida pelo o utilizador.
Private Sub bt_editar_questionario_Click()
Dim Sql As String
Dim vChave As String
Dim db As Database
Dim ColecaoRegisto As DAO.Recordset
If validaLogin(Forms! PreencherQuestionario!Chave) Then
vChave = Forms! PreencherQuestionario!Chave
Sql = "Select * From Questionario where Chave = '" + vChave + "'"
Set db = CurrentDb()
Set ColecaoRegisto = db.OpenRecordset(Sql, dbOpenSnapshot)
If ColecaoRegisto.EOF Then
ColecaoRegisto.Close
db.Close
Beep
MsgBox "Ainda não existe um inquérito associado à chave que
indicou", vbInformation + vbDefaultButton1 + vbOKOnly, "Edição de
Questionário"
Else
ColecaoRegisto.Close
db.Close
DoCmd.OpenForm "Questionario", acNormal, , "Chave = '" +
vChave + "'"
End If
Else
Beep
MsgBox "Chave Inválida", vbCritical + vbDefaultButton1 +
vbOKOnly, "Validação de Chave"
End If
End Sub
Figura 146 - Programa associado ao botão para editar questionário
(c) Pedro Ramos, 2004
106
Aplicações em MSAccess, Questionários Online
3.5 Formulário Questionário
A introdução de chaves e a sua respectiva validação efectuada no formulário apresentado
na secção anterior, leva a que, no formulário ‘Questionário’ (Figura 147) se possa colocar
o atributo Chave.
Figura 147 – Formulário Questionário
O botão ‘Prepara Perguntas’ torna-se desnecessário caso optemos por associar um
programa em VB ao botão ‘Editar Questionário Disciplina’. Através desse programa o
VB detecta que é a primeira vez que o utilizador vai preencher o questionário para a
disciplina e automaticamente faz as actualizações que anteriormente eram efectuadas
pelas querys ‘PreparaQuestionarioDisciplina’ e ‘PreparaQuestionarioDocente’ (chamadas
pela macro ‘Prepara_Disciplina_Docente’). Ou seja, devido ao programa da Figura 148,
foram removidas as duas querys referidas anteriormente, as macros
‘Prepara_Disciplina_Docente ’ e ‘Questionario_RDisciplina’ e o botão ‘Prepara
Perguntas’.
(c) Pedro Ramos, 2004
107
Aplicações em MSAccess, Questionários Online
Private Sub bt_editar_questionario_Click()
Dim db As Database
Dim ColecaoRegisto As DAO.Recordset
Dim Sql As String
Dim vQuestionario As Integer
Dim vDisciplina As String
If Not IsNull(Me.ListBoxDisciplina) Then
Set db = CurrentDb()
vQuestionario = Me.NumQuestionario
vDisciplina = Me.ListBoxDisciplina
Sql = "Select * From rDisciplina Where NumQuestionario = " &
vQuestionario & " and SiglaDisciplina = '" + vDisciplina + "'"
Set ColecaoRegisto = db.OpenRecordset(Sql, dbOpenSnapshot)
If ColecaoRegisto.EOF Then
If MsgBox("Ainda não avaliou a disciplina, pretende avaliála agora?", vbDefaultButton1 + vbQuestion + vbYesNo, "Avaliação de
Disciplinas") = vbYes Then
Sql
=
"Insert
into
rDisciplina
(NumQuestionario,
SiglaDisciplina) values (" & Me.NumQuestionario & ", '" + vDisciplina +
"')"
DoCmd.RunSQL (Sql)
Sql
=
"Insert
into
rDocente
(NumQuestionario,
SiglaDisciplina, IDDocente) Select "
Sql = Sql & Me.NumQuestionario & ", '" + vDisciplina +
"', IDDocente
From Leciona Where Edicao = " & Me.Edicao & " And
SiglaDisciplina = '" + vDisciplina + "'"
DoCmd.RunSQL (Sql)
DoCmd.OpenForm
"QDisciplina",
acNormal,
,
"NumQuestionario =
" & vQuestionario & " and SiglaDisciplina = '" +
vDisciplina + "'"
End If
Else
DoCmd.OpenForm "QDisciplina", acNormal, , "NumQuestionario
= " & vQuestionario & " and SiglaDisciplina = '" + vDisciplina + "'"
End If
ColecaoRegisto.Close
db.Close
End If
End Sub
Figura 148 - Programa associado ao botão para editar questionário de uma disciplina
O programa da Figura 148 começa por procurar na tabela ‘RDisciplina’ se já existem
respostas para avaliar a disciplina seleccionada, caso não tenha encontrado pergunta ao
utilizador se pretende avaliar a disciplina. Caso o utilizador confirme insere um registo
na tabela ‘RDisciplina’ e outro na tabela ‘RDocente’ (registos em branco para o utilizador
preencher com as suas respostas). Por fim abre o formulário ‘QDisciplina’ para que o
utilizador possa colocar as suas respostas.
3.6 Página Web Preencher Questionário
Na Figura 123 é apresentada a página web para preenchimento de ques tionários. Ela é
semelhante ao formulário da Figura 143. Na Figura 149, na Figura 150 e na Figura 151
apresentam-se os programas VBScript associados aos botões da página.
(c) Pedro Ramos, 2004
108
Aplicações em MSAccess, Questionários Online
<SCRIPT language=vbscript event=onclick for=bt_criarquestionario>
<!-Dim rsd
Dim rs
Dim sql
Dim v_NumQuestionario
set rsd = MSODSC.RecordsetDefs.AddNew("Select Chave From Chave
where Chave = '" + palavrachave.value + "' And Inibida = false ",
R_validachave)
Set rs = MSODSC.Execute(rsd)
if rs.EOF then
rs.close
MsgBox "Chave Inválida", vbCritical + vbDefaultButton1 +
vbOKOnly, "Validação de Chave"
else
set
rsd
=
MSODSC.RecordsetDefs.AddNew("Select
NumQuestionario From Questionario where Chave = '" + palavrachave.value
+ "'", R_validachave)
Set rs = MSODSC.Execute(rsd)
if not rs.EOF then
MsgBox "Já existe um inquérito associado à chave que
indicou", vbInformation + vbDefaultButton1 + vbOKOnly, "Criação de novo
Questionário"
else
Sql
=
"Insert
Into
Questionario
(Chave,
NumQuestionario, Edicao ) "
Sql = Sql + "
Select '" + palavrachave.value + "'
,
Max(NovoNumero) + 1, " & Label_Edicao.InnerText & " from "
Sql = Sql + "
("
Sql = Sql + "
Select Max(NumQuestionario)as NovoNumero
From Questionario"
Sql = Sql + "
Union"
Sql = Sql + "
Select 0 as NovoNumero from dummy"
Sql = Sql + "
)"
MSODSC.Connection.Execute(Sql)
sql = "Update Chave Set Entregue = true, DataEntregue
= #" & date & "# Where chave = '" + palavrachave.value + "'"
MSODSC.Connection.Execute(Sql)
ActualizaQuestionario()
set
rsd
=
MSODSC.RecordsetDefs.AddNew("Select
NumQuestionario From Questionario where Chave = '" + palavrachave.value
+ "'", R_validachave)
Set rs = MSODSC.Execute(rsd)
if not rs.EOF then
v_NumQuestionario = rs("NumQuestionario")
document.location.href
=
"Questionario.htm?ServerFilter=%22NumQuestionario=" & v_NumQuestionario
& "%22"
end if
end if
rs.close
end if
Figura 149 – Programa VBScript associado a botão para criar questionário
(c) Pedro Ramos, 2004
109
Aplicações em MSAccess, Questionários Online
<SCRIPT language=vbscript event=onclick for=bt_editarquestionario>
<!-Dim rsd
Dim rs
Dim v_NumQuestionario
set rsd = MSODSC.RecordsetDefs.AddNew("Select Chave From Chave
where Chave = '" + palavrachave.value + "' And Inibida = false ",
R_validachave)
Set rs = MSODSC.Execute(rsd)
if rs.EOF then
rs.close
MsgBox "Chave Inválida", vbCritical + vbDefaultButton1 +
vbOKOnly, "Validação de Chave"
else
set
rsd
=
MSODSC.RecordsetDefs.AddNew("Select
NumQuestionario From Questionario where Chave = '" + palavrachave.value
+ "'", R_validachave)
Set rs = MSODSC.Execute(rsd)
if rs.EOF then
MsgBox "Ainda não existe um inquérito associado à
chave que indicou", vbInformation + vbDefaultButton1 + vbOKOnly,
"Edição de Questionário"
else
v_NumQuestionario = rs("NumQuestionario")
ActualizaQuestionario()
document.location.href
=
"Questionario.htm?ServerFilter=%22NumQuestionario=" & v_NumQuestionario
& "%22"
end if
rs.close
end if
-->
</SCRIPT>
Figura 150– Programa VBScript associado a botão para editar questionário
O programa ‘ActualizaQuestionario’ é chamado pelos restantes dois programas e tem por
objectivo inserir um registo na tabela ‘RDisciplina’ e outro na tabela ‘RDocente’
(registos em branco para o utilizador preencher com as suas respostas). Os programas são
muito semelhantes aos equivalentes em VB.
Nos dois programas consta a seguinte expressão:
document.location.href =
"Questionario.htm?ServerFilter=%22NumQuestionario=" &
v_NumQuestionario & "%22"
O seu objectivo é abrir a página ‘Questionário.htm’ e passar como parâmetro a expressão:
’”NumQuestionario=v_numQuestionário”’.
(c) Pedro Ramos, 2004
110
Aplicações em MSAccess, Questionários Online
<SCRIPT language=vbscript>
<!-Function ActualizaQuestionario()
Dim rsd
Dim rs
Dim sql
Dim v_NumQuestionario
set
rsd
=
MSODSC.RecordsetDefs.AddNew("Select
NumQuestionario From Questionario where Chave = '" + palavrachave.value
+ "'", R_numquestionario)
Set rs = MSODSC.Execute(rsd)
if not rs.EOF then
v_NumQuestionario = rs("NumQuestionario")
Sql
=
"Insert
into
RDisciplina(SiglaDisciplina,
NumQuestionario) "
sql = sql + " SELECT Disciplina.SiglaDisciplina, " &
v_NumQuestionario
sql
=
sql
+
"
FROM
Disciplina
WHERE
Disciplina.Questionario=True and not exists "
sql = sql + " (Select * From RDisciplina Where
Rdisciplina.SiglaDisciplina
=
Disciplina.SiglaDisciplina
and
RDisciplina.NumQuestionario = " & v_NumQuestionario & ")"
MSODSC.Connection.Execute(Sql)
Sql
=
"Insert
into
RDocente(SiglaDisciplina,
IDDocente, NumQuestionario) "
sql
=
sql
+
"
SELECT
Leciona.SiglaDisciplina,
Leciona.IDDocente, " & v_NumQuestionario
sql = sql + " FROM Docente, Leciona, Disciplina WHERE
Disciplina.SiglaDisciplina
=
Leciona.SiglaDisciplina
And
Leciona.IDDocente
=
Docente.IDDocente
and
Leciona.Edicao
=
"&
Label_Edicao.InnerText & " and Disciplina.Questionario=True and not
exists "
sql = sql + " (Select * From RDocente Where
RDocente.SiglaDisciplina
=
Disciplina.SiglaDisciplina
and
RDocente.IDDocente = Leciona.IDDocente And RDocente.NumQuestionario = "
& v_NumQuestionario & ")"
MSODSC.Connection.Execute(Sql)
end if
rs.close
End Function
-->
</SCRIPT>
Figura 151 - Programa VBScript de suporte aos restantes
3.7 Formulário Menu Estatístico
Através do formulário da Figura 152, nomeadamente através das instruções em VB
associadas aos botões (Figura 153), o utilizador, antes de aceder aos formulários
estatísticos anteriormente apresentados (Figura 127, Figura 128, Figura 129 e Figura
130), deverá primeiramente, através do botão ‘Processamento de Questionários’,
proceder a todos os cálculos necessários à geração dos formulários estatísticos. Apenas
após a activação deste botão é que deverão ser abertos os quatro formulários estatísticos.
Através do formulário (botão ‘Visualização de Inquérito de Disciplina’) pode-se também
(c) Pedro Ramos, 2004
111
Aplicações em MSAccess, Questionários Online
aceder ao formulário que sintetiza a avaliação de uma disciplina (Figura 92). Este
formulário deverá substituir o formulário ‘Questionário’ no atributo ‘Display Form/Page’
do da opção ‘Startup’ no menu principal do Access (ver Figura 78).
Figura 152 – Formulário de Acesso a estatísticas
(c) Pedro Ramos, 2004
112
Aplicações em MSAccess, Questionários Online
Figura 153 – Procedimentos VB associados a botões da Figura 152
O procedimento associado ao botão para processamento de questionários executa quatro
programas VB e, por fim, envia para o ecrã uma mensagem a informar que a operação foi
concluída. Os quatro programas, assim como outros auxiliares, estão armazenados num
módulo designado ‘Estatísticas’. (Figura 154). Os módulos são conjuntos de
procedimentos VB que não estão associados a nenhum formulário.
(c) Pedro Ramos, 2004
113
Aplicações em MSAccess, Questionários Online
Figura 154 – Módulo ‘Estatísticas’
Nas próximas figuras apresenta-se o conteúdo mo módulo ‘Estatísticas’. Alguns dos
procedimentos, dada a sua complexidade, exigem uma leitura mais cuidada. No entanto,
no essencial, eles não diferem muito dos anteriormente apresentados.
Os procedimentos calculo_Media_6 e calculo_Media_12 (Figura 159 e Figura 160) são
invocados pelos formulários (ver Figura 161).
(c) Pedro Ramos, 2004
114
Aplicações em MSAccess, Questionários Online
Figura 155 – Procedimento para cálculo de evolução da avaliação de uma disciplina
(c) Pedro Ramos, 2004
115
Aplicações em MSAccess, Questionários Online
Figura 156 - Procedimento para cálculo de evolução da avaliação de um docente
(c) Pedro Ramos, 2004
116
Aplicações em MSAccess, Questionários Online
Figura 157 - Procedimento para cálculo da comparação da avaliação entre várias disciplinas
(c) Pedro Ramos, 2004
117
Aplicações em MSAccess, Questionários Online
Figura 158- Procedimento para cálculo da comparação da avaliação entre vários docentes
Note-se que no caso do procedimento da Figura 158 o valor da avaliação de um docente
corresponde à média que obteve na totalidade das disciplinas onde ele lecciona.
(c) Pedro Ramos, 2004
118
Aplicações em MSAccess, Questionários Online
Figura 159 – Procedimento para cálculo da média de seis valores
(c) Pedro Ramos, 2004
119
Aplicações em MSAccess, Questionários Online
Figura 160– Procedimento para cálculo da média de doze valores
(c) Pedro Ramos, 2004
120
Aplicações em MSAccess, Questionários Online
3.8 Formulário Est_EvolDisciplina
Na Figura 161 pode-se observar o ‘Record Source’ do formulário ‘Est_EvolDisciplina’:
SELECT * FROM Est_EvolDisciplina WHERE SiglaDisciplina in (SELECT TOP 1
SiglaDisciplina From Disciplina);
A razão para que o comando não seja apenas SELECT * FROM Est_EvolDisciplina
deve-se ao facto de querermos que , quando o utilizador abra o formulário, neste seja logo
mostrada a informação relativa a uma disciplina. De forma a garantir que é seleccionada
uma disciplina para a qual existem avaliações, optou-se por seleccionar a primeira
disciplina que o comando Select encontra na tabela (SELECT TOP 1 SiglaDisciplina
From Disciplina).
Figura 161 – ‘Record Source’ do formulário ‘Est_EvolDisciplina’
Ainda relativamente ao formulário ‘Est_EvolDisciplina’, a propriedade ‘Control Source’
dos atributos da linha inferior (médias) é ‘=Avg([MED1]’, ‘=Avg([ME21]’, ...,
‘=Avg([M ED6]’. Avg é uma função que calcula o valor médio do campo indicado.
Relativamente ao campo ‘Média’ (coluna à direita do formulário) a propriedade ‘Control
Source’ assume o valor ‘= calculo_Media_6 ([Med1]; [Med2]; [Med3]; [Med4]; [Med5];
[Med6])’. A função ‘calculo_media_6 ’ consta na Figura 159.
Ao formulário ‘Est_EvolDisciplina’ estão associados dois eventos:
(i)
evento activado no momento da abertura do formulário e que tem por
objectivo copiar o valor do atributo ‘SiglaDisciplina’ (que, no
momento da abertura do formulário fica com o valor da primeira
disciplina encontrada) para o atributo ‘SelDisciplina’. É neste último
(c) Pedro Ramos, 2004
121
Aplicações em MSAccess, Questionários Online
atributo, que corresponde à ‘Combo Box’ da Figura 162, que fica
armazenada a escolha do utilizador. A razão porque o atributo
‘SelDisciplina’ não assenta directamente sobre a base de dados (ou
seja, o seu ‘Control Source,’ assumir o valor ‘Unbound’) deve-se ao
facto de ser necessário permitir que o utilizador altere o valor do
atributo (sem obviamente alterar os valores na base de dados).
Private Sub Form_Open(Cancel As Integer)
Me.SelDisciplina = Me.SiglaDisciplina
End Sub
(ii)
Evento que é activado quando o utilizador altera o valor do atributo
‘SelDisciplina’ e que tem por objectivo ir à base de dados buscar os
valores da nova disciplina seleccionada (ou seja, mudar a propriedade
‘Record Source’ do formulário).
Private Sub SelDisciplina_AfterUpdate()
Me.RecordSource
=
"Select
*
From
Est_EvolDisciplina Where SIglaDisciplina = '" &
Me.SelDisciplina & "'"
End Sub
Figura 162 – ‘Combo Box’ para selecção de disciplina (formulário ‘Est_EvolDisciplina’)
As jus tificações para as opções relativas aos restantes três formulários são sensivelmente
as mesmas.
3.9 Formulário Est_EvolDocente
A propriedade ‘Record Source’ do formulário ‘Est_EvolDocente’ (Figura 163) é:
SELECT * FROM Est_EvolDocente WHERE IDDocente =
From Est_EvolDocente);
(c) Pedro Ramos, 2004
(SELECT Max(IDDocente)
122
Aplicações em MSAccess, Questionários Online
A propriedade ‘Row Source’ da ‘Combo Box’ associada ao atributo ‘SelDisciplina’ é
(Figura 165):
SELECT DISTINCT Disciplina.* FROM Disciplina, leciona
WHERE leciona.sigladisciplina=disciplina.sigladisciplina And
leciona.iddocente=Forms!Est_EvolDocente!SelDocente;
Este último comando devolve as disciplinas associadas ao docente seleccionado no
campo ‘SelDocente’ (cuja ‘Row Source’ é a tabela ‘Docente’, Figura 164).
Figura 163 - ‘Record Source’ do formulário ‘Est_EvolDocente’
Na Figura 166 são mostrados os procedimentos VB associados ao formulário
‘Est_EvolDocente’. O conjunto de instruções associadas ao evento ‘After Update’ do
atributo ‘SelDocente’ tem por função forçar o recalculo dos valores da ‘Combo Box’ e a
selecção do primeiro valor da lista (‘SendKeys "{down}{Enter}"’ tem o mesmo efeito de
digitar as teclas ‘Page Down’ e a seta para baixo).
(c) Pedro Ramos, 2004
123
Aplicações em MSAccess, Questionários Online
Figura 164 - ‘Combo Box’ para selecção de disciplina (formulário ‘Est_ EvolDocente’)
Figura 165 - ‘Combo Box’ para selecção de disciplina (formulário ‘Est_ EvolDocente’)
(c) Pedro Ramos, 2004
124
Aplicações em MSAccess, Questionários Online
Figura 166 – Eventos associados ao formulário ‘Est_ EvolDocente’
3.10 Formulário Est_ComparaDisciplina
A propriedade ‘Record Source’ do formulário ‘Est_ComparaDisciplina’ (Figura 167) é:
SELECT * FROM Est_ComparaDisciplina WHERE
Edicao=(Select Max(Edicao) From Est_ComparaDisciplina);
O comando SQL selecciona as estatísticas da última edição inserida (máxima).
Figura 167 - ‘Record Source’ do formulário ‘Est_ComparaDisciplina’
(c) Pedro Ramos, 2004
125
Aplicações em MSAccess, Questionários Online
Figura 168 – ‘Combo Box’ para selecção de edição (formulário ‘Est_ComparaDisciplina’)
Figura 169 – Eventos associados ao formulário ‘Est_ ComparaDisciplina’
3.11 Formulário Est_ ComparaDocente
A propriedade ‘Record Source’ do formulário ‘Est_ComparaDocente’ (Figura 170) é:
SELECT * FROM Est_ComparaDocente WHERE Edicao=(Select Max(Edicao) From
Est_ComparaDocente);
O comando SQL selecciona as estatísticas da última edição inserida (máxima).
(c) Pedro Ramos, 2004
126
Aplicações em MSAccess, Questionários Online
Figura 170 - ‘Record Source’ do formulário ‘Est_ComparaDocente’
Figura 171 – ‘Combo Box’ para selecção de edição (formulário ‘Est_ComparaDocente’)
(c) Pedro Ramos, 2004
127
Aplicações em MSAccess, Questionários Online
Figura 172 – Eventos associados ao formulário ‘Est_ ComparaDocente’
O procedimento que é executado no momento em que o formulário é aberto, para além de
atribuir um valor ao atributo ‘SelEdicao’, também vai buscar à base de dados (tabela
‘Docente’) os números e nomes dos docentes para os colocar no atributo
‘LegendaDocentes’ do formulário.
3.12 Pivot Table
As ‘Pivot Table’ são formulários avançados de fácil utilização que permitem consultas
cruzadas de informação. No exemplo (Figura 178) apresenta-se um formulário que
permite visualizar a média das avaliações (apenas a questão relativa à apreciação global)
das disciplina por sexo e licenciatura. Através da manipulação das colunas é possível
suprimir (ou adicionar) licenciaturas ou visualizar todas as respostas dos questionários. A
‘Pivot Table’ assenta numa query (Figura 173) que retorna a questão 6 de todos os
questionários.
Nas Figura 174, Figura 175, Figura 176 e Figura 177 apresentam-se os passos nenessários
à criação da ‘Pivot Table’, nomeadamente, a indicação da query de suporte, a disposição
das colunas (a disciplina funcionando como linha, a licenciatura como coluna, e o sexo
como filtro genérico e o atributo apreciação na zona central), a criação de um campo
agregado para calculo da média da avaliação e a alteração da sua caption.
Note-se que a disposição das colunas pode ser mudada em qualquer altura da visualização
do formulário, aliás é essa possibilidade que justifica a utilizaç ão de ‘Pivot Table’. Por
exemplo, para comparar as respostas por sexo, dever-se-à arrastar o atributo sexo para o
lado da licenciatura.
(c) Pedro Ramos, 2004
128
Aplicações em MSAccess, Questionários Online
Figura 173 – Query de suporte à ‘Pivot Table’
Figura 174 – Criação da ‘Pivot Table’, indicação da query de suporte
(c) Pedro Ramos, 2004
129
Aplicações em MSAccess, Questionários Online
Figura 175 - Criação da ‘Pivot Table’, indicação das colunas
Figura 176 - Criação da ‘Pivot Table’, adicionar valores calculados
(c) Pedro Ramos, 2004
130
Aplicações em MSAccess, Questionários Online
Figura 177 - Criação da ‘Pivot Table’, alteração de caption de campo calculado
Figura 178 – Visualização da informação na ‘Pivot Table’
(c) Pedro Ramos, 2004
131
Download