Delphi 2.0

8. óra

Adatbáziskezelés V.

Feladat:

1. a, Keresés indexelt táblában; b, feltételnek megfelelő adatok szűrése; c, keresés index nélküli táblában.

Megoldás: A táblák már létre vannak hozva. Ha hiányzik valamelyik, akkor hozzuk létre. Típus:dBASE IV, és töltsük is ki (Table/Edit Table).

Áruk tábla szerkezete:

Field Name Type Size Dec
ARUKOD N 4  
ARUNEV C 20  
EGYSEGAR N 6 2
AFAKOD N 2  

Index:Arukod

Vevők tábla szerkezete:

Field Name Type Size Dec

Field Name Type Size Dec
VEVOKOD N 4  

VEVONEV

C 25  
IRSZAM N 4  
VAROS C 20  
UTCA C 35  

Index: Vevokod, Vevonev szerint.

Rendelés tábla szerkezete:

Field Name Type Size Dec

Field Name Type Size Dec
RENDKOD N 6  
VEVOKOD N 4  
ARUKOD N 4  
DARAB N 4  

Index: Rendkod szerint.

Hozzunk létre egy adatmodult, ha nem lenne meg a múltkori (File/New Data Module). A Name tulajdonságához írjunk be egy nevet (adatmodul), majd mentsük el abba a könyvtárba, ahova a táblát is mentettük adatok néven. Helyezzünk el rajta a Data Access palettáról 3 Table, 3 Data Source komponenst, majd a jellemzőket az alábbiak szerint állítsuk be:

Komponens Jellemz Érték
Table1 Name tblaruk
  DatabaseName ora5  (vagy annak az alias-nak a neve, amibe létre lett hozva)
  TableName aruk
  Active True (ilyenkor tervezés közben is látszanak az adatok)
  IndexName arukod
DataSource1 Name dsraruk
  DataSet tblaruk
Table2 Name tblvevok
  DatabaseName ora5
  TableName vevok
  Active True
  IndexName vevokod
DataSource2 Name dsrvwvok
  DataSet tblvevok
Table3 Name tblrendeles
  DatabaseName ora5
  TableName rendeles
  Active True
  IndexName rendkod
DataSource3 Name dsrrendeles
  DataSet tblrendeles

1/a. A képernyőn lévő form unit-jában (unit1) biztosítsuk az utat az adatmodul felé:

unit unit1;

...

implementation

{$R *.DFM}

uses adatok;

...

end.

A Data Controls palettáról helyezzünk el 5 db DbEdit-et a vevők adatainak, a Standard palettáról 1 EditBox-ot a keresési feltétel megadásához, 2 db Button-t a kereséshez a vevők táblában és a kilépéshez.

Komponens Jellemzo Érték
DBEdit1 DataSource adatmodul.dsrvevok
  DataField Vevokod
  Text üres
  Enabled false
DBEdit2 DataSource adatmodul.dsrvevok
  DataField Vevonev
  Text üres
  Enabled false
DBEdit3 DataSource adatmodul.dsrvevok
  DataField Irszam
  Text üres
  Enabled false
DBEdit4 DataSource adatmodul.dsrvevok
  DataField Varos
  Text üres
  Enabled false
DBEdit5 DataSource adatmodul.dsrvevok
  DataField Utca
  Text üres
  Enabled false
Edit1 Name Ekeres
  Text üres
Button1 Name BtnKilepes
  Caption ‘Kilépés’
  OnClick eseménye: Close;
Button2 Name Btnkeres
  Caption ‘Keresés’

Button2 OnClick eseménye:

procedure TForm1.btnkeresClick(Sender: TObject);

begin

with adatmodul.tblvevok do

begin

indexFieldnames:='vevonev';

if not FindKey([ekeres.text]) then

showmessage('Nem találtam ilyen nevű vevőt!');

end;

end;

FindKey: Az aktuális index oszlopában (ha összetett az index akkor oszlopaiban) keres rá egy adott rekordra. Ha megtalálta, akkor a rekordmutatót erre a rekordra helyezi. Logikai értéket ad vissza, ami jelzi a keresés sikerességét.

Komponens Jellemzo Érték
Form1 Name frmvevokeres
  Caption ‘Vevő névszerinti keresése’

 

