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