quinta-feira, 23 de fevereiro de 2012

Modelo de Entidades e Relacionamentos - MER

O Access é um sistema de gestão de dados relacional, e possui um modelo de entidades e relacionamentos, entre as diversas tabelas (MER), com apresentação em diagrama (DER).

As tabelas contêm o armazenamento de dados de uma base de dados. É nelas que é guardada toda a informação que depois pode ser consultada.

A informação contida em cada tabela é organizada em linhas e colunas, mais conhecidas por registos e campos.

O número de registos em cada tabela é ilimitado até a bd atingir a máximo de 2Gb.

Os 2Gb dariam perfeitamente para guardar o nome, BI, NIF e endereço de todos os portugueses. Mesmo assim o limite é facilmente ultrapassável, porque é sempre possível ligar tabelas de outros ficheiros.

Cada campo de uma tabela pode conter um determinado tipo de dados, sendo os mais usados numérico, data e hora e texto.

Pode ver aqui a lista completa de tipos de dados do Acess 2007:


Para exemplificar o uso de diversas tabelas ligadas entre si de acordo com o MER vou indicar como criar uma pequena base de dados com baseada na lista de freguesias disponível no portal das finanças.

Criar uma base de dados vazia;
      Abrir o Access e criar uma base de dados vazia.

      Criar as tabelas para freguesias, concelhos e distritos;

Tabela Distritos com os campos
                  coddistrito texto tamanho 2,
                  distrito texto tamanho 200,
                  chave primária em coddistrito.

      Tabela Concelhos
                        codconcelho texto tamanho 4,
                        coddistrito texto tamanho 2,
                        concelho texto tamanho 200,
                        chave primária em codconcelho;

Tabela Freguesias
                 codfreguesia texto tamanho 6,
                 codconcelho texto tamanho 4,
                 freguesia texto tamanho 200,
                 chave primária em codfreguesia.

Criar as relações entre as tabelas;

Ir a Ferramentas da Base de Dados e clicar em Relações;

Se aparecer alguma relação entre tabelas com nomes estranhos, clica com o botão direito em cima da tabela e escolha ocultar tabela;

Na barra de ferramentas clicar em mostrar tabelas e mostrar as 3 tabelas criadas antes;

Arrastar o campo coddistrito da tabela Distritos para o campo coddistrito da tabela Concelhos e na janela que vai aparecer confirmar os nomes dos campos e tabelas, e marcar a opção impor integridade referencial, assim como propagar a actualização. Fazer o mesmo para o campo codconcelho das tabelas Concelhos e Freguesias.

As linhas entre os campos das tabelas possuem do lado da chave primária o número 1 e do outro lado o símbolo infinito. Esse é o tipo de ligação um-para-muitos.

As relações devem ficar tal qual a imagem:

      Descarregar o ficheiro de Excel com as freguesias aqui.



 Ligar a folha do Excel ao Access;

 Abrir o ficheiro e eliminar as duas linhas iniciais deixando os nomes dos campos como cabeçalho, guardar e fechar.

Utilizar a ferramenta de importar folha de calculo do excel, em dados externos, escolhendo o ficheiro e a opção de ligação à origem. Indicar que os cabeçalhos serão os nomes dos campos, sem chave primária e no final o nome xlsFreguesias.

Desta forma os dados continuam no excel, mas podem ser consultados no Access. As tabelas ligadas a folhas do excel não permitem alterar os dados, mas ligadas a tabelas de outras bases de dados já permite.



Criar consultas para os nomes e códigos das freguesias, concelhos e dos distritos;

Barra de ferramentas Criar, Consulta, modo SQL

consultaDistritos:
SELECT coddistrito, min(distrito) FROM xlsFreguesias GROUP BY coddistrito;

consultaConcelhos:
SELECT coddistrito & codconcelho AS codigo,  coddistrito, Min(concelho) AS NomeConcelho FROM xlsFreguesias GROUP BY coddistrito, codconcelho;

consultaFreg:
SELECT coddistrito & codconcelho & codfreguesia AS codigo, coddistrito & codconcelho as codconc, Min(freguesia) AS Nomefreguesia FROM xlsFreguesias GROUP BY coddistrito,codconcelho,codfreguesia;



Copiar os dados das consultas para as tabelas.

Começar pela tabela dos distritos. Copiar todas as linhas da consultaDistritos para a tabela Distritos;

Depois os dados da consultaConcelhos para a tabela concelhos;

Por fim da consultaFreg para a tabela Freguesias.


Apagar as consultas e a tabela xlsFreguesias, visto já não serem necessárias.



Se quiserem criar uma consulta para aparecer a informação tal qual na folha de Excel, é só criar uma consulta com a seguinte expressão SQL:

