Skip to content

2. Tutorial do Firebird

Antes de abordarmos os conceitos básicos da linguagem SQL, vamos mostrar ao leitor como instalar o SGBD Firebird, bem como o cliente gráfico IB-Expert.

2.1. Onde encontrar o Firebird?

O site principal do Firebird é [http://firebird.sourceforge.net/]. A página de downloads disponibiliza as seguintes ligações (abril de 2005):

Image

Irá descarregar os seguintes itens:

firebird-win32
o SGBD para Windows
firebird-net-provider
uma biblioteca de classes para aplicações .NET que permite o acesso ao SGBD sem utilizar um controlador ODBC.
firebird-ODBC-driver
o controlador ODBC do Firebird

Instale estes componentes. O SGBD é instalado numa pasta com um conteúdo semelhante ao seguinte:

Os ficheiros binários encontram-se na pasta [bin]:

fbguard.exe
permite iniciar/parar o SGBD
isql.exe
cliente de linha de comandos para a gestão de bases de dados

Note que, por predefinição, o administrador do SGBD é denominado [SYSDBA] e a palavra-passe é [masterkey]. Foram adicionados menus ao [Iniciar]:

Image

A opção [Firebird Guardian] permite iniciar/parar o SGBD. Após o arranque, o ícone do SGBD permanece na barra de tarefas do Windows:

Para criar e gerir bases de dados Firebird utilizando o cliente de linha de comandos [isql.exe], deve ler a documentação incluída com o produto na pasta [doc].

2.2. Documentação do Firebird

A documentação sobre o Firebird e a linguagem SQL pode ser encontrada no site do Firebird (janeiro de 2006):

Image

Estão disponíveis vários manuais em inglês:

Guia de Início Rápido do Firebird 1.5
para começar a utilizar o FB
Códigos de erro do Firebird 1.5
para compreender os códigos de erro devolvidos pelo FB

Estão também disponíveis manuais de formação sobre SQL:

Image

Guia de Definição de Dados
para saber como criar tabelas, quais os tipos de dados disponíveis, ...
Referência de linguagem
o guia de referência para aprender SQL com o Firebird

Uma forma rápida de trabalhar com o Firebird e aprender SQL é utilizar um cliente gráfico. Um desses clientes é o IB-Expert, descrito na secção seguinte.

2.3. Trabalhar com o SGBD Firebird utilizando o IB- Expert

O site principal do IB-Expert é [http://www.ibexpert.com/]. A página de downloads disponibiliza os seguintes links:

Image

Selecione a versão gratuita [Personal Edition]. Após o download e a instalação, terá uma pasta semelhante à seguinte:

Image

O ficheiro executável é [ibexpert.exe]. Normalmente, existe um atalho disponível no menu [Iniciar]:

Image

Uma vez iniciado, o IBExpert apresenta a seguinte janela:

Image

Utilize a opção [ ar base de dados/Criar base de dados] para criar uma base de dados:

Servidor
pode ser [local] ou [remoto]. Aqui, o nosso servidor está na mesma máquina que o [IBExpert]. Por isso, selecionamos [local]
Base de dados
Utilize o botão [pasta] no menu suspenso para selecionar o ficheiro da base de dados. O Firebird armazena toda a base de dados num único ficheiro. Esta é uma das suas vantagens. Pode transferir a base de dados de um computador para outro simplesmente copiando o ficheiro. A extensão [.gdb] é adicionada automaticamente.
Nome de utilizador
SYSDBA é o administrador predefinido nas distribuições atuais do Firebird
Palavra-passe
masterkey é a palavra-passe do administrador SYSDBA nas distribuições atuais do Firebird
Dialeto
O dialeto SQL a utilizar
Registar base de dados
Se esta caixa estiver marcada, o IBExpert exibirá um link para a base de dados após a sua criação

Se, ao clicar no botão [OK] para criar a base de dados, aparecer o seguinte aviso:

Image

isso significa que ainda não iniciou o Firebird. Inicie-o. Aparecerá uma nova janela:

Image

Conjunto de caracteres
Conjunto de caracteres a utilizar. Embora a captura de ecrã acima não mostre qualquer informação, recomenda-se selecionar o conjunto [ISO-8859-1] na lista suspensa, o que permite a utilização de caracteres latinos acentuados.
Versão do servidor
O [IBExpert] é compatível com vários SGBDs derivados do Interbase. Selecione a versão do Firebird que tem instalada:

Depois de confirmar esta nova janela clicando em [Registar], verá o seguinte resultado:

Image

Para aceder à base de dados que criou, basta clicar duas vezes no respetivo link. O IBExpert apresentará então uma árvore de navegação que permite aceder às propriedades da base de dados:

Image

2.4. Criação de uma tabela de dados

Vamos criar uma tabela. Clique com o botão direito do rato em [Tabelas] (ver janela acima) e selecione a opção [Nova Tabela]. Isto abre a janela para definir as propriedades da tabela:

Vamos começar por nomear a tabela [ARTIGOS] utilizando o campo de entrada [1]:

Utilize o campo de entrada [2] para definir uma chave primária [ID]:

Um campo torna-se uma chave primária ao clicar duas vezes no campo [PK] (Chave Primária). Vamos adicionar campos utilizando o botão acima [3]:

Image

Enquanto não tivermos «compilado» a nossa definição, a tabela não é criada. Utilize o botão [Compile] acima para finalizar a definição da tabela. O IBExpert prepara as consultas SQL para gerar a tabela e solicita confirmação:

Image

Curiosamente, o IBExpert exibe as consultas SQL que executou. Isto permite-lhe aprender tanto a linguagem SQL como qualquer dialeto SQL proprietário que possa ser utilizado. O botão [Confirmar] valida a transação atual, enquanto [Anular] a cancela. Aqui, aceitamo-la clicando em [Confirmar]. Assim que isto estiver feito, o IBExpert adiciona a tabela criada à nossa árvore de bases de dados:

Image

Ao clicar duas vezes na tabela, podemos aceder às suas propriedades:

Image

O painel [Constraints] permite-nos adicionar novas restrições de integridade à tabela. Vamos abri-lo:

Image

Vemos a restrição de chave primária que criámos. Podemos adicionar outras restrições:

  • chaves estrangeiras [Chaves Estrangeiras]
  • restrições de integridade de campo [Verificações]
  • restrições de exclusividade de campo [Uniques]

Vamos especificar que:

  • os campos [ID, PRICE, CURRENTSTOCK, MINIMUMSTOCK] devem ser >0
  • o campo [NAME] deve ser diferente de vazio e único

Abra o painel [Verificações] e clique com o botão direito do rato na área de definição de restrições para adicionar uma nova restrição:

Image

Vamos definir as restrições desejadas:

Image

Note-se acima que a restrição [NAME<>''] utiliza duas aspas simples, e não aspas duplas. Compile estas restrições utilizando o botão [Compilar] acima:

Image

Mais uma vez, o IBExpert demonstra a sua facilidade de utilização ao apresentar as consultas SQL que executou. Passemos agora ao painel [Constraints/Unique] para especificar que o nome deve ser único. Isto significa que o mesmo nome não pode aparecer duas vezes na tabela.

Image

Vamos definir a restrição:

Image

Depois, vamos compilá-la. Assim que estiver feito, abra o painel [DDL] (Data Definition Language) para a tabela [ARTICLES]:

Image

Este painel exibe o código SQL para gerar a tabela com todas as suas restrições. Pode guardar este código num script para o executar mais tarde:

SET SQL DIALECT 3;
SET NAMES NONE;
CREATE TABLE ARTICLES (
    ID            INTEGER NOT NULL,
    NOM           VARCHAR(20) NOT NULL,
    PRIX          DOUBLE PRECISION NOT NULL,
    STOCKACTUEL   INTEGER NOT NULL,
    STOCKMINIMUM  INTEGER NOT NULL
);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_ID check (ID>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_PRIX check (PRIX>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_STOCKACTUEL check (STOCKACTUEL>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_STOCKMINIMUM check (STOCKMINIMUM>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_NOM check (NOM<>'');
ALTER TABLE ARTICLES ADD CONSTRAINT UNQ_NOM UNIQUE (NOM);
ALTER TABLE ARTICLES ADD CONSTRAINT PK_ARTICLES PRIMARY KEY (ID);

2.5. Inserir dados numa tabela

Chegou a hora de inserir dados na tabela [ARTICLES]. Para isso, utilize o painel [Data]:

Image

Os dados são introduzidos clicando duas vezes nos campos de entrada de cada linha da tabela. Uma nova linha é adicionada utilizando o botão [+] e uma linha é eliminada utilizando o botão [-]. Estas operações são realizadas no âmbito de uma transação que é confirmada através do botão [Confirmar Transação] (ver acima). Sem esta confirmação, os dados serão perdidos.

2.6. O Editor SQL do [IB-Expert]

O SQL (Structured Query Language) permite ao utilizador:

  1. criar tabelas, especificando o tipo de dados que irão armazenar e as restrições que os dados devem satisfazer
  1. inserir dados nessas tabelas
  2. modificar determinados dados
  3. eliminar outros dados
  4. utilizar os dados para recuperar informações
  5. ...

O IBExpert permite aos utilizadores realizar as operações 1 a 4 graficamente. Acabámos de ver isso. Quando a base de dados contém muitas tabelas, cada uma com centenas de linhas, precisamos de informações que são difíceis de obter visualmente. Suponha, por exemplo, que uma loja online tem milhares de clientes por mês. Todas as compras são registadas numa base de dados. Após seis meses, descobre-se que o produto «X» está com defeito. A loja quer contactar todos os que o compraram para que possam devolver o produto para uma troca gratuita. Como é que se podem encontrar os endereços destes compradores?

  1. Poderíamos percorrer manualmente todas as tabelas e procurar esses compradores. Isso levaria algumas horas.
  2. Podemos executar uma consulta SQL que irá devolver uma lista dessas pessoas em questão de segundos

O SQL é útil sempre que

  • a quantidade de dados nas tabelas for grande
  • existirem muitas tabelas interligadas
  • as informações a recuperar estiverem espalhadas por várias tabelas
  • ...

Vamos agora apresentar o Editor SQL do IBExpert. Pode aceder-se a ele através da opção [Ferramentas/Editor SQL] ou premindo [F12]:

Image

Isto dá-lhe acesso a um editor avançado de consultas SQL, onde pode executar consultas. Vamos escrever uma consulta:

Image

Execute a consulta SQL utilizando o botão [Executar] acima. Obterá o seguinte resultado:

Image

Acima, o separador [Resultados] apresenta a tabela de resultados para a instrução SQL [Selecionar]. Para emitir um novo comando SQL, basta regressar ao separador [Editar]. Verá então a instrução SQL que foi executada.

Image

Vários botões na barra de ferramentas são úteis:

  • O botão [Nova consulta] permite-lhe avançar para uma nova consulta SQL:

Image

Isto abre uma página de edição em branco:

Image

Pode então digitar uma nova instrução SQL:

Image

e executá-la:

Image

Voltemos ao separador [Editar]. As várias instruções SQL emitidas são armazenadas pelo [IB-xpert]. O botão [Consulta anterior] permite-lhe voltar a uma instrução SQL emitida anteriormente:

Image

Será então redirecionado para a consulta anterior:

Image

O botão [Next Query] permite-lhe avançar para a instrução SQL seguinte:

Image

Verá então a instrução SQL seguinte na lista de instruções SQL armazenadas:

Image

O botão [Eliminar consulta] permite-lhe eliminar uma instrução SQL da lista de instruções guardadas:

Image

O botão [Limpar consulta atual] limpa o conteúdo do editor da consulta SQL apresentada:

Image

O botão [Confirmar] permite guardar permanentemente as alterações feitas na base de dados:

Image

O botão [Reverter] permite anular as alterações feitas na base de dados desde a última [Confirmação]. Se não tiver sido feita nenhuma [Confirmação] desde a ligação à base de dados, as alterações feitas desde essa ligação serão anuladas.

Image

Vejamos um exemplo. Vamos inserir uma nova linha na tabela:

Image

A instrução SQL é executada, mas nada é exibido. Não sabemos se a inserção ocorreu. Para descobrir, vamos executar a seguinte instrução SQL [Nova consulta]:

Image

Obtemos o seguinte resultado:

Image

A linha foi, de facto, inserida. Vamos agora examinar o conteúdo da tabela de outra forma. Clique duas vezes na tabela [ARTICLES] no explorador de bases de dados:

Image

Obtemos a seguinte tabela:

Image

O botão com a seta acima permite atualizar a tabela. Após a atualização, a tabela acima não se altera. Parece que a nova linha não foi inserida. Vamos voltar ao editor SQL (F12) e, em seguida, confirmar a instrução SQL utilizando o botão [Commit]:

Image

Depois de fazer isso, vamos voltar à tabela [ARTICLES]. Podemos ver que nada mudou, mesmo ao usar o botão [Refresh]:

Image

Acima, abra o separador [Fields] e, em seguida, volte ao separador [Data]. Desta vez, a linha inserida aparece corretamente:

Image

Quando a execução das várias instruções SQL começa, o editor abre o que se denomina uma transação na base de dados. As alterações feitas por estas instruções SQL no editor SQL só serão visíveis enquanto permanecer no mesmo editor SQL (pode abrir várias instâncias). É como se o editor SQL estivesse a trabalhar não na base de dados real, mas na sua própria cópia. Na realidade, não é exatamente assim que funciona, mas esta analogia pode ajudar-nos a compreender o conceito de transação. Todas as alterações feitas na cópia durante uma transação só serão visíveis na base de dados real depois de terem sido confirmadas através de um [Commit Transaction]. A transação atual é então encerrada e uma nova transação começa.

As alterações feitas durante uma transação podem ser desfeitas por uma operação chamada [Rollback]. Vamos tentar a seguinte experiência. Vamos iniciar uma nova transação (basta [Confirmar] a transação atual) com a seguinte instrução SQL:

Image

Vamos executar este comando, que elimina todas as linhas da tabela [ARTICLES], e depois executar [New Query] com o seguinte novo comando SQL:

Image

Obtemos o seguinte resultado:

Image

Todas as linhas foram eliminadas. Lembre-se de que isto foi feito numa cópia da tabela [ARTICLES]. Para verificar isto, clique duas vezes na tabela [ARTICLES] abaixo:

Image

e consulte o separador [Dados]:

Image

Mesmo que utilizemos o botão [Atualizar] ou mudemos para o separador [Campos] e depois voltemos ao separador [Dados], o conteúdo acima permanece inalterado. Isto já foi explicado. Estamos numa outra transação que está a trabalhar na sua própria cópia. Agora, voltemos ao editor SQL (F12) e utilizemos o botão [Reverter] para anular as eliminações de linhas que foram feitas:

Image

É-nos solicitada uma confirmação:

Image

Vamos confirmar. O editor SQL confirma que as alterações foram revertidas:

Image

Vamos executar novamente a consulta SQL acima para verificar. As linhas que tinham sido eliminadas estão agora de volta:

Image

A operação [Rollback] restaurou a cópia em que o editor SQL está a trabalhar para o estado em que se encontrava no início da transação.