You are on page 1of 7

Die A tot Z van databasisprogrammering in Delphi

ʼn Databasis word gebruik om data in te stoor. ʼn Databasislêer se uitbreiding is accdb en kan uit verskillende
tabelle bestaan. ʼn Tabel bestaan uit verskillende rekords. ʼn Rekord bestaan uit verskillende velde. Voorbeelde
van velde is naam, van ens.
ʼn Primêre sleutel is ʼn unieke veld wat ʼn rekord identifiseer. Dit is bv. ʼn toelatingskode, rekeningnommer of ID-
nommer. Die primêre sleutel moet altyd ingevul word. Daar mag GEEN rekords wees met dieselfde primêre
sleutel nie.
Koppeling van ʼn databasis in Access aan Delphi
Die volgende stappe koppel ʼn databasis in Access aan Delphi. ʼn Datamodule is ʼn aparte eenheid (unit) waar
die komponente om die databasis in Access aan
Delphi te koppel, gestoor is. Die voordeel
hiervan is dat jy die datamodule-eenheid by
enige program kan voeg.
Maak ʼn nuwe Datamodule: File | New | Other
Files | Data Module. Stoor die datamodule as
dmOnderwerp_u en herbenoem die
datamodule na dmOnderwerp.
Plaas drie komponente in die datamodule:
ADOConnection1, ADOTable1 en DataSource1.
Volg nou die instruksies
om die komponente op te
stel.
ADOConnection1:
Hierdie konneksie voorsien ʼn koppeling tussen die databasis en die Delphi-projek.
Herbenoem as conOnderwerp (Name). Gaan na Connectionstring-eienskap. Kliek op
die drie kolletjies by Build. Kies Microsoft Jet 4.0 OLE DB Provider vir ʼn databasis wat in .mdb-formaat gestoor
is. Vir .accdb uitbereiding Kies Microsoft Office 12.0 Access Database Engine. Kliek op die Next-knoppie, kies
die databasis waarmee jy gaan werk. Kies by Advanced Read/Write. Kliek OK, OK. Stel die Login prompt na
false.
ADOTable1: Hierdie komponent verteenwoordig ʼn tabel van die gekoppelde databasis. Jy kan dit net aan een
tabel in die databasis koppel. Jy kies ook die tabel.
Herbenoem as tblOnderwerp. Stel die Connection-eienskap na die ADOConnection1 (conOnderwerp). Kies
dan by TableName die tabel in Access waarmee jy gaan werk. Stel die Active-eienskap na true.
DataSource1: Hierdie komponent voorsien ʼn skakel tussen die ADOtabel en die databasis-tabel.
Herbenoem as drsOnderwerp. Kies die Dataset-eienskap en verander na die ADOTable1 (tblOnderwerp).
Skep ʼn gewone Delphi-program en stoor die program. Voeg die datamodule-eenheid by die unit-lêers in.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, dmOnderwerp_u, ExtCtrls, DBCtrls, Grids, DBGrids, StdCtrls, Mask;
DBGRid: Hierdie komponent word gebruik om die data in die databasis-tabel te besigtig. Herbenoem as
dbgOnderwerp. Stel die Datasource-eienskap na dmOnderwerp.drsOnderwerp. Die data behoort nou in die
DBGrid te vertoon. Indien nie, maak net seker die ADOTable1 se Active-eienskap is op True gestel.
1
DBEdits: Jy kan hierdie komponent aan ʼn veld in ʼn databasis koppel. Die veld van die rekord waar die
databasismerker is (swart driehoekie), sal vertoon. Plaas die komponent op die Delphi-vorm. Stel die
DataSource-eienskap na dmOnderwerp.drsOnderwerp. Kies die databasisveld by DataField. Gebruik det as
afkorting vir DBEdits, m.a.w. detTotalNumber.
DBNavigator: Hierdie komponent werk direk met die databasis. Jy hoef nie enige kode te skryf nie. Hierdie
kan jy in jou PAT-taak gebruik, maar is nie vir eksamendoeleindes nie. Koppel die DBNavigator aan die
databasis deur die Datasource-eienskap na dmOnderwerp.drsOnderwerp te stel.

Jy kan ook by VisibleButtons kies watter knoppies jy wil vertoon. Kyk op bladsy 208 in Delphi IT isgr8! @
Grade 11 vir die verduideliking van elke knoppie. Die eerste vier staan ook bekend as die navigasie knopppies
(nr 1 – heel eerste rekord, nr 2 – een terug, nr 3 – volgende rekord, nr 4 – laaste rekord).
Foute met databasiskoppeling
Okei, kom ons kyk…….
Juffrou my databasis wil nie in
die DBGrid vertoon nie.

