Home

Delphi - Database methoden en events


arrows.gif (215 bytes)1.TTable methoden, properties en events
arrows.gif (215 bytes)
1.1 Navigeren door een dataset
arrows.gif (215 bytes)1.2 Zoeken in een dataset
arrows.gif (215 bytes)1.3 Het muteren van een dataset
arrows.gif (215 bytes)1.4 Het beperken van het aantal records d.m.v. filteren
arrows.gif (215 bytes)1.5 TTable events

arrows.gif (215 bytes)2. TQuery methoden, properties en events
arrows.gif (215 bytes)2.1 Het instellen van een TQuery

Met Delphi kan je, zonder ook maar één regel te programmeren toch nog vrij ingewikkelde database applicaties schrijven.
In de Object Repository van Delphi kan je zelfs binnen 5 minuten een database applicatie maken m.b.v. een wizard,
niet alleen eenvoudige applicaties met één tabel, maar ook applicatie's met gekoppelde tabellen. (Master-Detail).
Voor de echt zware applicatie's heb je object pascal nodig.
Dit paper bespreekt veel voorkomende methods en events van de diverse componenten, zoals besproken in de vorige
paper van de tutorial, beginnend bij het TTable component.

1. TTable methoden, properties en events

Het TTable component is een belangrijk database component, en communiceert met de fysiek tabel op schijf.

1.1 Navigeren door een dataset

Voordat er in een dataset genavigeerd kan worden moet deze eerst geopend worden middels de method Open.
Table1.Open; Deze methode set de active property true. Middels de methode close kan een dataset gesloten worden.

Met navigeren door een dataset bedoelen we het verplaatsen van de zogenaamde cursor. De cursor wijst altijd het actieve record aan.
Middels ondergaande methods kan door een tabel genavigeerd worden :

Navigatie methoden

Methode Functie In code
First Verplaatst de cursor naar het eerste record van de tabel Table1.First;
Last Verplaatst de cursor naar het laatste record van de tabel Table1.Last;
Next Verplaatst de cursor naar het volgende record in de tabel Table1.Next;
Prior Verplaatst de cursor naar het vorige record in de tabel Table1.Prior;
MoveBy(x) Verplaatst de cursor x positie's in de tabel (zowel + als -) Table1.MoveBy(4);

Bovenstaande methode benaderen de records op een indirecte manier, m.a.w. van te voren weet je nooit exact welk record je
te zien krijgt. In de volgende paragraaf worden de methods besproken waarmee gericht gezocht kan worden op bepaalde
records in een dataset.

1.2 Zoeken in een dataset

Zoek methoden

Methode Functie Opmerking
SetKey Zet een tabel in de zoekmodus voor het zoeken op een geindexeerd veld. SetKey wordt gebruikt in combinatie met GotoKey, GotoNearest, FindKey en FindNearest. (Zie voorbeeld)

Al deze methods werken op basis van een index veld. Zowel primary als secundary indexes. GotoNearest, Findnearest zijn procedures die altijd ietst vinden. GotoKey en Findkey zijn functie's dit True of False retourneren.

GotoKey Verplaatst de cursor naar het gespecificeerde record
GotoNearest Als GotoKey  maar dan naar de het record die het meest lijkt op de gezochte tekst.
FindKey Verplaatst de cursor naar het gespecificeerde record
FindNearest Als FindKey maar dan naar de het record die het meest lijkt op de gezochte tekst.
Locate Verplaatst de cursor naar een gespecificeerd record op basis van de opgegeven velden en waarden. Deze functie werkt op alle velden, geindexeerd of niet.

Voor we enkele voorbeelden over zoeken zien moeten we eerst nog kijken hoe een waarde van een record-veld bekeken kan worden.
Zoals reeds eerder besproken kunnen individuele velden benaderd worden middels methods van het type TField.
De velden in de lijst Fields kunnen benadert worden middels hun indexnummer alsware het een array.
De indexnummers worden bepaald tijdens de uitvoer van het programma en kunnen op de volgende manier gebruikt worden
om het veld uit te lezen : Label1.Caption : = Table1.Fields[0].value;

