Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Adatbázis-kezelés DELPHI-ben
Készítette:Pető László
2
Adatbázisfájl létrehozása
3
Adatbázisfájl létrehozása
4
Adatbázis típus kiválasztása
5
Mezőtípusok
6
A szerkezet begépelése
7
A szerkezet mentése
8
Adatbázisfájl megnyitása
9
Az adatbázis feltöltése
10
Az adatok bevitele
11
A szerkezet megtekintése
Table > Info Structure... A szerkezet módosítása Table > Restructure...
12
Rekord beszúrása Record > Insert Rekord törlése Record > Delete
13
Lekérdezések SQL-ben SELECT [Distinct | All] [* | <érték1>[,<érték2>,…,<értékn>]] FROM <táblahivatkozás1>[<táblahivatkozás2,…, <táblahivatkozásn>] [WHERE <keresési feltétel>][GROUP BY <mező1> [Collate egybevetés],…, <mezőn> [Collate egybevetés]] [Having <keresési feltétel>] [Union <keresési feltétel] [Order by <sorrend_lista]
14
Magyarázat Distinct: az azonos tartalmú mezőket csak egyszer jeleníti meg All: minden adatot figyelembe vesz *: minden mező megjelenítése <érték>: mezők kiválasztása FROM: melyik táblából vegyük az értéket. Több tábla is megadható
15
Magyarázat Where: szűrési feltétel Group by: csoportokat képez
Having: a csoportokra vonatkozó szűrési feltétel Union: egy táblába egyesít Order by : a felsorolt oszlopoknak megfelelően rendez
16
SQL lekérdezés létrehozása
17
Lekérdezés Kérdezzük le azokat a tanulókat, akiknek 3 testvérük van!
SELECT * from tanulok where testver=3 Futtatás: SQL > Run SQL Mentés: File > Save As Bezárás: File > Close
18
Lekérdezések Kérdezzük le azon tanulókat, akiknek van testvérük!
SELECT * FROM tanulok WHERE testver>0 Kérdezzük le azon tanulók nevét, testvéreinek számát, és hogy kollégisták-e, akik kollégisták, és az átlaguk 4,5-nél rosszabb! SELECT nev,testver,kollegium FROM tanulok WHERE kollegium=true AND atlag<4.5
19
Lekérdezések Kérdezzük le azon tanulók nevét, akik nem kollégisták!
SELECT nev FROM tanulok WHERE kollegium=false
20
Feladat
21
Feladat
22
Feladat Kérdezzük le az összes dolgozó nevét és havi alapbérét
SELECT nev,alapber FROM dolgozok Kérdezzük le a dolgozók nevét és éves alapbérét! SELECT nev,alapber*12 FROM dolgozok
23
Feladat Kérdezzük le a dolgozók nevét és havi járandóságát!
SELECT nev,alapber+potlek-levonas FROM dolgozok Kérdezzük le az egyetemet végzett vezető beosztásúak éves járandóságát! SELECT nev,(alapber+potlek-levonas)*12 FROM tanulok WHERE egyetem=true AND vezeto=true
24
Feladat Kérdezzük le azon dolgozók nevét és havi alapbérét, akik havi alapbére Ft-nál kevesebb! SELECT nev,alapber FROM dolgozok WHERE alapber<150000
25
Feladat Kérdezzük le azon dolgozók nevét, akik nem vezető beosztásúak, de havi alapbérük meghaladja a Ft-ot! SELECT nev FROM dolgozok WHERE vezeto=false AND alapber>160000
26
Feladat Kérdezzük le azon dolgozók nevét és havi alapbérét, akik betöltötték 23. Életévüket akkor, amikor munkába álltak! SELECT nev,alapber FROM dolgozok WHERE (munka_kezd-szul_datum)/365 >23
27
SUM Kérdezzük le a dolgozók számára az egész év folyamán kifizetendő teljes pénzösszeget! SELECT SUM(alapber+potlek-levonas)*12 FROM dolgozok
28
AVG Kérdezzük le a dolgozók éves járandóságának átlagát!
SELECT AVG(alapber+potlek-levonas)*12 FROM dolgozok
29
További SQL függvények
MIN MAX COUNT
30
Indexelés TABLE > RESTRUCTURE... SAVE gomb Eredmény: tanulok.mdx
31
Adatbeviteli űrlap készítése
32
Adatbeviteli űrlap készítése
File > New… > Data Module DataModule2.Name:=Adatmodul Mentsünk mindent egy új könyvtárba A tanulókat tartalmazó táblát indexestül helyezzük ebbe a könyvtárba DataSource1.DataSet:=Table1 Table1.TableName:=tanulok.dbf Table1.Active:=true
33
Adatbeviteli űrlap készítése
A magyar feliratokhoz a Caption megváltoztatása szükséges!
34
Adatbeviteli űrlap Kattintsunk duplán a Table1 adatmodulbeli ikonján!
A megjelenő fehér ablakra jobb egérgombbal kattintva válasszuk ki a szükséges mezőket! A mezőket húzzuk át a Form megfelelő területére! Engedélyezzük az adatmodul használatát! A felvetődő kérdésre adjunk igenlő választ! Helyezzünk el egy DBNavigatort! DBNavigator.Align:=alBottom DataSource:=Adatmodul.DataSource1
35
Adatbeviteli űrlap mentése
36
Az adatbeviteli űrlap fordítása
A nyomógomb hatására lefut a program (interpreter), de ezzel párhuzamosan elkészül egy exe állomány (compiler), ami a Delphi nélkül is futtatható. Érdemes így is kipróbálni. EZ AZT JELENTI, HOGY AZ ADATBEVITELHEZ ELEGENDŐ AZ ADATBÁZIS ÉS AZ ELKÉSZÍTETT PROGRAM, NEM KELL A DELPHI! C:\Könyvtárnév\fáljnév.EXE
37
Lekérdezés a programban
Készítsünk egy olyan programot, amely adattáblában mutatja azon tanulókat, akiknek 3 testvérük van!
38
Lekérdezés a programban
Készítsünk egy külön könyvtárat Helyezzük el benne a tanulók táblát indexestül! Kérjünk a projecthez egy adatmodult! Mentsünk mindent! A unit1 implementation részébe írjuk be: Uses unit2;
39
Lekérdezés Az Adatmodulon helyezzünk el egy DataSource és egy Query komponenst! DataSource1.DataSet:=Query1 Query1.SQL-hez írjuk be a megfelelő kérdést Query1.Active:=True (Hiba esetén elrontottuk a kérdést)
40
Lekérdezés a programban
41
Lekérdezés a programban
DbGrid1.DataSource:=DataModule2.DataSource1 DbGrid1.Align:=alClient
42
Lekérdezés mentése
43
Lekérdezés fordítása A program futtatás közben lefordítódik fáljnév.exe néven, amely a DELPHI nélkül is futtatható.
44
Jelentés készítése Készítsünk jelentést a hármasnál jobb átlagú tanulók nevéről, születési helyéről és átlagáról!
45
Jelentés készítése QRBand1.BandType:=rbTitle (Címsor lesz)
QRband1.BandType:=rbDetail (Adatait az adatbázisból veszi)
46
Jelentés Készítsünk egy külön könyvtárat, másoljuk bele a tanulókat tartalmazó adatbázist indexesetül! Kérjünk egy adatmodult, majd mentsünk mindent az adott könyvtárba! Az implementation részbe írjuk be: Uses unit2;
47
Jelentés készítése Helyezzünk el egy DataSource és egy Query komponenst az adatmodulban! Adjuk meg az SQL parancsot Kapcsoljuk össze a két komponenst! QuickRep1.Dataset:=DataModule2.Query1
48
Jelentés készítése
49
Jelentés készítése QRLabel komponensek QRDBText komponensek
Dataset:=DataModule2. Query1 Datafield:= a megjelení- tendő mező neve A szöveg formátuma a komponensek Font tulaj- donságánál állíthatók. Jobb gomb > Preview : A nyomtatási kép megtekinthető
50
Jelentés készítése
51
Jelentés mentése, futtatása
Készítsünk egy nyomógombot, melyre kattintva a következő történjen: Quickrep1.Preview; Hasonlóan történik mentésnél a névadás. A futtatásnál szintén létrejön egy exe állomány.
52
A futó jelentés
53
Grafikon Az előző lekérdezés eredményét ábrázoljuk grafikonon!
54
Grafikon Készítsünk egy külön könyvtárat, másoljuk bele a tanulókat tartalmazó adatbázist indexesetül! Kérjünk egy adatmodult, majd mentsünk mindent az adott könyvtárba! Az implementation részbe írjuk be: Uses unit2;
55
Grafikon Helyezzünk el egy DataSource és egy Query komponenst az adatmodulban! Adjuk meg az SQL parancsot Kapcsoljuk össze a két komponenst!
56
Grafikon
57
Grafikon Align:= Alclient Dupla kattintá!s!
58
Grafikon
59
Grafikon
60
Grafikon
61
Grafikon
62
Grafikon
63
Adattáblák összekapcsolása
Készítsünk egy ISMEROS és egy POSTA adatbázist, amelyekben az ISMEROS a vezér, a POSTA a szolga, a kapcsolókifejezés az irányítószám. A szolgát semmiképp ne felejtsük el indexelni a kapcsolókifejezés szerint
64
Adatbázisok
65
Adatbázisok összekapcsolása
66
Az összekapcsolás folyamata
Legyen a szolga az aktív MasterSource:=dsismeros + IndexName:=szam Master Field beállítása: Mentés és futtatás a megszokott módon.
67
Projekt készítése Készítsünk adatbáziskezelő programot egy cég ügyfeleinek, az ehhez kapcsolódó be- és kifizetések nyilvántartására! Táblák: UGYFELEK BEFIZETESEK KIFIZETESEK
68
UGYFELEK UGYFELKOD UGYFELNEV CIM TELEFON
69
BEFIZETESEK UGYFELKOD DATUM OSSZEG
70
KIFIZETESEK UGYFELKOD DATUM OSSZEG
71
Indextáblák UGYFELEK UGYFELKOD NEV BEFIZETESEK DATUM KIFIZETESEK
72
Jelentések Lista a befizetésekről Lista a kifizetésekről
ugyfelkod, ugyfelnev, datum, osszeg (ugyfelkod szerint rendezve, ugyfelkod szerinti csoportosításban, csoportösszeg és mindösszesen képzésével) Lista a kifizetésekről a fentihez hasonló paraméterekkel
73
Jelentések Lista az ügyfelekről
minden adatot megjelenítve az ügyfél törzsadataiból, ugyfelkod sszerint rendezve
74
Adatbeviteli űrlapok Minden adattáblához külön-külön. A be- és kifizetéseknél jelenjen meg az ügyfél neve is. (DBLookUpComboBox használata)
75
Lekérdezés Szerepeljen rajta minden ügyfél, a kódja , a kód szerinti rendezésben. Szerepeljen még az összes, a legnagyobb és a legkisebb befizetés.
76
Menü Táblázatok Jelentések Lekérdezés Kilépés Ügyfél Befizetések
Kifizetések Jelentések Jelentés az ügyfelekről Jelentés a befizetésekről Jelentés a kifizetésekről Lekérdezés Kilépés
77
1. Adattáblák szerkezetének és indexeinek létrehozása
78
2. Projekt főablak a menüvel
79
Kilépés <Form1neve>.close;
80
2. Képernyők létrehozása
Egy-egy új form segítségével
81
2. Képernyők létrehozása
A menüből a <Formnnév>.showmodal; paranccsal hívhatók elő. A befizetéseknél és kifizetéseknél az ügyfél adattáblát is el kell helyezni, a megfelelő reláció kialakításával lehet csak az ügyfelek nevét elhelyezni!!! Az ügyfélnév mező readonly tulajdonsága legyen ezeken true.
82
3. Jelentés az ügyfelekről
SELECT * FROM ugyfelek ORDER BY 1 Nyomtatási kép nyomógomb!!!
83
4. Jelentés a befizetésekről
SELECT ugyfelkod,ugyfelnev,datum,osszeg, sum(osszeg) FROM befizetesek,ugyfelek GROUP BY ugyfelkod A kiíratáshoz a csoportosítás miatt ne Detail QRBrand-et, hanem SubDetail-t kell használni!
84
5. Jelentés a kifizetésekről
Hasonlóan a befizetésekhez.
85
6. A lekérdezés létrehozása
select ugyfelkod, ugyfelnev,sum(osszeg), min(osszeg),max(osszeg) from ugyfelek,befizetesek group by ugyfelkod, ugyfelnev
86
Befejezés A program exe fájlba is lefordítódik.
Az elkészített adatbázis-kezelő program Delphi nélkül is működik.
87
Feladat Hallgatói nyilvántartás készítése.
Mezők: Név , Születési dátum, Szem.ig. szám, tankör, ösztöndíj. Készítsünk egy menüből hívható formot, amin lapozgatni lehet az adatok között.
88
Megoldás Válasszuk ki a Database menüpontból az Explore pontot.
Erre azért van szükség, hogy egy álnevet (alias) hozzunk létre. Kattintsunk a Database objektumra és nyomjuk meg az egér jobb gombját. Válasszuk ki a New mepüpontot. Válasszuk ki az alias típusát (STANDARD) és nyomjuk meg az ok gombot.
89
Megoldás Írjuk be az új álnevet (ora4)!
A Definition részben adjuk meg azt a könyvtárat, amire az alias mutat (path), majd állítsuk be a Default Drivert (DBASE). Kattintsuk a bal oldalon a Database objektumra, majd nyomjuk meg az egér jobb gombját és az apply menüpontra kattintsunk, hogy a beállításokat rögzítse. Ezután zárjuk be a Database Explorer-t.
90
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értehozni. Állítsuk be a munkakönyvtárat a leendő adataink könyvtárára a File/Working Directory menüpont segytségével. Az aliases-nél pedig válasszuk ki az előbb beállított álnevünket (ora4).
91
Megoldás É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 tipusá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.
92
Megoldás Field Name Type Size Dec NEV C 25 SZULDAT D SZEMIGSZAM C 8
TANKOR C 10 OSZTONDIJ N 4
93
Megoldás Indexet állítsuk be a define gomb lenyomásával.
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: hallgatók (az alias megadására is figyeljünk!). Ezután kiléphetünk a Database Desktop-ból.
94
Megoldás 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 egy Table és egy Data Source komponenst, majd a jellemzőket az alábbiak szerint állítsuk be:
95
Megoldás Komponens Jellemző Érték Table1 Name tblhallgatok
DatabaseName ora4 (az az álnév, amit létrehoztunk) TableName hallgatók Active True (ilyenkor tervezés közben is látszanak az adatok) IndexName Nev (ami szerint rendezve szeretnénk látni az adatokat) DataSource1 Name dsrhallgatok DataSet tblhallgatok
96
Megoldás A formunk unit-jában biztosítsuk az utat az adatmodul felé:
unit unit1; ... implementation {$R *.DFM} uses adatmodul; end.
97
Megoldás A DataControls palettáról helyezzünk el 5 db DBEdit-et az adatok megjelenítésére, egy DBNavigator-t a karbantartásra, 5 db Label-t a magyarázószövegnek és egy Button-t a kilépéshez.
98
Megoldás Komponens Jellemző Érték DBEdit1 Name eNev
DataSource adatmodul.dsrhallgatok DataField Nev DBEdit2 Name eSzuldat DataField Szuldat DBEdit3 Name eSzemigszam DataField Szemigszam DBEdit4 Name eTankor DataField Tankor DBEdit5 Name eOsztondij DataField Osztondij DBNavigator Name Navigator Button1 Name BtnKilepes Caption ‘Kilépés’ OnClick Close; Form1 Name frmkarbantart Caption ‘Hallgatók adatainak karbantartása’
99
Megoldás Kérjünk egy új form-ot (File/New Form) és hozzuk létre rajta az előző ablakot hívó és az alkalmazást befejező menüpontokat: Karbantart Kilépés Állítsuk be az OnClick eseményeket. procedure TForm1.Karbantarts1Click(Sender: TObject); begin frmkarbantart.Showmodal; end; procedure TForm1.Kilps1Click(Sender: TObject); Close;
100
Megoldás 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)
101
Feladat Hallgatói nyilvántartás karbantartása nyomógombok segítségével. Mezők: Név , Születési dátum, Szem.ig. szám, tankör, ösztöndíj. Készítsünk egy menüből hívható formot, amin lapozgatni lehet az adatok között.
102
Megoldás Válasszuk ki a Database menüpontból az Explore pontot.
Erre azért van szükség, hogy egy álnevet (alias) hozzunk létre. Kattintsunk a Database objektumra és nyomjuk meg az egér jobb gombját. Válasszuk ki a New menüpontot. Válasszuk ki az alias típusát (STANDARD) és nyomjuk meg az ok gombot.
103
Megoldás Írjuk be az új álnevet (ora5)!
A Definition részben adjuk meg azt a könyvtárat, amire az alias mutat (path), majd állítsuk be a Default Drivert (DBASE). Kattintsuk a bal oldalon a Database objektumra, majd nyomjuk meg az egér jobb gombját és az apply menüpontra kattintsunk, hogy a beállításokat rögzítse. Ezután zárjuk be a Database Explorer-t.
104
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értehozni. Állítsuk be a munkakönyvtárat a leendő adataink könyvtárára a File/Working Directory menüpont segytségével. Az aliases-nél pedig válasszuk ki az előbb beállított álvenünket (ora5). És OK gomb.
105
Megoldás 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 tipusá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.
106
Megoldás Field Name Type Size Dec NEV C 25 SZULDAT D SZEMIGSZAM C 8
TANKOR C 10 OSZTONDIJ N 4
107
Megoldás Indexet állítsuk be a define gomb lenyomásával (NEV, TANKOR).
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: hallgatók (az alias megadására is figyeljünk!). Ezután kiléphetünk a Database Desktop-ból.
108
Megoldás 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 egy Table és egy Data Source komponenst, majd a jellemzőket az alábbiak szerint állítsuk be:
109
Megoldás Komponens Jellemző Érték Table1 Name tblhallgatok
DatabaseName ora5 (az az álnév, amit létrehoztunk) TableName hallgatók Active True (ilyenkor tervezés közben is látszanak az adatok) IndexName Nev (ami szerint rendezve szeretnénk látni az adatokat) DataSource1 Name dsrhallgatok DataSet tblhallgatok
110
Megoldás A form unit-jában (unit1) biztosítsuk az utat az adatmodul felé: unit unit1; ... implementation {$R *.DFM} uses adatok; end.
111
Megoldás A Data Controls palettáról helyezzünk el 5 db DbEdit-et az adatok megjelenítésére, a Standard palettáról 5 db Label-t a magyarázószövegnek, egy ComboBox-ot az index kiválasztásához, 7 db Button-t és 2 db BitButtont az Additional palettáról.
112
Megoldás Komponens Jellemző Érték DBEdit1 Name eNev
DataSource adatmodul.dsrhallgatok DataField Nev Enabled False DBEdit2 Name eSzuldat DataField Szuldat DBEdit3 Name eSzemigszam DataField Szemigszam DBEdit4 Name eTankor DataField Tankor DBEdit5 Name eOsztondij DataField Osztondij
113
Megoldás ComboBox Name Cbindex Style DropDownList Items Név szerint
Tankör szerint OnChange eseménye: procedure TForm1.CBindexChange(Sender: TObject); begin if CbIndex.Itemindex=0 then adatmodul.tblhallgatok.IndexFieldNames:='nev' else adatmodul.tblhallgatok.IndexFieldNames:='tankor'; end;
114
Megoldás Button1 Name BtnElso Caption << Első OnClick eseménye:
procedure TForm1.BtnelsoClick(Sender: TObject); begin with adatmodul.tblhallgatok do Begin first; end; If BtnUtolso.Enabled=false then BtnUtolso.Enabled:=true; BtnKovetkezo.Enabled:=true; BtnElso.enabled:=false; BtnElozo.enabled:=false;
115
Megoldás Button2 Name BtnElozo Caption < Előző OnClick eseménye:
procedure TForm1.BtnelozoClick(Sender: TObject); begin with adatmodul.tblhallgatok do Begin prior; if bof then BtnElso.enabled:=false; BtnElozo.enabled:=false; end; If BtnUtolso.Enabled=false then BtnUtolso.Enabled:=true; BtnKovetkezo.Enabled:=true;
116
Megoldás Button3 Name Btnkovetkezo Caption Következő >
OnClick eseménye: procedure TForm1.BtnkovetkezoClick(Sender: TObject); begin with adatmodul.tblhallgatok do Begin next; If Eof then BtnUtolso.Enabled:=false; BtnKovetkezo.Enabled:=false; End; end; if BtnElso.enabled=false then BtnElso.enabled:=true; BtnElozo.enabled:=true;
117
Megoldás Button4 Name BtnUtolso Caption Utolsó >>
OnClick eseménye: procedure TForm1.BtnutolsoClick(Sender: TObject); begin with adatmodul.tblhallgatok do Begin last; end; btnUtolso.Enabled:=false; BtnKovetkezo.Enabled:=false; if BtnElso.enabled=false then BtnElso.enabled:=true; BtnElozo.enabled:=true;
118
Megoldás Button5 Name BtnFelvesz Caption Felvesz
OnClick eseménye:procedure TForm1.BtnFelveszClick(Sender: TObject); begin with adatmodul.tblhallgatok do insert; end; BtnElso.enabled:=false; BtnElozo.enabled:=false; BtnUtolso.Enabled:=false; BtnKovetkezo.Enabled:=false; BtnTorol.Enabled:=false; BtnKilepes.Enabled:=false; btnOk.Enabled:=true; BtnCancel.Enabled:=true; Enev.Enabled:=true; Etankor.Enabled:=true; Eszemigszam.Enabled:=true; Eszuldat.Enabled:=true; Eosztondij.Enabled:=true;
119
Megoldás Button6 Name BtnTorol Caption Töröl OnClick eseménye:
procedure TForm1.BtnTorolClick(Sender: TObject); begin with adatmodul.tblhallgatok do delete; end;
120
BitBtn1 Name BtnOk Kind BkOk Enabled False OnClick eseménye: procedure TForm1.BtnOkClick(Sender: TObject); begin with adatmodul.tblhallgatok do FieldByName('Nev').asString:=Enev.text; FieldByName('Tankor').asString:=Etankor.text; FieldByName('Szuldat').asDateTime:=StrToDate(Eszuldat.text); FieldByName('Osztondij').asInteger:=StrToInt(Eosztondij.text); FieldByName('Szemigszam').asString:=Eszemigszam.text; post; end; BtnElso.enabled:=true; BtnElozo.enabled:=true; BtnUtolso.Enabled:=true; BtnKovetkezo.Enabled:=true; BtnTorol.Enabled:=true; BtnKilepes.Enabled:=true; btnOk.Enabled:=false; BtnCancel.Enabled:=false; Enev.Enabled:=false; Etankor.Enabled:=false; Eszemigszam.Enabled:=false; Eszuldat.Enabled:=false; Eosztondij.Enabled:=false;
121
BitBtn2 Name BtnCancel Kind BkCancel Enabled False OnClick eseménye: procedure TForm1.BtnCancelClick(Sender: TObject); begin with adatmodul.tblhallgatok do delete; end; BtnElso.enabled:=true; BtnElozo.enabled:=true; BtnUtolso.Enabled:=true; BtnKovetkezo.Enabled:=true; BtnTorol.Enabled:=true; BtnKilepes.Enabled:=true; btnOk.Enabled:=false; BtnCancel.Enabled:=false; Enev.Enabled:=false; Etankor.Enabled:=false; Eszemigszam.Enabled:=false; Eszuldat.Enabled:=false; Eosztondij.Enabled:=false;
122
Megoldás Button7 Name BtnKilepes Caption ‘Kilépés’ OnClick eseménye:
Close; Form1 Name frmkarbantart Caption ‘Hallgatók adatainak karbantartása’
123
Megoldás Kérjünk egy új form-ot (File/New Form) és hozzuk létre rajta az előző ablakot hívó és az alkalmazást befejező menüpontokat: Karbantart Kilépés Állítsuk be az OnClick eseményeket. procedure TForm1.Karbantarts1Click(Sender: TObject); begin frmkarbantart.Showmodal; end; procedure TForm1.Kilps1Click(Sender: TObject); Close;
124
Megoldás 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)
125
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ő
126
Megoldás Hozzunk létre egy új aliast ora6
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értehozni. Á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 (ora5). És OK gomb.
127
Megoldás 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 tipusát a szóközre kinyíló listából választhatjuk ki, a hosszát kell még megadnunk, s a tizedesjegyek számát.
128
Megoldás Áruk tábla szerkezete: Field Name Type Size Dec ARUKOD N 4
ARUNEV C 20 EGYSEGAR N 6 2 AFAKOD N 2
129
Megoldás 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:
130
Megoldás 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.
131
Megoldás 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.
132
Megoldás 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:
133
Megoldás Komponens Jellemző Érték Table1 Name tblaruk
DatabaseName ora6 TableName aruk Active True (ilyenkor tervezés közben is látszanak az adatok) IndexName arukod DataSource1 Name dsraruk DataSet tblaruk
134
Megoldás Table2 Name tblvevok DatabaseName ora6 TableName vevok
Active True (ilyenkor tervezés közben is látszanak az adatok) IndexName vevokod DataSource2 Name dsrvwvok DataSet tblvevok
135
Megoldás Table3 Name tblrendeles DatabaseName ora6 TableName rendeles
Active True (ilyenkor tervezés közben is látszanak az adatok) IndexName rendkod DataSource3 Name dsrrendeles DataSet tblrendeles
136
Megoldás A form unit-jában (unit1) biztosítsuk az utat az adatmodul felé: unit unit1; ... implementation {$R *.DFM} uses adatok; end.
137
Megoldás 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
138
Megoldás 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.
139
Megoldás 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).
140
Megoldás 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.
141
Megoldás 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.
142
Megoldás 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ó. Form1 Name frmkarbantart Caption ‘Rendelések listája’
143
Megoldás Kérjünk egy új form-ot (File/New Form):
A form unit-jában (unit3) biztosítsuk az utat az adatmodul felé: unit unit3; ... implementation {$R *.DFM} uses adatok; end.
144
Megoldás Ezután tegyünk egy Query komponenst az adatmodulra:
Query1 Name vevolek DatabaseName ora6 SQL select * from "vevok.dbf" where vevonev=:vnev Aztán egy Datasource komponenst: DataSource1 Name dsrvevoker DataSet vevolek (query neve, ebből kapja majd az adatokat)
145
Megoldás A formra egy EditBox-ot a keresett név begépelésére
Edit1 Name keresettnev Egy gombot a kereses megindítására: 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;
146
Megoldás És egyet a kilépésre: Button2 Name BtnKilepes
Caption ‘Kilépés’ OnClick eseménye: Close; Egy Grid-et az eredmény megjelenítésére: DBGrid1 Name DbgRacs DataSource dsrvevoker Enabled False
147
Megoldás 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. frmrendeles.Showmodal; frmvevoadat.Showmodal; Close;
148
Megoldás 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)
149
Feladat 1. Az adott vevő rendelései legyenek láthatók egy gridben, mely tartalma frissítődjön a vevők táblában való lépegetés alkalmával. 2. Egy rendelés Gridben legyen látható az áru, vevő neve mellett az érték is ,ami a darab*egységár képlet alapján számítható ki (Kikeresett és számított mezők használata) 3. Egy adott dátumra vonatkozó rendeléseket kell egy grid-ben megjelenítenünk. A dátumot kérjük be, és ellenőrizzük le, hogy jó formátumban gépelték-e be. Készítsük el a menüből hívható formokat.
150
Megoldás A táblák már létre vannak hozva.
Ha hiányzik valamelyik, akkor hozzuk létre. Típus:dBASE IV. A rendelés táblát bővítsük ki egy DATUM dátum típusú mezővel (Database Desktop-ban a Table/Restructure menüponttal lehetséges) és töltsük is ki (Table/Edit Table).
151
Megoldás Áruk tábla szerkezete: Field Name Type Size Dec ARUKOD N 4
ARUNEV C 20 EGYSEGAR N 6 2 AFAKOD N 2 Index:Arukod
152
Megoldás 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.
153
Megoldás Rendelés tábla szerkezete: Field Name Type Size Dec
RENDKOD N 6 VEVOKOD N 4 ARUKOD N 4 DARAB N 4 DATUM D 8 Index: Rendkod szerint.
154
Megoldás 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 adatok2 néven. Helyezzünk el rajta a Data Access palettáról 3 Table, 4 Data Source és 1 Query komponenst, majd a jellemzőket az alábbiak szerint állítsuk be:
155
Megoldás Komponens Jellemző Érték Table1 Name tblaruk
DatabaseName ora6 TableName aruk Active True (ilyenkor tervezés közben is látszanak az adatok) IndexName arukod DataSource1 Name dsraruk DataSet tblaruk
156
Megoldás Table2 Name tblvevok DatabaseName ora6 TableName vevok
Active True IndexName vevokod DataSource2 Name dsrvevok DataSet tblvevok
157
Megoldás Table3 Name tblrendeles DatabaseName ora6 TableName rendeles
Active True IndexName rendkod DataSource3 Name dsrrendeles DataSet tblrendeles
158
Megoldás Query1 Name vevorend DatabaseName ora6
SQL select * from rendeles where vevokod=:vkod (*azokat vegye ki, ahol a rendelésbeli vevőkód megegyezik a vevők táblában éppen aktuális rekord vevőkódjával*) DataSource4 Name dsrvevorend DataSet vevorend (query neve, ebből kapja majd az adatokat)
159
Megoldás 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.
160
Megoldás A Data Controls palettáról helyezzünk el 5 db DbEdit-et a vevők adatainak, 1 db DbGrid-et az rendelés adatainak megjelenítésére, a Standard palettáról 3 db Button-t a a lépégetéshez a vevők táblában és a kilépéshez. Komponens Jellemző Érték DBEdit1 DataSource adatmodul.dsrvevok DataField Vevokod
161
Megoldás OnChange eseménye:
procedure Tfrmvevorend.DBEdit1Change(Sender: TObject); begin adatmodul. vevorend.close; adatmodul. vevorend.parambyname('vkod').asInteger:=StrtoInt(dbedit1.text); adatmodul. vevorend.prepare; adatmodul. vevorend.open; end;
162
Megoldás DBEdit2 DataSource adatmodul.dsrvevok DataField Vevonev
DataField Irszam DBEdit4 DataSource adatmodul.dsrvevok DataField Varos DBEdit5 DataSource adatmodul.dsrvevok DataField Utca
163
Megoldás DBGrid1 Name DbgRendeles DataSource adatmodul.dsrvevorend
Enabled True Button1 Name BtnKilepes Caption ‘Kilépés’ OnClick eseménye: Close;
164
Megoldás Button2 Name BtnElozo Caption ‘Előző’ OnClick eseménye:
procedure TForm1.BtnelozoClick(Sender: TObject); begin with adatmodul.tblvevok do Begin prior; if bof then BtnElozo.enabled:=false; end; If BtnKovetkezo.Enabled=false then BtnKovetkezo.Enabled:=true;
165
Megoldás Button3 Name BtnKovetkezo Caption ‘Következő’
OnClick eseménye: procedure TForm1.BtnkovetkezoClick(Sender: TObject); begin with adatmodul.tblvevok do Begin next; If Eof then BtnKovetkezo.Enabled:=false; End; end; if BtnElozo.enabled=false then BtnElozo.enabled:=true;
166
Megoldás Form1 Name frmvevorend Caption ‘Vevő rendelései’
2. 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.
167
Megoldás Tegyünk ki rá egy Grid-et a Data Controls palettáról és egy gombot a Standard palettáról a kilépésnek. DBGrid1 Name Dbgrendel DataSource adatmodul.dsrrendeles Enabled True
168
Megoldás 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.
169
Megoldás 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).
170
Megoldás 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.
171
Megoldás Most már csak a számított mező van hátra, ami a darab és az egységár szorzatát adja. Ehhez az egér jobb gombjával kell kattintanunk a mezőszerkesztő ablakán. Megint New field... parancs. A megjelenő ablakban a Name: AR, Type: Currency, Size: Nincs kitöltve, Field type: Calculated,
172
Megoldás Az ar számított mező értékét a rendelés tábla OnCalcFields metódusában kell kiszámolni a következőképpen: procedure Tadatmodul.tblrendelesCalcFields(DataSet: TDataSet); var egysar:variant; begin with dataset do egysar:=adatmodul.tblaruk.lookup('arukod', fieldbyname('arukod').value, 'egysegar'); if not VarIsNull(egysar) then fieldbyname('ar').value:=fieldbyname('darab').value*egysar; end;
173
Megoldás Az OnCalcFields metódus minden egyes megjelenítendő rekord esetén meghívódik. A lookup metódus megkeresi az első feltételnek megfelelő rekordot és annak megadott mezőjének értékével tér vissza. Lookup(‘az mező, amiben keresünk’, ‘az érték, amit keresünk’, ‘a mező, melynek értéke érdekel’). Az eredmény variant típusú. Ezért meg kell hívni az adatmodulban a variants unitot.
174
Megoldás 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.
175
Megoldás A kilépés gombjáról se feledkezzetek meg!!!
Form2 Name frmrendeles Caption ‘Rendelések listája’
176
Megoldás Az adatmodulra tegyünk ki egy Query-t és egy Datasource-t.
Query1 Name renddatum DatabaseName ora6 SQL select * from rendeles where datum=:renddat DataSource1 Name dsrrenddatum DataSet renddatum (query neve, ebből kapja majd az adatokat)
177
Megoldás Kérjünk egy új form-ot (File/New Form) és biztosítsuk az utat az adatmodul felé: unit unit4; ... implementation {$R *.DFM} uses adatok2; end.
178
Megoldás Tegyünk ki rá egy Grid-et a Data Controls palettáról, 1 EditBox-ot a dátumnak, 2 gombot a kigyűjtésnek és a kilépésnek a Standard palettáról. DBGrid1 Name Dbgrenddatum DataSource adatmodul.dsrrenddatum Enabled True
179
Megoldás A Grid-en 2x kattintva beállíthajuk, hogy mely oszlopokat kívánjuk megjeleníteni. (Ezt mindenki a saját elképzelése szerint tegye meg). Edit1 Name Edatum Text üres Button1 Name BtnKigyujt Caption Kigyűjt
180
Megoldás OnClick eseménye:
procedure TFrmrenddatum.btnkigyujtClick(Sender: TObject); begin with adatmodul.renddatum do Try close; parambyname('renddat').AsDate:=StrToDate(EDatum.text); prepare; open; Except on EConvertError do ShowMessage('A dátum formátuma nem megfelelő!'+#13#10+ 'Például: '+DateToStr(Date)); end; End;
181
Megoldás A Try után beírt utasításokat hajtja végre.
Ha valami miatt nem sikerül, akkor az Except részben megnézi a Dephi, hogy az a jellegű hiba le van-e kezelve (pl. EConvertError konverziós hiba). Ha igen, akkor végrehajtódnak az ott megadott utasítások, ha nem, akkor a saját kivételkezelője fut le a Deplhi-nek. Ahhoz, hogy a kivételkezelő lefusson, és a program ne álljon le, a Tools/Options/Preferences ablakban a Break on exception-nak nem szabad kijelölve lennie.
182
Megoldás kilépés gomb... Form1 Name frmrenddatum
Caption ‘Adott dátumú megrendelések’
183
Megoldás 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ő rendelései|Rendelések listája|Kilépés Adott dátumú megrendelések Rendelések számított mezővel
184
Megoldás Állítsuk be az OnClick eseményeket. frmrendeles.Showmodal;
frmvevorend.Showmodal; frmrenddatum.Showmodal; Close;
185
Megoldás 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)
186
Feladat 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.
187
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).
188
Megoldás Áruk tábla szerkezete: Field Name Type Size Dec ARUKOD N 4
ARUNEV C 20 EGYSEGAR N 6 2 AFAKOD N 2 Index:Arukod
189
Megoldás 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.
190
Megoldás Rendelés tábla szerkezete: Field Name Type Size Dec
RENDKOD N 6 VEVOKOD N 4 ARUKOD N 4 DARAB N 4 DATUM D 8 Index: Rendkod szerint.
191
Megoldás 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 adatok2 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:
192
Megoldás Komponens Jellemző Érték Table1 Name tblaruk
DatabaseName ora6 TableName aruk Active True (ilyenkor tervezés közben is látszanak az adatok) IndexName arukod DataSource1 Name dsraruk DataSet tblaruk
193
Megoldás Table2 Name tblvevok DatabaseName ora6 TableName vevok
Active True IndexName vevokod DataSource2 Name dsrvevok DataSet tblvevok
194
Megoldás Table3 Name tblrendeles DatabaseName ora6 TableName rendeles
Active True IndexName rendkod DataSource3 Name dsrrendeles DataSet tblrendeles
195
Megoldás A képernyőn lévő form unit-jában (unit1) biztosítsuk az utat az adatmodul felé: unit unit1; ... implementation {$R *.DFM} uses adatok2; end.
196
Megoldás 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 Jellemző Érték DBEdit1 DataSource adatmodul.dsrvevok DataField Vevokod Enabled false
197
Megoldás DBEdit2 DataSource adatmodul.dsrvevok DataField Vevonev
Enabled false DBEdit3 DataSource adatmodul.dsrvevok DataField Irszam
198
Megoldás DBEdit4 DataSource adatmodul.dsrvevok DataField Varos
Enabled false DBEdit5 DataSource adatmodul.dsrvevok DataField Utca
199
Megoldás Edit1 Name Ekeres Text üres Button1 Name BtnKilepes
Caption ‘Kilépés’ OnClick eseménye: Close;
200
Megoldás Button2 Name Btnkeres Caption ‘Keresés’ OnClick eseménye:
procedure TForm1.btnkeresClick(Sender: TObject); begin with adatmodul.tblvevok do indexFieldnames:='vevonev'; if not FindKey([ekeres.text]) then showmessage('Nem találtam ilyen nevű vevőt!'); end;
201
Megoldás 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. Form1 Name frmvevokeres Caption ‘Vevő névszerinti keresése’
202
Megoldás Kérjünk egy új form-ot (File/New Form) és biztosítsuk az utat az adatmodul felé: unit unit3; ... implementation {$R *.DFM} uses adatok2; end.
203
Megoldás 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. DBGrid1 Name Dbgvevok DataSource adatmodul.dsrvevok Enabled True Edit1 Name ESzures Text üres
204
Megoldás Button1 Name BtnSzures Caption ‘Szűrés’ OnClick eseménye:
procedure Tfrmszures.btnszuresClick(Sender: TObject); begin with adatmodul.tblvevok do FilterOptions:=FilterOptions-[foNoPartialCompare]+[foCaseInSensitive]; filter:=ESzures.text; filtered:=true; end;
205
Megoldás 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 tiltjuk le. Ezekhez használatba kell venni a DB unitot! Feltétel megadás az EditBox-ban: vevonev=’vevő neve’ (működéskor!!!)
206
Megoldás Button2 Name BtnKilepes Caption ‘Kilépés’ OnClick eseménye:
Close; Form2 Name frmszures Caption ‘Vevők szűrése’
207
Megoldás Kérjünk egy új form-ot (File/New Form) és biztosítsuk az utat az adatmodul felé: unit unit4; ... implementation {$R *.DFM} uses adatok2; end
208
Megoldás 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 Jellemző Érték DBEdit1 DataSource adatmodul.dsrvevok DataField Vevokod Enabled false
209
Megoldás DBEdit2 DataSource adatmodul.dsrvevok DataField Vevonev
Enabled false DBEdit3 DataSource adatmodul.dsrvevok DataField Irszam
210
Megoldás DBEdit4 DataSource adatmodul.dsrvevok DataField Varos
Enabled false DBEdit5 DataSource adatmodul.dsrvevok DataField Utca
211
Megoldás Edit1 Name Emezo Text üres Edit2 Name Ekeres
Button1 Name BtnKilepes Caption ‘Kilépés’ OnClick eseménye: Close;
212
Megoldás Button2 Name Btnkeres Caption ‘Keresés’ OnClick eseménye:
procedure Tfrmkeres2.btnkeresClick(Sender: TObject); begin with adatmodul.tblvevok do if not Locate(emezo.text,ekeres.text,[]) then showmessage('Nem találtam ilyen rekordot!'); end;
213
Megoldás 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,[]); Form3 Name frmvevokeres2 Caption ‘Keresés rendezetlen táblában’
214
Megoldás 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
215
Megoldás Állítsuk be az OnClick eseményeket. frmvevokeres.Showmodal;
frmszures.Showmodal; frmvevokeres2.Showmodal; Close;
216
Megoldás 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)
217
Feladat 1. A rendelés táblába adatfelvitel TDBLookupListBox és TDBLookupComboBox segítségével. 2. Adott vevő rendeléseinek eddigi összege.
218
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).
219
Megoldás Áruk tábla szerkezete: Field Name Type Size Dec ARUKOD N 4
ARUNEV C 20 EGYSEGAR N 6 2 AFAKOD N 2 Index:Arukod, Arunev
220
Megoldás 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.
221
Megoldás Rendelés tábla szerkezete: Field Name Type Size Dec
RENDKOD N 6 VEVOKOD N 4 ARUKOD N 4 DARAB N 4 DATUM D 8 Index: Rendkod szerint.
222
Megoldás 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:
223
Megoldás Komponens Jellemző Érték Table1 Name tblaruk
DatabaseName ora6 TableName aruk Active True (ilyenkor tervezés közben is látszanak az adatok) IndexName arukod DataSource1 Name dsraruk DataSet tblaruk
224
Megoldás Table2 Name tblvevok DatabaseName ora6 TableName vevok
Active True IndexName vevokod DataSource2 Name dsrvevok DataSet tblvevok
225
Megoldás Table3 Name tblrendeles DatabaseName ora6 TableName rendeles
Active True IndexName rendkod DataSource3 Name dsrrendeles DataSet tblrendeles
226
Megoldás A képernyőn lévő form unit-jában (unit1) biztosítsuk az utat az adatmodul felé: unit unit1; ... implementation {$R *.DFM} uses adatok2; end.
227
Megoldás A Data Controls palettáról helyezzünk el 5 db DbEdit-et a rendelés adatainak, egy DBLookupListBox-ot a vevő nevének és címének kiiratására, 1 DBLookupComboBox-ot az áruk nevének és egységárának, a Standard palettáról 3 db Button-t az új rekord felviteléhez, az adatok rögzítéséhez a rendelés táblában és a kilépéshez.
228
Megoldás Komponens Jellemző Érték
DBEdit1 DataSource adatmodul.dsrrendeles DataField Rendkod Enabled true
229
Megoldás DBEdit2 DataSource adatmodul.dsrrendeles DataField Vevokod
Enabled false DBEdit3 DataSource adatmodul.dsrrendeles DataField Arukod
230
Megoldás DBEdit4 DataSource adatmodul.dsrrendeles DataField darab
Enabled True DBEdit5 DataSource adatmodul.dsrrendeles DataField Datum
231
Megoldás DBLookupListBox ListSource adatmodul.dsrvevok (melyik táblából vesszük a tartalmát) ListField vevonev;varos;utca (mely mezőket szeretnénk látni ‘;’) DataSource adatmodul.dsrrendeles DataField Vevokod KeyField vevokod (a kiválasztott rekord melyik mezőjének értékét írja be a DataSource adatforrás DataField mezőjébe) A listában megjelenő adatok közül az első oszlop keresett értékének gépélése esetén a beírt értékű rekordra keres rá elég gyors billentyűkattogtatás esetén.
232
Megoldás DBLookupComboBox ListSource adatmodul.dsraruk
ListField arunev;egysegar (több mező esetén ; kell közéjük DataSource adatmodul.dsrrendeles DataField Arukod KeyField Arukod
233
Megoldás Button1 Name BtnKilepes Caption ‘Kilépés’ OnClick eseménye:
Close;
234
Megoldás Button2 Name Btnrogzit Caption ‘Rögzít’ OnClick eseménye:
procedure Tfrmrendfelv.btnrogzitClick(Sender: TObject); begin with adatmodul.tblrendeles do post; end;
235
Megoldás Button3 Name Btnuj Caption ‘Új adat’ OnClick eseménye:
procedure Tfrmrendfelv.BtnujClick(Sender: TObject); begin with adatmodul.tblrendeles do append; edit; end;
236
Megoldás Ezek után előállítjuk, hogy futtatáskor a Tabulátor gombbal való lépegetésnél milyen sorrendben járjuk be az adatokat (Edit/Tab Order). A megjelenő ablakban egyszerűen csak a helyére húzzuk az objektumot az egér segítségével.
237
VÉGE
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.