Hulle moet net


die instruksies
volg! Ai.
Geduldig Karin,
geduldig!

Maak seker die Datamodule-eenheid (dmOnderwerp_u) is by die uses gedeelte in die Delphi-toepassing
gevoeg.
Maak seker jy het die Active-eienskap van die ADOTable1 na true verander.
Gaan deur al die konneksies en maak seker jy het alles reg gedoen.
Maak seker jy het nie per ongeluk ʼn ander eienskap van ʼn komponent verander nie.
Delphi-kodering met Databasisse
Die skryf van kode in Delphi om met die databasis te werk, is logies. Dink net mooi wat jy moet doen. Dit is
baie belangrik om te weet waar die databasismerker is (swart driehoekie).

2
Die Datamodule se naam moet voor die tabel geplaas word. Gebruik die With-stelling. Indien jy dit nie gebruik
nie, moet jy voor elke tblOnderwerp, die dataModule se naam plaas bv. dmOnderwerp.tblOnderwerp.open. Dit
is die Datamodule se naam nie die unit-lêer bv dmOnderwerp_u nie. Die tabel is die Naam (Name) in die
ADOTable1-komponent. Jy sal vinnig sien of jy die regte name gebruik het, die opsies wat jy kan kies kom op
ʼn aftrek-kieslys.
With dmOnderwerp do
begin
tblOnderwerp.open;
end;
Die volgende Delphi-kode kan gebruik word.

Delphi-kode Betekenis

tblData.open; Maak die tabel oop.

Gaan na die eerste rekord. Die swart-driehoekie sal by die


tblData.first;
eerste rekord wees.

tblData.insert; Voeg ʼn rekord in.

tblData.edit; Verander ʼn rekord.

tblData.post; Skryf die rekord na die oorspronklike databasis.

tblData.next; Gaan na die volgende rekord.

tblData.last; Gaan na die laaste rekord.

tblData.prior; Gaan na vorige rekord.

Data word tydelik in die buffer (tydelike spasie in die RAM)


tblData.refresh;
geplaas. Refresh dateer die data in die databasis op.

Gee die aantal rekords in die databasis, die antwoord is ʼn


tblData.recordcount
heelgetalwaarde.

While not tblData.eof do Terwyl dit nog nie die einde van die databasislêer is nie……

Handige wenk: Maak ʼn rugsteun van jou databasis-tabel voor jy begin kode skryf. Indien jy per ongeluk al die
data uitvee, het jy ʼn kopie. Dit is ook goeie gebruik om kommentaar in te sit, byvoorbeeld watter end is vir
watter kode. Sien die volgende voorbeeld.
Dit is dikwels nodig om rekord vir rekord deur die databasis-tabel te gaan. Indien jy nie ʼn next invoeg nie, gaan
jy ʼn oneindige lus kry, omdat die databasismerker aan die begin van die tabel is en dan nie aanbeweeg nie.
Die einde van die lêer (not eof) word dus nooit bereik nie. Plaas dadelik ʼn begin en end as jy die While-stelling
invoeg.

3
Gaan rekord vir rekord deur die databasis
With dmOnderwerp do
Ek hoop hulle onthou
begin van next. Shame, as
hulle vergeet dan
tblOnderwerp.open;
sukkel hulle want hulle
..tblOnderwerp.first; weet nie wat aangaan
nie!
While not tblOnderwerp.eof do

begin
if tblData['Username'] = '123' then showmessage('Korrek');

tblOnderwerp.next;
..end;// end While

end;// end With (Dit is goeie programmerings-beginsels om kommentaar in te voeg)

Verwys na velde in die databsis