1/b. Kérjünk egy új form-ot (File/New Form) és biztosítsuk az utat az adatmodul felé:

unit unit3;

...

implementation

{$R *.DFM}

uses adatok;

...

end.

Tegyünk ki rá egy Grid-et a Data Controls palettáról, a Standard palettáról 1 EditBox-ot a szűrési feltétel megadásához, 1 gombot a kilépésnek és 1-et a szűrés végrehajtására.

Komponens Jellemzo Érték
DBGrid1 Name Dbgvevok
  DataSource adatmodul.dsrvevok
  Enabled True
Edit1 Name ESzures
  Text üres
Button1 Name BtnSzures
  Caption ‘Szűrés’

Button1 OnClick eseménye:

procedure Tfrmszures.btnszuresClick(Sender: TObject);

begin

with adatmodul.tblvevok do

begin

FilterOptions:=FilterOptions-[foNoPartialCompare]+[foCaseInSensitive];

filter:=ESzures.text;

filtered:=true;

end;

end;

(foNoPartialCompare opciót ha levesszük, akkor használhatjuk a Joker karaktert (*) is a szűrés feltételének megadásánál, foCaseInSensitive opció hozzáadásával a kis és nagy betűk egyezőségének vizsgálatát tíltjuk le.)

Feltétel megadás az EditBox-ban: vevonev=’vevő neve’

Komponens Jellemzo Érték
Button2 Name BtnKilepes
  Caption ‘Kilépés’
  OnClick eseménye: Close;
Form2 Name frmszures
  Caption ‘Vevők szűrése’

 

1/c. Kérjünk egy új form-ot (File/New Form) és biztosítsuk az utat az adatmodul felé:

unit unit4;

...

implementation

{$R *.DFM}

uses adatok;

...

end.

A Data Controls palettáról helyezzünk el 5 db DbEdit-et a vevők adatainak, a Standard palettáról 2 EditBox-ot a keresési feltételek megadásához, 2 db Button-t a kereséshez a vevők táblában és a kilépéshez.

Komponens Jellemzo Érték
DBEdit1 DataSource adatmodul.dsrvevok
DataField Vevokod
Text üres
Enabled false
DBEdit2 DataSource adatmodul.dsrvevok
DataField Vevonev
Text üres
Enabled false
DBEdit3 DataSource adatmodul.dsrvevok
DataField Irszam
Text üres
Enabled false
DBEdit4 DataSource adatmodul.dsrvevok
DataField Varos
Text üres
Enabled false
DBEdit5 DataSource adatmodul.dsrvevok
DataField Utca
Text üres
Enabled false
Edit1 Name Emezo
Text üres
Edit2 Name Ekeres
Text üres
Button1 Name BtnKilepes
Caption ‘Kilépés’
OnClick eseménye: Close;
Button2 Name Btnkeres
Caption ‘Keresés’

Button2 OnClick eseménye:

procedure Tfrmkeres2.btnkeresClick(Sender: TObject);

begin

with adatmodul.tblvevok do

begin

if not Locate(emezo.text,ekeres.text,[]) then

showmessage('Nem találtam ilyen nevű vevőt!');

end;

end;

Locate: index nélküli táblában képes megkeresni az első, feltételnek megfelelt rekordot. Ha van index a keresett mezőnél definiálva, akkor automatikusan felhasználja. Logikai értékként a keresés sikerességét adja vissza. Pl: Locate(‘vevokod’,edit.text,[]);

Komponens Jellemzo Érték
Form3 Name frmvevokeres2
  Caption ‘Keresés rendezettlen táblában’

Kérjünk egy új form-ot (File/New Form) és hozzuk létre rajta az előző ablakokat hívó és az alkalmazást befejező menüpontokat:

Vevő keresés név szerint                     Kilépés

Vevő tábla szűrése

Vevő keresés bármely adata szerint

Állítsuk be az OnClick eseményeket.

frmvevokeres.Showmodal;

frmszures.Showmodal;

frmvevokeres2.Showmodal;

Close;

Adjuk nevet neki a Name tulajdonságának kitöltésével és a címsorába írjunk a Caption használatával.

A Project/Options menüpontban Main form-nak állítsuk be a menüs ablakot és az auto-create forms résznél pedig a legelső helyre húzzuk az adatmodult. (különben nem látja a megjelenítő ablak az adatokat)