Delphi 2.0
6. óra
Adatbáziskezelés III.
Feladat: 3 tábla létrehozása, DbGrid rács, kikeresett mezők használata. Az egyik tábla az árukat, a másik a megrendeléseket tartja nyilván, a harmadik a vevőket. Lekérdezés használata.
Készítsük el a menüből hívható formokat.
Az első form a rendelés adatait mutatja meg, de látható a vevő és az áru neve is a rácsban, mint kikeresett mező.
Megoldás: Indítsuk el a Program Files\Borland\Database Desktop könyvtárból a DBD32 (Database Desktop) programot, aminek segítségével tudunk táblákat létrehozni. Állítsuk be a munkakönyvtárat a leendő adataink könyvtárára a File/Working Directory menüpont segítségével. Az aliases-nél pedig válasszuk ki egy korábban használt álnevet (pl. ora5, vagy amit a multkor használtatok). És OK gomb. A táblák létrehozásához a File/New/Table menüpontra van szükségünk. Válasszuk ki a kívánt tábla típust (dBASE IV). Írjuk be az első mező nevét, a típusát a szóközre kinyíló listából választhatjuk ki, a hosszát kell még megadnunk, a tizedesjegyek számát.
Áruk tábla szerkezete:
Field Name | Type | Size | Dec |
ARUKOD | N | 4 | |
ARUNEV | C | 20 | |
EGYSEGAR | N | 6 | 2 |
AFAKOD | N | 2 |
Indexet állítsuk be a define gomb lenyomásával (ARUKOD). Az indexelni kívánt mezőre kell állni és OK. Ezután már csak a nevet kell megadni ahogyan hivatkozni szeretnénk rá. Ezután Save as... és megadjuk a nevét a táblának: aruk (az alias megadására is figyeljünk!).
A következő két tábla létrehozása ezen módszerrel:
Vevők tábla szerkezete:
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 |
RENDKOD | N | 6 | |
VEVOKOD | N | 4 | |
ARUKOD | N | 4 | |
DARAB | N | 4 |
Index: Rendkod szerint.
Mindegyik táblát nyissuk meg (file/open/table) és a table/edit data menüpont segítségével vigyünk fel összefüggő adatokat (a megrendelésben létező áru- és vevőkód legyen).
Ezután kiléphetünk a Database Desktop-ból.
Hozzunk létre egy adatmodult (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 és 3 Data Source komponenst, majd a jellemzőket az alábbiak szerint állítsuk be:
Komponens | Jellemző | Érték |
Table1 | Name | tblaruk |
DatabaseName | ora5 | |
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 (ilyenkor tervezés közben is látszanak az adatok) | |
IndexName | vevokod | |
DataSource2 | Name | dsrvevok |
DataSet | tblvevok | |
Table3 | Name | tblrendeles |
DatabaseName | ora5 | |
TableName | rendeles | |
Active | True (ilyenkor tervezés közben is látszanak az adatok) | |
IndexName | rendkod | |
DataSource3 | Name | dsrrendeles |
DataSet | tblrendeles |
A form unit-jában (pl. 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 1 db DbGrid-et az adatok megjelenítésére, a Standard palettáról 1 db Button-t a kilépéshez.
Komponens | Jellemző | Érték |
DBGrid1 | Name | DbgRacs |
DataSource | adatmodul.dsrrendeles | |
Enabled | False |
A grid-ben azonnal megjelennek az adatok, mivel a rendelés tábla Activate tulajdonsága True.
Ahhoz, hogy mi határozzuk meg, hogy mely mezők jelenjenek meg, be kell hívnunk a mezőszerkesztőt. Kattintsunk 2x az adatmodul ablak tblrendeles ikonján. A mezőszerkesztő ablak most még üres. A jobb gombra megjelenő gyorsmenüből válasszuk ki az Add fields... -t. Ezzel a paranccsal a táblában létező mezőket olvashatjuk be. Jelöljük ki az összes mezőt és OK. Szeretnénk, ha az árukódja mellett látható lenne az áruk táblában lévő, hozzá tartozó árunév, és a vevőkód mellett a vevő neve. Ehhez az egér jobb gombjának lenyomása után válasszuk a New field... parancsot. A megjelenő ablakban a Name: ARUNEV (a származtatott mező nev), Type: string, Size: 20, Field type: Lookup (másik táblából származtattuk), Key Fields: ARUKOD (kapcsolómező az alaptáblából (rendelés)), DATASET: ARUK (a kereső tábla, amiból szeretnénk az adatokat kapni), Loopup Keys: ARUKOD (a kapcsolómező a keresőtáblából), Result Field: ARUNEV (melyik mező értékét veszi át).
Ahhoz, hogy a vevőnév mező is látható legyen, ugyanezt végig kell csinálnunk a megfelelő mezőkkel. Ehhez az egér jobb gombjával kell kattintanunk a mezőszerkesztő ablakán. Megint New field... parancs. A megjelenő ablakban a Name: VEVONEV, Type: string, Size: 25, Field type: Lookup, Key Fields: VEVOKOD, DATASET: VEVOK, Loopup Keys: VEVOKOD, Result Field: VEVONEV.
A Grid-re 2x klikkelve az oszlopszerkesztő töltődik be, ahol kiválaszthatjuk a megjelenítendő oszlopokat és beállíthatjuk azok tulajdonságait.
Az Add All Fields gombra kattintva az összes mező megjelenik a felette levő ablakban, melyből rendre a Delete gomb segítségével törölhetjük azokat, melyekre nincs szükségünk a rácsban. (pl. arukod, vevokod, stb.) A sorrendjük itt módosítható, ha az új helyére húzzuk a kívánt mező nevét.
Komponens | Jellemző | Érték |
Button1 | Name | BtnKilepes |
Caption | ‘Kilépés’ | |
OnClick eseménye:
Close;
ki lehet tenni egy navigátor gombsort is, amivel a teljes karbantartás megoldható.
Komponens | Jellemző | Érték |
Form1 | Name | frmrendeles |
Caption | ‘Rendelések listája’ |
Kérjünk egy új form-ot (File/New Form):
A form unit-jában (pl. unit3) biztosítsuk az utat az adatmodul felé:
unit unit3;
...
implementation
{$R *.DFM}
uses adatok;
...
end.
Ezután tegyünk egy Query komponenst az adatmodulra:
Komponens | Jellemző | Érték |
Query1 | Name | vevolek |
DatabaseName | ora5 | |
SQL | select * from "vevok.dbf" where vevonev=:vnev |
Aztán egy Datasource komponenst:
Komponens | Jellemző | Érték |
DataSource1 | Name | dsrvevoker |
DataSet | vevolek (query neve, ebből kapja majd az adatokat) |
A formra egy EditBox-ot a keresett név begépelésére
Komponens | Jellemző | Érték |
Edit1 | Name | keresettnev |
Egy gombot a kereses megindítására:
Komponens | Jellemző | Érték |
Button1 | Name | BtnKeres |
Caption | ‘Keresés’ |
OnClick eseménye:
Adatmodul.Vevolek.close; (mindig be kell zárni, mert a következő keresés nem frissítené az értékeket)
Adatmodul.Vevolek.ParambyName('VNEV').Asstring:=Keresettnev.Text;
Adatmodul.Vevolek.prepare;
Adatmodul.Vevolek.open;
És még egy gombot a kilépésre:
Komponens | Jellemző | Érték |
Button2 | Name | BtnKilepes |
Caption | ‘Kilépés’ |
OnClick eseménye:
Close;
Egy Grid-et az eredmény megjelenítésére:
Komponens | Jellemző | Érték |
DBGrid1 | Name | DbgRacs |
DataSource | dsrvevoker | |
Enabled | False |
A formnak állítsukbe a tulajdonságait:
Komponens | Jellemző | Érték |
Form2 | Name | frmvevoadat |
Caption | ‘Rendelések listája’ |
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:
Rendelések Vevő adatai Kilépés
Állítsuk be az OnClick eseményeket az egyes menüpontokhoz.
frmrendeles.Showmodal;
frmvevoadat.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)