Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Adatbázis-kezelés DELPHI-ben

Hasonló előadás


Az előadások a következő témára: "Adatbázis-kezelés DELPHI-ben"— Előadás másolata:

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


Letölteni ppt "Adatbázis-kezelés DELPHI-ben"

Hasonló előadás


Google Hirdetések