Skip to content

2. Firebird-handleiding

Voordat we ingaan op de basisbeginselen van de taal SQL, laten we de lezer zien hoe Firebird SGBD en de grafische client IB-Expert geïnstalleerd kunnen worden.

2.1. Waar is Firebird te vinden?

De hoofdwebsite van Firebird is [http://firebird.sourceforge.net/]. De downloadpagina biedt de volgende links (april 2005):

Image

U dient de volgende bestanden te downloaden:

firebird-win32
SGBD voor Windows
firebird-net-provider
een klassenbibliotheek voor .NET-toepassingen waarmee toegang tot de SGBD mogelijk is zonder gebruik te maken van een stuurprogramma ODBC.
firebird-ODBC-driver
de Firebird-driver ODBC

Installeer deze onderdelen. De SGBD wordt geïnstalleerd in een map waarvan de inhoud er ongeveer als volgt uitziet:

De binaire bestanden bevinden zich in de map [bin]:

fbguard.exe
hiermee kan SGBD worden gestart/gestopt
isql.exe
een commandoregelclient waarmee databases kunnen worden beheerd

Merk op dat de beheerder van SGBD standaard [SYSDBA] heet en dat zijn wachtwoord [masterkey] is. Er zijn menu's geïnstalleerd in [Démarrer]:

Image

Met de optie [Firebird Guardian] kun je SGBD starten/stoppen. Na het starten blijft het pictogram van SGBD in de Windows-taakbalk staan:

Om Firebird-databases aan te maken en te beheren met de opdrachtregelclient [isql.exe], dient u de documentatie te raadplegen die bij het product is geleverd in de map [doc].

2.2. De documentatie over Fire

De documentatie over Firebird en de taal SQL is te vinden op de website van Firebird (januari 2006):

Image

Er zijn diverse handleidingen beschikbaar in het Engels:

Firebird 1.5 Quick Start Guide
om aan de slag te gaan met FB
Firebird 1.5 Error Codes
om de foutcodes te begrijpen die door FB worden geretourneerd

Er zijn ook handleidingen voor training in de taal SQL beschikbaar:

Image

Data Definition Guide
om te ontdekken hoe u tabellen kunt aanmaken, welke gegevenstypen u kunt gebruiken, ...
Language Reference
de referentiegids om SQL te leren met Firebird

Een snelle manier om met Firebird te werken en de taal SQL te leren, is door gebruik te maken van een grafische client. Een voorbeeld hiervan is IB-Expert, dat in de volgende paragraaf wordt beschreven.

2.3. Werken met SGBD Firebird via IB- Expert

De hoofdwebsite van IB-Expert is [http://www.ibexpert.com/]. Op de downloadpagina staan de volgende links:

Image

We kiezen de gratis versie [Personal Edition]. Zodra deze is gedownload en geïnstalleerd, beschikken we over een map die er ongeveer zo uitziet:

Image

Het uitvoerbare bestand is [ibexpert.exe]. Normaal gesproken is er een snelkoppeling beschikbaar in het menu [Démarrer]:

Image

Zodra IBExpert is gestart, verschijnt het volgende venster:

Image

Laten we de optie [Database/Create Database] gebruiken om een database aan te maken:

Server
kan [local] of [remote] zijn. Hier staat onze server op dezelfde machine als [IBExpert]. We kiezen dus [local]
Database
gebruik de knop van het type [dossier] in de keuzelijst om het databasebestand aan te wijzen. Firebird slaat de hele database op in één enkel bestand. Dat is een van de voordelen ervan. We verplaatsen de database van de ene computer naar de andere door het bestand simpelweg te kopiëren. Het achtervoegsel [.gdb] wordt automatisch toegevoegd.
Username
SYSDBA is de standaardbeheerder van de huidige Firebird-distributies
Password
masterkey is het wachtwoord van de beheerder SYSDBA van de huidige Firebird-distributies
Dialect
het te gebruiken dialect SQL
Register Database
als het vakje is aangevinkt, zal IBExpert een link naar de aangemaakte database weergeven nadat deze is aangemaakt

Als u op de knop [OK] voor het aanmaken klikt, krijgt u de volgende waarschuwing:

Image

dan hebt u Firebird niet gestart. Start het programma. Er verschijnt een nieuw venster:

Image

Charset
Te gebruiken lettertypefamilie. Hoewel de bovenstaande schermafbeelding geen informatie weergeeft, is het raadzaam om in de vervolgkeuzelijst de familie [ISO-8859-1] te selecteren, waarmee u Latijnse letters met accenten kunt gebruiken.
Server version
[IBExpert] kan verschillende van Interbase afgeleide SGBD-versies verwerken. Selecteer de versie van Firebird die u hebt geïnstalleerd:

Zodra dit nieuwe venster door [Register] is gevalideerd, krijgen we het volgende resultaat:

Image

Om toegang te krijgen tot de aangemaakte database, hoeft u alleen maar op de link te dubbelklikken. IBExpert toont dan een boomstructuur die toegang geeft tot de eigenschappen van de database:

Image

2.4. Een gegevenstabel aanmaken

Laten we een tabel aanmaken. Klik met de rechtermuisknop op [Tables] (zie bovenstaand venster) en kies de optie [New Table]. Je krijgt dan het venster te zien waarin je de eigenschappen van de tabel kunt instellen:

Laten we beginnen met de tabel de naam [ARTICLES] te geven via het invoerveld [1]:

Gebruik het invoerveld [2] om een primaire sleutel [ID] te definiëren:

Een veld wordt tot primaire sleutel gemaakt door te dubbelklikken op het veld [PK] (Primary Key). Laten we velden toevoegen met de knop boven [3]:

Image

Zolang we onze definitie niet hebben ‘gecompileerd’, wordt de tabel niet aangemaakt. Gebruik de knop [Compile] hierboven om de definitie van de tabel te voltooien. IBExpert bereidt de query’s SQL voor om de tabel te genereren en vraagt om bevestiging:

Image

Interessant genoeg toont IBExpert de SQL-query's weer die het heeft uitgevoerd. Zo kun je niet alleen de taal SQL leren, maar ook het eventueel gebruikte, mogelijk eigen dialect SQL. Met de knop [Commit] kan de lopende transactie worden bevestigd, met [Rollback] kan deze worden geannuleerd. Hier accepteren we deze met [Commit]. Zodra dit is gebeurd, voegt IBExpert de aangemaakte tabel toe aan de boomstructuur van onze database:

Image

Door op de tabel te dubbelklikken, krijgen we toegang tot de eigenschappen ervan:

Image

Via het paneel [Constraints] kunnen we nieuwe integriteitsregels aan de tabel toevoegen. Laten we dit openen:

Image

We zien hier de primaire sleutelbeperking die we hebben aangemaakt. We kunnen nog andere beperkingen toevoegen:

  • vreemde sleutels [Foreign Keys]
  • veldintegriteitsbeperkingen [Checks]
  • veld-uniciteitsbeperkingen [Uniques]

Laten we het volgende vermelden:

  • de velden [ID, PRIX, STOCKACTUEL, STOKMINIMUM] moeten groter zijn dan 0
  • het veld [NOM] moet niet-leeg en uniek zijn

Laten we het paneel [Checks] openen en met de rechtermuisknop klikken in het gedeelte voor het definiëren van beperkingen om een nieuwe beperking toe te voegen:

Image

Laten we de gewenste beperkingen definiëren:

Image

Merk op dat de beperking [NOM<>''] hierboven twee apostrofs gebruikt in plaats van aanhalingstekens. Compileren we deze beperkingen met de knop [Compile] hierboven:

Image

Ook hier geeft IBExpert nuttige informatie door de query's SQL weer te geven die het heeft uitgevoerd. Laten we nu naar het paneel [Constraints/Uniques] gaan om aan te geven dat de naam uniek moet zijn. Dit betekent dat dezelfde naam niet twee keer in de tabel mag voorkomen.

Image

Laten we de beperking definiëren:

Image

Laten we deze vervolgens compileren. Als dat gedaan is, openen we het paneel [DDL] (Data Definition Language) van de tabel [ARTICLES]:

Image

Dit paneel geeft de code SQL weer waarmee de tabel met al zijn beperkingen wordt gegenereerd. We kunnen deze code in een script opslaan om hem later opnieuw uit te voeren:

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. Gegevens invoeren in een tabel

Het is nu tijd om gegevens in de tabel [ARTICLES] in te voeren. Hiervoor gebruiken we het bijbehorende paneel [Data]:

Image

De gegevens worden ingevoerd door te dubbelklikken op de invoervelden van elke rij in de tabel. Met de knop [+] wordt een nieuwe rij toegevoegd, met de knop [-] wordt een rij verwijderd. Deze bewerkingen vinden plaats in een transactie die wordt bevestigd met de knop [Commit Transaction] (zie hierboven). Zonder deze bevestiging gaan de gegevens verloren.

2.6. De editor SQL van [IB-Expert]

Met de taal SQL (Structured Query Language) kan een gebruiker:

  1. tabellen aan te maken door het type gegevens dat erin wordt opgeslagen en de voorwaarden waaraan deze gegevens moeten voldoen te specificeren
  1. gegevens in te voeren
  2. bepaalde gegevens te wijzigen
  3. andere gegevens te verwijderen
  4. de inhoud ervan te gebruiken om informatie te verkrijgen
  5. ...

Met IBExpert kan een gebruiker de bewerkingen 1 tot en met 4 grafisch uitvoeren. Dat hebben we zojuist gezien. Wanneer de database veel tabellen bevat met elk honderden rijen, is er behoefte aan informatie die visueel moeilijk te verkrijgen is. Stel bijvoorbeeld dat een onlinewinkel duizenden kopers per maand heeft. Alle aankopen worden in een database geregistreerd. Na zes maanden blijkt dat product „X” defect is. Men wil contact opnemen met alle mensen die het hebben gekocht, zodat ze het product kunnen terugsturen voor een gratis omruiling. Hoe vind je de adressen van deze kopers?

  1. Je kunt alle tabellen visueel doorlopen en naar deze kopers zoeken. Dat kost een paar uur.
  2. Men kan een opdracht SQL uitvoeren, die binnen enkele seconden de lijst met deze personen oplevert

De taal SQL is nuttig zodra

  • de hoeveelheid gegevens in de tabellen groot is
  • er veel tabellen zijn die onderling gekoppeld zijn
  • de te verkrijgen informatie over meerdere tabellen is verspreid
  • ...

We presenteren nu de editor SQL van IBExpert. Deze is toegankelijk via de optie [Tools/SQL Editor] of [F12]:

Image

We krijgen dan toegang tot een geavanceerde query-editor SQL waarmee we met query's kunnen experimenteren. Laten we een query invoeren:

Image

We voeren de query SQL uit met de knop [Execute] hierboven. We krijgen het volgende resultaat:

Image

Hierboven toont het tabblad [Results] de resultatentabel van de opdracht SQL [Select]. Om een nieuwe opdracht SQL te geven, hoeft u alleen maar terug te gaan naar het tabblad [Edit]. Daar vindt u dan de opdracht SQL die is uitgevoerd.

Image

Verschillende knoppen op de werkbalk zijn handig:

  • met de knop [New Query] kun je naar een nieuwe zoekopdracht SQL gaan:

Image

Je krijgt dan een lege bewerkingspagina te zien:

Image

Vervolgens kun je een nieuwe opdracht invoeren: SQL:

Image

en deze uitvoeren:

Image

Laten we teruggaan naar het tabblad [Edit]. De verschillende uitgevoerde opdrachten SQL worden opgeslagen door [IB-xpert]. Met de knop [Previous Query] kunt u terugkeren naar een eerder verzonden opdracht SQL:

Image

Je keert dan terug naar de vorige aanvraag:

Image

Met de knop [Next Query] gaat u naar de volgende opdracht SQL:

Image

We vinden dan de opdracht SQL, die in de lijst met opgeslagen opdrachten volgt op SQL:

Image

Met de knop [Delete Query] kunt u een opdracht SQL uit de lijst met opgeslagen opdrachten verwijderen:

Image

Met de knop [Clear Current Query] kunt u de inhoud van de editor voor de weergegeven opdracht SQL wissen:

Image

Met de knop [Commit] kunt u de wijzigingen in de database definitief opslaan:

Image

Met de knop [RollBack] kunt u de wijzigingen in de database ongedaan maken die sinds de laatste [Commit] zijn aangebracht. Als er sinds de verbinding met de database geen [Commit] is uitgevoerd, worden de wijzigingen die sinds deze verbinding zijn aangebracht ongedaan gemaakt.

Image

Laten we een voorbeeld nemen. Voeg een nieuwe rij toe aan de tabel:

Image

De opdracht SQL wordt uitgevoerd, maar er verschijnt niets op het scherm. We weten niet of de invoeging heeft plaatsgevonden. Om dit te controleren, voeren we de opdracht SQL uit, die volgt op [New Query]:

Image

We krijgen met [Execute] het volgende resultaat:

Image

De rij is dus inderdaad ingevoegd. Laten we de inhoud van de tabel nu op een andere manier bekijken. Dubbelklik op de tabel [ARTICLES] in de database-explorer:

Image

We krijgen de volgende tabel te zien:

Image

Met de pijlknop hierboven kun je de tabel vernieuwen. Na het vernieuwen verandert de bovenstaande tabel niet. Het lijkt alsof de nieuwe rij niet is ingevoegd. Laten we teruggaan naar de editor SQL (F12) en vervolgens de opdracht SQL, die is gegenereerd met de knop [Commit], bevestigen:

Image

Als dit is gebeurd, gaan we terug naar de tabel [ARTICLES]. We zien dat er niets is veranderd, zelfs niet bij gebruik van de knop [Refresh]:

Image

Laten we hierboven het tabblad [Fields] openen en vervolgens teruggaan naar het tabblad [Data]. Deze keer wordt de ingevoegde regel correct weergegeven:

Image

Wanneer de uitvoering van de verschillende opdrachten SQL begint, opent de editor een zogenaamde transactie in de database. De wijzigingen die door deze opdrachten SQL van de editor SQL worden aangebracht, zijn alleen zichtbaar zolang men in dezelfde editor SQL blijft (men kan er meerdere openen). Het is alsof de editor SQL niet op de daadwerkelijke database werkt, maar op een eigen kopie daarvan. In werkelijkheid verloopt het niet precies op deze manier, maar dit beeld kan ons helpen het begrip ‘transactie’ te begrijpen. Alle wijzigingen die tijdens een transactie in de kopie worden aangebracht, worden pas in de daadwerkelijke database zichtbaar nadat ze zijn bevestigd met een [Commit Transaction]. De lopende transactie is dan beëindigd en er begint een nieuwe transactie.

De wijzigingen die tijdens een transactie zijn aangebracht, kunnen worden teruggedraaid met een bewerking genaamd [Rollback]. Laten we het volgende experiment uitvoeren. Laten we een nieuwe transactie starten (dit doet u door [Commit] uit te voeren op de huidige transactie) met de volgende opdracht SQL:

Image

Laten we deze opdracht uitvoeren, die alle rijen uit de tabel [ARTICLES] verwijdert, en vervolgens [New Query] uitvoeren, de volgende nieuwe opdracht SQL:

Image

We krijgen het volgende resultaat:

Image

Alle rijen zijn verwijderd. Laten we niet vergeten dat dit is gedaan op een kopie van de tabel [ARTICLES]. Om dit te controleren, dubbelklikken we op de tabel [ARTICLES] hieronder:

Image

en bekijken we het tabblad [Data]:

Image

Zelfs als we de knop [Refresh] gebruiken of naar het tabblad [Fields] gaan om vervolgens terug te keren naar het tabblad [Data], verandert de bovenstaande inhoud niet. Dit is al uitgelegd. We bevinden ons in een andere transactie die met een eigen kopie werkt. Laten we nu teruggaan naar de editor SQL (F12) en de knop [RollBack] gebruiken om de uitgevoerde regelverwijderingen ongedaan te maken:

Image

We worden gevraagd om te bevestigen:

Image

Bevestig dit. De editor SQL bevestigt dat de wijzigingen zijn ongedaan gemaakt:

Image

Laten we het bovenstaande verzoek SQL nogmaals uitvoeren om dit te controleren. We zien dat de regels die waren verwijderd, weer terug zijn:

Image

De bewerking [Rollback] heeft de kopie waaraan de editor SQL werkt, teruggebracht naar de toestand waarin deze zich aan het begin van de transactie bevond.