Om na velde in die databasis in Delphi te verwys gebruik dit so: tblOnderwerp['Veldnaam']. Maak seker die
veldnaam in Delphi is reg gespel. Die veldnaam moet presies soos wat dit in die Access databasis is, gebruik
word. Veldname moet verkieslik een woord wees bv Volle_naam en nie Volle naam nie. Maak baie seker wat
die datatipes van die velde in Access is. Dit is ʼn goeie plan om die databasis oop te maak en by Table
Design View na die datatipes te kyk. Dit veroorsaak foute in programmering as jy in ʼn nommer wat as shorttext
in Access gestoor is, hanteer soos ʼn heelgetalwaarde en andersom.
Onthou die primêre sleutel is ʼn unieke sleutel. Die primêre sleutel mag nie leeg wees nie. Daar mag ook nie
twee rekords met die primêre sleutel wees nie.
Gaan deur die rekords in ʼn databasis en vertoon data wat aan ʼn sekere kriteria voldoen
(Vertoon al die kunstenaars se naam en aantal kopieë van die wat minder as 700 verkoop het. Die listbox-
komponent word gebruik)
procedure TfrmMusic.btnLessthan700Click(Sender: TObject);
begin
with dmMusic do
begin
tblMusic.Open;
tblMusic.First;
while not tblMusic.Eof do
begin
if tblMusic[ʼnumberSold'] <700 then
begin
lstLessThan700.Items.Add(tblMusic['Artist']+' '+inttostr(tblMusic[ʼnumberSold']))
end;
tblMusic.Next;
end; // end while
end;// end with
end;

4
Voeg ʼn rekord by waarvan die primêre sleutel outomaties gegeneer word
procedure TfrmDatabasis.btnVoegbyClick(Sender: TObject);
var
iGroot:integer;
begin
with dmGraad11IT do
begin
tblGraad11IT.Open;
tblGraad11IT.First;
iGroot := 0;
while not tblGraad11IT.eof do
begin
if strtoint(tblGraad11IT['Regnr']) >iGroot then
iGroot := strtoint(tblGraad11IT['Regnr']);
tblGraad11IT.Next;
end;
iGroot := iGroot + 1;
tblGraad11IT.Insert;
tblGraad11IT['Regnr'] := inttostr(iGroot);
tblGraad11IT[ʼnaam'] := inputbox('Wat is die naam?','','');
tblGraad11IT['Van'] := inputbox('Wat is die van?','','');
tblGraad11IT.Post;
end;
end;

Verwyder ʼn spesifieke rekord


procedure TfrmDatabasis.btnVerwyderClick(Sender: TObject);
var
sNr:string;
begin
with dmGraad11IT do
begin
tblGraad11IT.Open;
tblGraad11IT.First;
sNr := inputbox('Watter rekord wil jy delete?','Regnr?','');
while not tblGraad11IT.eof do
begin
if tblGraad11IT['Regnr'] = sNr then tblGraad11IT.Delete else
tblGraad11IT.Next;
end;
end;
end;
Dit is goeie gebruik om as ʼn rekord verwyder is, die boodskap te vertoon. Jy kan ook ʼn vra of die gebruiker
seker is, dat die rekord verwyder moet word.

5
Verander ʼn spesifieke rekord
procedure TfrmDatabasis.btnVeranderClick(Sender: TObject);
begin
with dmGraad11IT do
begin
tblGraad11IT.Open;
tblGraad11IT.First;
while not tblGraad11IT.eof do
begin
if (tblGraad11IT['Usenaam'] = '2168073’
then
begin
tblGraad11IT.edit;
tblGraad11IT['Sleutel']:='K';
tblGraad11IT.post;
end;
tblGraad11IT.Next;
end;
end; // end with
end;

Verander al die rekords


(Voeg ʼn ewekansige punt vir elke rekord by.)
procedure TfrmDatabasis.btnPunteClick(Sender: TObject);
var
iPunt:integer;
begin
with dmGraad11IT do
begin
tblGraad11IT.Open;
tblGraad11IT.First;
while not tblGraad11IT.eof do
begin
iPunt := random(100)+1;
tblGraad11IT.Edit;
tblGraad11IT['Punt'] := iPunt;
tblGraad11IT.Post;
tblGraad11IT.Next;
end;
end;
end;

6
Bepaal die gemiddeld
procedure TfrmMusic.btnAverageClick(Sender: TObject);
var
iTotaal:integer;
rGemiddeld:real;
begin
with dmMusic do
begin
tblMusic.Open;
tblMusic.First;
iTotaal := 0;
while not tblMusic.Eof do
begin
iTotaal := iTotaal + tblMusic[ʼnumberSold'];
tblMusic.Next;
end; // end while
rGemiddeld := iTotaal/tblMusic.RecordCount;
edtAverage.Text := floattostrf(rGemiddeld,fffixed,7,2);
end;// end with
end;

Bepaal hoogste waarde


procedure TfrmMusic.btnHighestSalesClick(Sender: TObject);
var
iHoogste:integer;
begin
with dmMusic do
begin
tblMusic.Open;
tblMusic.First;
iHoogste := 0;
while not tblMusic.Eof do
begin
if tblMusic[ʼnumberSold'] > iHoogste then
iHoogste := tblMusic[ʼnumberSold'];
tblMusic.Next;
end; // end while
edtHighest.Text := inttostr(iHoogste);
end;// end with
end;

You might also like