SELECT F.codfreguesia AS Código, D.coddistrito AS CodDist, distrito AS NomeDistrito, RIGHT(F.codconcelho,2) AS CodConc, concelho AS NomeConcelho, RIGHT([codfreguesia],2) AS CodFreg, freguesia AS NomeFreguesia
FROM Concelhos AS C, Distritos AS D, freguesias AS F
WHERE C.coddistrito=D.coddistrito AND F.codconcelho=C.codconcelho;



Ao abrir a tabela Concelhos o campo coddistrito mostra o código de 4 caracteres referente ao registo de distrito, mas é preferível ver o nome do distrito. Para vamos à estrutura da tabela e selecionamos o campo coddistrito, nas propriedades em baixo mudamos para o separador pesquisa e mudamos as propriedades de acordo com a imagem:



O mesmo pode ser feito na tabela freguesias campo codconcelho.



O ficheiro Freguesias.accdb pode ser encontrado aqui:
                 http://www.box.com/s/mfq10csb2t0njs6ybvn0



Da mesma forma criei um ficheiro Codigo Postal.accdb, a partir de ficheiros de texto disponibilizados no site dos CTT




domingo, 19 de fevereiro de 2012

Painel de Navegação

O Access possui o Painel de Navegação no lado esquerdo, onde podemos visualizar todos os objectos da base de dados organizado de muitas formas.


Este painel é configurável, basta clicar com o botão direito no cabeçalho e escolher opções de navegação.


Os objectos da base de dados são separados em 5 categorias:
  • - Tabelas
  • - Consultas
  • - Formulários
  • - Relatórios
  • - Macros
  • - Módulos

As tabelas, consultas e macros são objectos da base de dados.


Os formulários, relatórios e módulos são objectos da aplicação, e no caso o ficheiro ser compilado em executável (mde ou accde), não é possível inserir novos ou editar os existentes.


As tabelas podem ser tabelas locais, do próprio ficheiro, ou externas ligadas a outros ficheiros ou servidores de dados. O icon da tabela ligada mostra uma seta tal qual um atalho.


As consultas podem ser um simples consulta, consultas unidas ou instruções de execução SQL, e mostram um icon diferente consoante o caso.


Os outros tipos de objectos, irei descrever em breve.

sábado, 18 de fevereiro de 2012

Começar

Não vou indicar as utilidades de uma Base de Dados, com certeza que irão encontrar muitas no dia-a-dia. Vou apenas dar dicas em como fazer uma bd funcional e como pô-la pronta para introduzir dados e consultá-los quando for preciso.


Para começar será necessário ter o Access instalado no computador. Os exemplos que vou deixar serão testados no Access 2007 e 2010.
É importante ter conhecimentos de SQL e VBA, sobre os quais irei dar muitas explicações.
SQL - Structured Query Language, é uma linguagem de programação declarativa, usada em bases de dados, tanto para criar os objectos da base de dados como consultar, inserir e editar dados.


VBA – Visual Basic para Aplicações, e uma linguagem de programação utilizada em muitas aplicações, principalmente o MS Office. Com o VBA podemos no Access criar funcionalidades muito úteis para automatizar todo o funcionamento da bd, bem como fazer ligação com outros ficheiros e programas.


O SQL e o VBA podem interagir constantemente. Por exemplo as funções criadas em VBA podem ser utilizadas em SQL, e o VBA pode aceder à db utilizando expressões SQL.


Segurança:
O Access possui definições de segurança para as bases de dados a vários níveis. A partir da versão 2007 foi incluído a opção de indicar localizações fidedignas para os ficheiros. Ao abrir os ficheiros que não estiverem dentro destas localizações será pedido ao utilizador para activar o conteúdo bloqueado.
O bloqueio incidirá sobre o código VBA.
A imagem mostra como introduzir localizações fidedignas:




Deverá criar uma pasta para as Bases de Dados e inclui-la na lista de pastas fidedignas, e dentro dessa pasta criar uma pasta para cada projecto. Um projecto pode conter muitos ficheiros de Access e inclusive ficheiros que façam parte da base de dados, como sejam imagens, PDFs, etc.

Bases de Dados

Com frequência necessitamos de guardar, manter e consultar informações, que com o tempo tendem a se perder, extraviar ou de alguma forma cair no esquecimento. Mas o mais preocupante é a forma de aceder a essa informação de uma forma rápida e precisa.


A resposta está nas Bases de Dados, que sempre foram os sistemas mais adequados para conter informações, quer sejam pessoais ou públicas.


A grande maioria dos sites têm uma base de dados por detrás para gerir toda a informação quer de utilizadores, quer do conteudo disponivel aos utilizadores.


Actualmente exitem muitos sistemas de gestão de bases de dados relacionais, sendo os mais conhecidos o MySQL e o SQL Server.
No entanto o Access da Microsoft  é um sistema que embora com capacidades mais reduzidas, consegue em grande parte dos casos, dar conta do recado, com uma vantagem acrescida; o Access permite criar a estrutura os dados e a aplicação para os gerir, além de poder ligar a base de dados dos outros sistemas.