Het op deze manier benaderen van een tabel is niet erg handig, het is handiger om de tabel te benaderen middels
hun veld- of kolomnaam. Dit kan met behulp van de method FieldByName.

De TTable Methode FieldByName geeft de waarde van een veld als type TField. Onderstaande code toont hoe de verschillende
zoekmethoden werken :

Het uitlezen van een veldwaarde :
Table1.Open;//Open the dataset by setting the active property to true
aText := Table1.FieldByName('Name').AsString;
Table1.Close;
Zoeken met SetKey, GotoKey, FindKey, GotoNearest, FindNearest in Table1:
With Table1 do
Begin
  SetKey;
  FieldByName('NAME').AsString := EditSearch.Text;//Search for this text

Zoek met GotoKey :
  If GotoKey then 
    LabelResult.Caption := 'Found!';
  else
    LabelResult.Caption := 'Not found!' + FieldByName('NAME').AsString;

Zoek met FindKey :
  If FindKey([EditSearch.Text]) then
    LabelResult.Caption := 'Found!;
  else
    LabelResult.Caption := 'Not found!' + FieldByName('NAME').AsString;
Zoek met GotoNearest/FindNearest :
  FindNearest([EditSearch.Text]); {of GotoNearest; both find always something}
  LabelResultaat.Caption := 'Found!' + FieldByName('NAME').AsString;
end;
Zoek met Locate :
if Locate('Name;Description;', VarArrayOf(['Borland', 'A nice tool']),
[loPartialKey]) then
 LabelResultaat.Caption := 'Found!, cursor has moved to this record ' + FieldByName('NAME').AsString;

1.3 Het muteren van een dataset

Hieronder tref je de belangrijkste methoden waarmee de tabel bewerkt, of nieuwe records toegevoegd / verwijderd kunnen worden :

Bewerkingsmethoden

Methode Functie In code
Edit Zet de tabel in de 'edit' mode Table1.Edit;
Insert Voegt een nieuw record aan de tabel toe Table1.Insert;
Post Schrijft wijzigingen in tabel naar schijf Table1.Post;
Cancel Breekt een edit/insert aktie af Table1.Cancel;
Delete Verwijdert het actieve record Table1.Delete;

Hieronder enkele code voorbeelden m.b.t tot het bewerken van een tabel :

Het toevoegen van een nieuw record :

With Table1 do
Begin
  Insert;      //Set the table in the insert mode
  FieldByName('NAME').AsString := 'Delphi 4.0';//Fill in the values
  FieldByName('STUDY').AsBoolean := True;
  Post;
end;
Het Editten van een record :
With Table1 do
Begin
  Edit;//Set the table in the edit mode
  FieldByName('NAME').AsString := 'Delphi 5.0';//Fill in the values
  Post;
end;

De methode edit en insert zetten de database in een andere mode. Er bestaan verschillende modes.
Middels de property State (Table1.State) kan je bepalen in wat voor mode de tabel zich bevindt.

property State: TDataSetState;

De belangrijkste states van een dataset zijn hieronder opgenoemd :

Dataset states

State Betekenis
dsInactive Dataset is niet actief en er kunnen geen waarden getoond worden.
dsBrowse Standard state wanneer er door de records gebrowsed wordt.
dsInsert Er is een nieuw record ingevoegd (Insert) en de waarden zijn nog niet gepost.
dsEdit De dataset is middels methode Edit in de edit state gebracht, data kan gewijzigd worden.
dsSetKey Er kan gezocht worden. (Setkey)
dsCalcFields Een OnCalcFields event wordt uitgevoerd.
dsFilter Een OnFilterRecord event wordt uitgevoerd. Data kan niet gewijzigd worden.

Naast deze states zijn er nog enkele 'interne' states welke door Delphi zelf gebruikt worden. (Zie Delphi Help)

Het gebruik van state property :

If Table1.State in [dsEdit,dsInsert] then
  Table1.Post;

1.4 Het beperken van het aantal records d.m.v. filteren

Middels filteren kan het aantal records in een dataset beperkt worden.
Voor filteren zijn twee properties aanwezig te weten :

Filteren van een dataset properties

