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 Készítette:Pető László.

Hasonló előadás


Az előadások a következő témára: "Adatbázis-kezelés DELPHI-ben Készítette:Pető László."— 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

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] [* | [,,…, ]] FROM [ ] [WHERE ][GROUP BY [Collate egybevetés],…, [Collate egybevetés]] [Having ] [Union

14 Magyarázat Distinct: az azonos tartalmú mezőket csak egyszer jeleníti meg All: minden adatot figyelembe vesz *: minden mező megjelenítése : 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

22 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 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 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 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 Align:= Alclient Dupla kattintá!s!

58 Grafikon

59

60

61

62

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 –UGYFELKOD –DATUM KIFIZETESEK –UGYFELKOD –DATUM

72 Jelentések Lista a befizeté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 –Ü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.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.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 NameTypeSizeDec NEVC25 SZULDATD SZEMIGSZAMC8 TANKORC10 OSZTONDIJN4

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 KomponensJellemzőÉrték Table1Nametblhallgatok DatabaseNameora4 (az az álnév, amit létrehoztunk) TableNamehallgatók ActiveTrue (ilyenkor tervezés közben is látszanak az adatok) IndexNameNev (ami szerint rendezve szeretnénk látni az adatokat) DataSource1Namedsrhallgatok DataSettblhallgatok

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 KomponensJellemzőÉrték DBEdit1NameeNev DataSourceadatmodul.dsrhallgatok DataFieldNev DBEdit2NameeSzuldat DataSourceadatmodul.dsrhallgatok DataFieldSzuldat DBEdit3NameeSzemigszam DataSourceadatmodul.dsrhallgatok DataFieldSzemigszam DBEdit4NameeTankor DataSourceadatmodul.dsrhallgatok DataFieldTankor DBEdit5NameeOsztondij DataSourceadatmodul.dsrhallgatok DataFieldOsztondij DBNavigatorNameNavigator DataSourceadatmodul.dsrhallgatok Button1NameBtnKilepes Caption‘Kilépés’ OnClickClose; Form1Namefrmkarbantart 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: KarbantartKilépés Állítsuk be az OnClick eseményeket. procedure TForm1.Karbantarts1Click(Sender: TObject); begin frmkarbantart.Showmodal; end; procedure TForm1.Kilps1Click(Sender: TObject); begin Close; end;

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 NameTypeSizeDec NEVC25 SZULDATD SZEMIGSZAMC8 TANKORC10 OSZTONDIJN4

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 KomponensJellemzőÉrték Table1Nametblhallgatok DatabaseNameora5 (az az álnév, amit létrehoztunk) TableNamehallgatók ActiveTrue (ilyenkor tervezés közben is látszanak az adatok) IndexNameNev (ami szerint rendezve szeretnénk látni az adatokat) DataSource1Namedsrhallgatok DataSettblhallgatok

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 KomponensJellemzőÉrték DBEdit1NameeNev DataSourceadatmodul.dsrhallgatok DataFieldNev EnabledFalse DBEdit2NameeSzuldat DataSourceadatmodul.dsrhallgatok DataFieldSzuldat EnabledFalse DBEdit3NameeSzemigszam DataSourceadatmodul.dsrhallgatok DataFieldSzemigszam EnabledFalse DBEdit4NameeTankor DataSourceadatmodul.dsrhallgatok DataFieldTankor EnabledFalse DBEdit5NameeOsztondij DataSourceadatmodul.dsrhallgatok DataFieldOsztondij EnabledFalse

113 Megoldás ComboBoxNameCbindex StyleDropDownList ItemsNé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 Button1NameBtnElso Caption<< Első OnClick eseménye: procedure TForm1.BtnelsoClick(Sender: TObject); begin with adatmodul.tblhallgatok do Begin first; end; If BtnUtolso.Enabled=false then begin BtnUtolso.Enabled:=true; BtnKovetkezo.Enabled:=true; end; BtnElso.enabled:=false; BtnElozo.enabled:=false; end;

115 Megoldás Button2NameBtnElozo Caption< Előző OnClick eseménye: procedure TForm1.BtnelozoClick(Sender: TObject); begin with adatmodul.tblhallgatok do Begin prior; if bof then Begin BtnElso.enabled:=false; BtnElozo.enabled:=false; end; If BtnUtolso.Enabled=false then begin BtnUtolso.Enabled:=true; BtnKovetkezo.Enabled:=true; end;

116 Megoldás Button3NameBtnkovetkezo CaptionKövetkező > OnClick eseménye: procedure TForm1.BtnkovetkezoClick(Sender: TObject); begin with adatmodul.tblhallgatok do Begin next; If Eof then Begin BtnUtolso.Enabled:=false; BtnKovetkezo.Enabled:=false; End; end; if BtnElso.enabled=false then begin BtnElso.enabled:=true; BtnElozo.enabled:=true; end;

117 Megoldás Button4NameBtnUtolso CaptionUtolsó >> 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 begin BtnElso.enabled:=true; BtnElozo.enabled:=true; end;

118 Megoldás Button5NameBtnFelvesz CaptionFelvesz OnClick eseménye:procedure TForm1.BtnFelveszClick(Sender: TObject); begin with adatmodul.tblhallgatok do begin 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; end;

119 Megoldás Button6NameBtnTorol CaptionTöröl OnClick eseménye: procedure TForm1.BtnTorolClick(Sender: TObject); begin with adatmodul.tblhallgatok do delete; end;

120 BitBtn1NameBtnOk KindBkOk EnabledFalse OnClick eseménye: procedure TForm1.BtnOkClick(Sender: TObject); begin with adatmodul.tblhallgatok do begin 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; end;

121 BitBtn2NameBtnCancel KindBkCancel EnabledFalse OnClick eseménye: procedure TForm1.BtnCancelClick(Sender: TObject); begin with adatmodul.tblhallgatok do begin 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; end;

122 Megoldás Button7NameBtnKilepes Caption‘Kilépés’ OnClick eseménye: Close; Form1Namefrmkarbantart 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: KarbantartKilépés Állítsuk be az OnClick eseményeket. procedure TForm1.Karbantarts1Click(Sender: TObject); begin frmkarbantart.Showmodal; end; procedure TForm1.Kilps1Click(Sender: TObject); begin Close; end;

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 NameTypeSizeDec ARUKODN 4 ARUNEVC20 EGYSEGARN62 AFAKODN2

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 NameTypeSizeDec VEVOKODN4 VEVONEVC25 IRSZAMN4 VAROSC20 UTCAC35 Index: Vevokod, Vevonev szerint.

131 Megoldás Rendelés tábla szerkezete: Field NameTypeSizeDec RENDKODN6 VEVOKODN4 ARUKODN4 DARABN4 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 KomponensJellemzőÉrték Table1Nametblaruk DatabaseNameora6 TableNamearuk ActiveTrue (ilyenkor tervezés közben is látszanak az adatok) IndexNamearukod DataSource1Namedsraruk DataSettblaruk

134 Megoldás Table2Nametblvevok DatabaseNameora6 TableNamevevok ActiveTrue (ilyenkor tervezés közben is látszanak az adatok) IndexNamevevokod DataSource2Namedsrvwvok DataSettblvevok

135 Megoldás Table3Nametblrendeles DatabaseNameora6 TableNamerendeles ActiveTrue (ilyenkor tervezés közben is látszanak az adatok) IndexNamerendkod DataSource3Namedsrrendeles DataSettblrendeles

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. KomponensJellemzőÉrték DBGrid1NameDbgRacs DataSource adatmodul.dsrrendeles EnabledFalse

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 Button1NameBtnKilepes Caption‘Kilépés’ OnClick eseménye: Close; ki lehet tenni egy navigátor gombsort is, amivel a teljes karbantartás megoldható. Form1Namefrmkarbantart 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: Query1Namevevolek DatabaseNameora6 SQLselect * from "vevok.dbf" where vevonev=:vnev Aztán egy Datasource komponenst: DataSource1Namedsrvevoker DataSetvevolek (query neve, ebből kapja majd az adatokat)

145 Megoldás A formra egy EditBox-ot a keresett név begépelésére Edit1Namekeresettnev Egy gombot a kereses megindítására: Button1NameBtnKeres 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:=Ker esettnev.Text; Adatmodul.Vevolek.prepare; Adatmodul.Vevolek.open;

146 Megoldás És egyet a kilépésre: Button2NameBtnKilepes Caption‘Kilépés’ OnClick eseménye: Close; Egy Grid-et az eredmény megjelenítésére: DBGrid1NameDbgRacs DataSourcedsrvevoker EnabledFalse

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ésekVevő adataiKilé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 NameTypeSizeDec ARUKODN 4 ARUNEVC20 EGYSEGARN62 AFAKODN2 Index:Arukod

152 Megoldás Vevők tábla szerkezete: Field NameTypeSizeDec VEVOKODN4 VEVONEVC25 IRSZAMN4 VAROSC20 UTCAC35 Index: Vevokod, Vevonev szerint.

153 Megoldás Rendelés tábla szerkezete: Field NameTypeSizeDec RENDKODN6 VEVOKODN4 ARUKODN4 DARABN4 DATUMD8 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 KomponensJellemzőÉrték Table1Nametblaruk DatabaseNameora6 TableNamearuk ActiveTrue (ilyenkor tervezés közben is látszanak az adatok) IndexNamearukod DataSource1Namedsraruk DataSettblaruk

156 Megoldás Table2Nametblvevok DatabaseNameora6 TableNamevevok ActiveTrue IndexNamevevokod DataSource2Namedsrvevok DataSettblvevok

157 Megoldás Table3Nametblrendeles DatabaseNameora6 TableNamerendeles ActiveTrue IndexNamerendkod DataSource3Namedsrrendeles DataSettblrendeles

158 Megoldás Query1Namevevorend DatabaseNameora6 SQLselect * 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*) DataSource4Namedsrvevorend DataSetvevorend (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. KomponensJellemzőÉrték DBEdit1DataSourceadatmodul.dsrvevok DataFieldVevokod

161 Megoldás OnChange eseménye: procedure Tfrmvevorend.DBEdit1Change(Sender: TObject); begin adatmodul. vevorend.close; adatmodul. vevorend.parambyname('vkod').asInteger:=StrtoInt(dbed it1.text); adatmodul. vevorend.prepare; adatmodul. vevorend.open; end;

162 Megoldás DBEdit2DataSourceadatmodul.dsrvevok DataFieldVevonev DBEdit3DataSourceadatmodul.dsrvevok DataFieldIrszam DBEdit4DataSourceadatmodul.dsrvevok DataFieldVaros DBEdit5DataSourceadatmodul.dsrvevok DataFieldUtca

163 Megoldás DBGrid1NameDbgRendeles DataSourceadatmodul.dsrvevorend EnabledTrue Button1NameBtnKilepes Caption‘Kilépés’ OnClick eseménye: Close;

164 Megoldás Button2NameBtnElozo Caption‘Előző’ OnClick eseménye: procedure TForm1.BtnelozoClick(Sender: TObject); begin with adatmodul.tblvevok do Begin prior; if bof then Begin BtnElozo.enabled:=false; end; If BtnKovetkezo.Enabled=false then begin BtnKovetkezo.Enabled:=true; end;

165 Megoldás Button3NameBtnKovetkezo Caption‘Következő’ OnClick eseménye: procedure TForm1.BtnkovetkezoClick(Sender: TObject); begin with adatmodul.tblvevok do Begin next; If Eof then Begin BtnKovetkezo.Enabled:=false; End; end; if BtnElozo.enabled=false then begin BtnElozo.enabled:=true; end;

166 Megoldás Form1Namefrmvevorend 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. DBGrid1NameDbgrendel DataSource adatmodul.dsrrendeles EnabledTrue

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 begin 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!!! Form2Namefrmrendeles Caption‘Rendelések listája’

176 Megoldás Az adatmodulra tegyünk ki egy Query-t és egy Datasource-t. Query1Namerenddatum DatabaseNameora6 SQLselect * from rendeles where datum=:renddat DataSource1Namedsrrenddatum DataSetrenddatum (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. DBGrid1NameDbgrenddatum DataSourceadatmodul.dsrrenddatum EnabledTrue

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). Edit1NameEdatum Textüres Button1NameBtnKigyujt CaptionKigyűjt

180 Megoldás OnClick eseménye: procedure TFrmrenddatum.btnkigyujtClick(Sender: TObject); begin with adatmodul.renddatum do begin Try close; parambyname('renddat').AsDate:=StrToDate(EDatum.text); prepare; open; Except on EConvertError do begin ShowMessage('A dátum formátuma nem megfelelő!'+#13#10+ 'Például: '+DateToStr(Date)); end; 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... Form1Namefrmrenddatum 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 NameTypeSizeDec ARUKODN 4 ARUNEVC20 EGYSEGARN62 AFAKODN2 Index:Arukod

189 Megoldás Vevők tábla szerkezete: Field NameTypeSizeDec VEVOKODN4 VEVONEVC25 IRSZAMN4 VAROSC20 UTCAC35 Index: Vevokod, Vevonev szerint.

190 Megoldás Rendelés tábla szerkezete: Field NameTypeSizeDec RENDKODN6 VEVOKODN4 ARUKODN4 DARABN4 DATUMD8 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 KomponensJellemzőÉrték Table1Nametblaruk DatabaseNameora6 TableNamearuk ActiveTrue (ilyenkor tervezés közben is látszanak az adatok) IndexNamearukod DataSource1Namedsraruk DataSettblaruk

193 Megoldás Table2Nametblvevok DatabaseNameora6 TableNamevevok ActiveTrue IndexNamevevokod DataSource2Namedsrvevok DataSettblvevok

194 Megoldás Table3Nametblrendeles DatabaseNameora6 TableNamerendeles ActiveTrue IndexNamerendkod DataSource3Namedsrrendeles DataSettblrendeles

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. KomponensJellemzőÉrték DBEdit1DataSourceadatmodul.dsrvevok DataFieldVevokod Enabledfalse

197 Megoldás DBEdit2DataSourceadatmodul.dsrvevok DataFieldVevonev Enabledfalse DBEdit3DataSourceadatmodul.dsrvevok DataFieldIrszam Enabledfalse

198 Megoldás DBEdit4DataSourceadatmodul.dsrvevok DataFieldVaros Enabledfalse DBEdit5DataSourceadatmodul.dsrvevok DataFieldUtca Enabledfalse

199 Megoldás Edit1NameEkeres Textüres Button1NameBtnKilepes Caption‘Kilépés’ OnClick eseménye: Close;

200 Megoldás Button2NameBtnkeres Caption‘Keresés’ OnClick eseménye: procedure TForm1.btnkeresClick(Sender: TObject); begin with adatmodul.tblvevok do begin indexFieldnames:='vevonev'; if not FindKey([ekeres.text]) then showmessage('Nem találtam ilyen nevű vevőt!'); end;

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. Form1Namefrmvevokeres 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. DBGrid1NameDbgvevok DataSourceadatmodul.dsrvevok EnabledTrue Edit1NameESzures Textüres

204 Megoldás Button1NameBtnSzures Caption‘Szűrés’ OnClick eseménye: procedure Tfrmszures.btnszuresClick(Sender: TObject); begin with adatmodul.tblvevok do begin 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 Button2NameBtnKilepes Caption‘Kilépés’ OnClick eseménye: Close; Form2Namefrmszures 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. KomponensJellemzőÉrték DBEdit1DataSourceadatmodul.dsrvevok DataFieldVevokod Enabledfalse

209 Megoldás DBEdit2DataSourceadatmodul.dsrvevok DataFieldVevonev Enabledfalse DBEdit3DataSourceadatmodul.dsrvevok DataFieldIrszam Enabledfalse

210 Megoldás DBEdit4DataSourceadatmodul.dsrvevok DataFieldVaros Enabledfalse DBEdit5DataSourceadatmodul.dsrvevok DataFieldUtca Enabledfalse

211 Megoldás Edit1NameEmezo Textüres Edit2NameEkeres Textüres Button1NameBtnKilepes Caption‘Kilépés’ OnClick eseménye: Close;

212 Megoldás Button2NameBtnkeres Caption‘Keresés’ OnClick eseménye: procedure Tfrmkeres2.btnkeresClick(Sender: TObject); begin with adatmodul.tblvevok do begin if not Locate(emezo.text,ekeres.text,[]) then showmessage('Nem találtam ilyen 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,[]); Form3Namefrmvevokeres2 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 szerintKilé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 NameTypeSizeDec ARUKODN 4 ARUNEVC20 EGYSEGARN62 AFAKODN2 Index:Arukod, Arunev

220 Megoldás Vevők tábla szerkezete: Field NameTypeSizeDec VEVOKODN4 VEVONEVC25 IRSZAMN4 VAROSC20 UTCAC35 Index: Vevokod, Vevonev szerint.

221 Megoldás Rendelés tábla szerkezete: Field NameTypeSizeDec RENDKODN6 VEVOKODN4 ARUKODN4 DARABN4 DATUMD8 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 KomponensJellemzőÉrték Table1Nametblaruk DatabaseNameora6 TableNamearuk ActiveTrue (ilyenkor tervezés közben is látszanak az adatok) IndexNamearukod DataSource1Namedsraruk DataSettblaruk

224 Megoldás Table2Nametblvevok DatabaseNameora6 TableNamevevok ActiveTrue IndexNamevevokod DataSource2Namedsrvevok DataSettblvevok

225 Megoldás Table3Nametblrendeles DatabaseNameora6 TableNamerendeles ActiveTrue IndexNamerendkod DataSource3Namedsrrendeles DataSettblrendeles

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 KomponensJellemzőÉrték DBEdit1DataSource adatmodul.dsrrendeles DataFieldRendkod Enabledtrue

229 Megoldás DBEdit2DataSource adatmodul.dsrrendeles DataFieldVevokod Enabledfalse DBEdit3DataSource adatmodul.dsrrendeles DataFieldArukod Enabledfalse

230 Megoldás DBEdit4DataSource adatmodul.dsrrendeles DataFielddarab EnabledTrue DBEdit5DataSource adatmodul.dsrrendeles DataFieldDatum EnabledTrue

231 Megoldás DBLookupListBoxListSourceadatmodul.dsrvevok (melyik táblából vesszük a tartalmát) ListFieldvevonev;varos;utca (mely mezőket szeretnénk látni ‘;’) DataSourceadatmodul.dsrrendeles DataFieldVevokod KeyFieldvevokod(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 DBLookupComboBoxListSource adatmodul.dsraruk ListField arunev;egysegar (több mező esetén ; kell közéjük DataSource adatmodul.dsrrendeles DataFieldArukod KeyFieldArukod

233 Megoldás Button1NameBtnKilepes Caption‘Kilépés’ OnClick eseménye: Close;

234 Megoldás Button2NameBtnrogzit Caption‘Rögzít’ OnClick eseménye: procedure Tfrmrendfelv.btnrogzitClick(Sender: TObject); begin with adatmodul.tblrendeles do begin post; end;

235 Megoldás Button3NameBtnuj Caption‘Új adat’ OnClick eseménye: procedure Tfrmrendfelv.BtnujClick(Sender: TObject); begin with adatmodul.tblrendeles do begin 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 Készítette:Pető László."

Hasonló előadás


Google Hirdetések