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)