Property Betekenis
Filter Is een string waarmee de dataset gefiltered kan worden Bijv. Name = 'Delphi'  (VeldNaam = waarde)
Filtered Boolean waarmee het filter aan en uitgezet kan worden.

De property Filter kan gebruikt worden om eenvoudige filters te zetten zoals AANTAL > 100 etc.
Een andere manier is om een OnFilterRecord event te schrijven, waarmee ingewikkelderde filters kunnen worden gemaakt.
Dit kan op de volgende manier :

Het filteren van een dataset mbv OnFilterRecord :

procedure TForm1.Table1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin
  Accept := Table1.FieldByName('CATEGORY').AsString = 'Prog';
end;  //Shows alle records with field Category's value 'Prog'

Omdat filteren record voor record geschiedt is dit niet erg snel. Vooral bij applicaties die hun data over een netwerk moeten benaderen
kan dit de performance van de applicatie verminderen. Het is dan verstandiger om met queries te gaan werken. (Hierover later meer)

1.5 TTable events

TTable kent vele events. Het is ondoenlijk om deze hier allemaal te bespreken. De meeste TTable events hebben betrekking op de methods
waarmee de tabel bewerkt kan worden. Hieronder een overzicht van enkele veel gebruikte events en hun toepassing :
(Voor een overzicht van alle events zie de Delphi help file)

TTable Events

Methode Events ( BeforeEvent - ExecutingMethode - AfterEvent) Opmerking
Edit BeforeEdit - Edit - AfterEdit De before events starten voordat de dataset in de betreffende state komt. De After events starten nadat de dataset in de betreffende state is gekomen. Bijv. het invullen van standaard waarden van een record na een insert zou kunnen gebeuren in de AfterInsert event.
Insert BeforeInsert - Insert - AfterInsert
Post BeforePost - Post - AfterPost
Cancel BeforeCancel - Cancel - AfterCancel
Delete BeforeDelete - Delete - AfterDelete

Probeer ze uit om de werking van deze events te doorgronden.

2. TQuery methoden, properties en events

Met het TQuery component kunnen SQL - query's op een TTable losgelaten worden. Met de Structured Query Language (SQL) query's kan
je bijvoorbeeld een dataset efficiënt filteren op bepaalde waarden.

2.1 Het instellen van een TQuery (zie ook  vorige paper)

Een TQuery component lijkt erg veel op een TTable component, met dit verschil dat een TQuery component een TTable component (de dataset) als
bron heeft, en dat middels SQL een bepaalde record range getoond kan worden. Hieronder een overzicht van enkele properties, en waar ze voor gebruikt
kunnen worden :

TQuery properties

Property Betekenis
DataBaseName De database die als bron dient.
DataSource De datasource die verbonden is met de dataset die als bron  voor de query dient.
Params Bevat een parameter lijst welke in de SQL code gebruikt kan worden.
SQL Is van het type TStrings en bevat de SQL syntax.

De Params property bevat een lijst met parameters die zich in de SQL property bevinden. Deze parameters worden aangegeven middels de dubbelpunt
voor de parameter.

TQuery SQL property voorbeel :

With Query1.SQL do
begin
  Add('SELECT * FROM Table');
  Add('WHERE');
  Add('NAME = :aParam'); // of NAME = 'Delphi'
end;
Een waarde aan de parameter toekennen in code :
Query1.ParamByName('aParam').AsString := 'Delphi';
Query1.Open;

Params geeft de mogelijkheid om nog flexibeler Query's te bouwen.
De method Close sluit de query.
Het resultaat van de query kan getoond worden door de normal dataware componenten zoals een DBGrid. De component Query1 dient
hier voor als dataset ingesteld te worden op een Datasource die dient als bron voor de DBGrid. (Zie ook vorige paper)
Nogmaals het overzicht :

database1.jpg (35783 bytes)

 

Tot slot :
Het database gedeelte van Delphi is enorm groot. Met dit paper hebben we een klein stukje hiervan belicht.
In het slot paper van deze tutorial gaan we een kleine applicatie bouwen.

Klik hier voor het volgende paper in deze tutorial :  Delphi - database applicaties bouwen

 

arrows.gif (215 bytes)Top