Access adatbázis elérése OLE DB-n keresztül



Hasonló dokumentumok
Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Hozzunk létre két rekordot a táblában, majd véglegesítsünk (commit):

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Johanyák Zsolt Csaba: Grafikus felület programozása. Copyright 2008 Johanyák Zsolt Csaba

Webszolgáltatás és XML alapú adatbázis. 1. Az adatbázis megtervezése

Vizuális programozás gyakorlat

Vizuá lis prográmozá s

Entity Framework alapú adatbáziselérés

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

Johanyák Zsolt Csaba: Képnézegető program oktatási segédlet

Vizuális, eseményvezérelt programozás I.

Objektumorientált programozás C# nyelven III.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

components : IContainer dx : int dy : int tmidőzítő : Timer toolstripseparator1 : ToolStripSeparator tsmikilépés : ToolStripMenuItem

Segítség a megoldáshoz: 1. Készítse el a Window-t az ábrának és az osztálydiagramnak megfelelően.

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás Szükséges névterek Attribútumok. 1.3.

Johanyák Zsolt Csaba: XML Webszolgáltatás alapú osztott alkalmazás fejlesztése (Mandelbrot halmaz számítás) oktatási segédlet

BME MOGI Gépészeti informatika 4.

A Microsoft Visual Studio 2005 fejlesztőkörnyezet

Programozás 2., II. kötet Windows form alkalmazások

Adatbázis-kezelés ODBC driverrel

BME MOGI Gépészeti informatika 7.

INFORMATIKAI ALAPISMERETEK

Entity Framework alapú adatbáziselérés 2

Ugráló gomb oktatási segédlet Ugráló gomb

7. Előadás. Makrók alkalmazása. Salamon Júlia. Előadás I. éves mérnök hallgatók számára

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Entity Framework + LINQ oktatási segédlet

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Tartalomjegyzék. Bevezetés...2

XML Webszolgáltatás alapú osztott alkalmazás fejlesztése Johanyák Zsolt Csaba 1

INFORMATIKAI ALAPISMERETEK

C#, OOP. Osztályok tervezése C#-ban

C#---Access adatbáziskezelési gyakorlat

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Egy dinamikus adatbázis megvalósítása egy megrendelő-raktározó alkalmazáson keresztül.

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Objektumorientált programozás C# nyelven

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Kétdimenziós rajzolás WPF-ben

Eddig még nem használt vezérlőket is megismerünk: PlaceHolder, RadioButtonList.

II. év. Adatbázisok és számítógépek programozása

C# osztályok. Krizsán Zoltán

Adatbázisok webalkalmazásokban

BME MOGI Gépészeti informatika 6.

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Az emelt szintű. informatika érettségi. programozási feladatainak. megoldása Java nyelven. NetBeans IDE 8.1 környezetben

GenerikusOsztály<objektumtípus> objektum = new GenerikusOsztály<objektumtípus>();

Tipp A Word makrók kimerítõ tárgyalását megtalálhatjuk az O Reilly gondozásában megjelent Writing Word Macros címû könyvben.

117. AA Megoldó Alfréd AA 117.

Adatbázisok biztonsága

Események C#-ban Krizsán Zoltán iit

Bánsághi Anna

Programozás II gyakorlat. 4. Öröklődés

A WEB programozása - JSP1 dr.gál Tibor őszi félév

Mérési adatgyűjtés és adatfeldolgozás 2. előadás

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

VISUAL BASIC ALAPISMERETEK

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelés ActiveX vezérlıkkel - 1

Egységes és objektumközpontú adatbázis-kezelés (2. rész)

Eseményvezérelt alkalmazások fejlesztése II 3. előadás. Windows Forms dinamikus felhasználói felület, elemi grafika

Objektumorientált programozás C# nyelven

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Programozási technológia

A C# programozási nyelv alapjai

Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

ZH mintapélda. Feladat. Felület

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

Szoftvertechnolo gia gyakorlat

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

JAVA PROGRAMOZÁS 3.ELŐADÁS

I. 288.: Utcai WiFi térkép

OBJEKTUMORIENTÁLT TERVEZÉS ESETTANULMÁNYOK. 2.1 A feladat

2. Beadandó feladat dokumentáció

Bánsághi Anna

Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Java Programozás 8. Gy: Java alapok. Adatkezelő 4.rész

C# feladatok gyűjteménye

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

3. gyakorlat Saját adatok használata

Alkalmazások fejlesztése III. Qt 4 /C++ alapú MDI alkalmazás: Számlakészítő program 3/3

BME MOGI Gépészeti informatika 5.

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

A.NET keretrendszer (.NET Framework) három alapvetõ összetevõbõl áll:

Programozás BMEKOKAA146. Dr. Bécsi Tamás 10. Előadás

AutoCAD MAP DWG mapobject TOPOBASE konvertáló program dokumentáció

Alap számológép alkalmazás

Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

ASP.NET 2.0 (Whidbey)

Visual Basic 2005 Express Edition A VISUAL STUDIO HASZNÁLATA NEM LEKTORÁLT VÁLTOZAT

Java Programozás 7. Gy: Java alapok. Adatkezelő 3.rész

BME MOGI Gépészeti informatika 1.

Java Programozás 11. Ea: MVC modell

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

Átírás:

Access adatbázis elérése OLE DB-n keresztül Készítsünk egy grafikus felülető alkalmazást, ami lehetıvé teszi egy Access adatbázisban tárolt hallgatói adatok (EHA, Név, e-mail cím) lekérdezését (összes adat, e-mail címek listája), új adatok felvitelét, és a felvitt adatok módosítását. A felhasználói felület Windows Forms típusú legyen, kapcsolat nélküli adatbázis elérési modellt használjunk, és típusos DataSet-ben tároljuk a memóriában az adatokat. 1. A felhasználói felület létrehozása Hozzunk létre egy Windows Forms Application típusú C# alkalmazást (.NET Framework 4) Lista néven. A form neve legyen frmfıablak, az ıt tartalmazó állomány neve legyen frmfoablak.cs, az ablak felirata legyen: Access adatbázis elérése OLE DB-n keresztül. Helyezzünk el a formon egy menüt (MenuStrip), aminek a neve legyen: msfımenü. Menüpontok: Fájl: Name=tsmiFájl Mentés: Name=tsmiMentés Kilépés: Name=tsmiKilépés. Lekérdezés: Name=tsmiLekérdezés, Összes adat: Name=tsmiÖsszesAdat e-mail címek listája: Name=tsmiEmailLista Adatrögzítés/módosítás: Name=tsmiAdatrögzítés_Módosítás Adatrögzítés: Name=tsmiAdatrögzítés Módosítás: Name=tsmiMódosítás Hozzunk létre egy új formot (Project menü, Add Windows Form, Templates: Windows Form, Name=frmOsszesAdat.cs) frmösszesadat néven, 1

Text= Összes Adat. Helyezzünk el rajta egy DataGridView komponenst Name=dgvRács, Dock=Fill. A hozzáadás, szerkesztés és törlés legyen letiltva. Hozzunk létre egy formot frmemaillista.cs néven az e-mail címek megjelenítésére Name=frmEmailLista, Text= e-mail címek listája. Helyezzünk el egy szerkesztımezıt a formon. Name=tbEmail, Text="", Dock=Fill, ReadOnly=True, ScrollBars=Vertical, Multiline=True. Hozzunk létre egy új formot (Project menü, Add Windows Form, Templates: Windows Form, Name= frmadatrogzites.cs). Az ablak osztályának neve frmadatrögzítés legyen. A form fejlécébe helyezzük el az Adatrögzítés szöveget. Az ablak tartalmazzon három címkét (Label): Név, EHA, e- mail felirattal, három szerkesztımezıt (TextBox): Name=tbNév, Name=tbEHA, Name=tbEmail néven. Helyezzünk el két nyomógombot (Button) a formon Name=btOK, DialogResult=OK, Text=OK, és Name=btMégsem, Text=Mégsem, DialogResult= Cancel. Hozzunk létre egy új formot (Project menü, Add Windows Form, Templates: Windows Form, Name= frmmodosit.cs). Az ablak osztályának neve frmmódosítás legyen. A form fejlécébe helyezzük el az Módosít szöveget. Az ablak tartalmazzon három címkét (Label): Név, EHA, e-mail felirattal, két szerkesztımezıt (TextBox): Name=tbNév, Name=tbEmail néven, és egy kombinált listaablakot (ComboBox): Name=cbEHA, DropDownStyle=DropDownList. Helyezzünk el két nyomógombot (Button) a formon Name=btAlkalmaz, Text=Alkalmaz, és Name=btMégsem, Text=Mégsem, DialogResult= Cancel 2

3. Adatforrás megadása és a típusos adatkezelı osztályok legenerálása Másoljuk be a list.mdb állományt a projektünk könyvtárába. A Visual Studio Data menüjében válasszuk az Add New Data Source -t. A varázslóban válasszuk a DataBase, Next, DataSet, Next, New Connection, -et A DataSet neve legyen dslista. A Designerben állítsuk át a tábla nevét lista-ra, és a táblaadapter nevét talista-ra. A típusos DataSet létrehozásakor a Visual Studio egy sor osztályt generál az adatbázis és a benne levı tábla alapján. Nézzük meg ıket a Class View ablakban. Láthatjuk, hogy az adattároláshoz kapcsolódó osztályok a Lista névtérben keletkeztek, míg a táblaadapter és a kapcsolódó menedzser osztályok az ez alatt levı dslistatableadapters névtérben. A fontosabb osztályokat piros vonallal aláhúztam az ábrán. 3. A kód elkészítése 3.1. A fıablak Hozzunk létre egy-egy adattagot az adatkezeléshez szükséges objektumok (DataSet, TableAdapter) számára, majd a konstruktorban hozzuk létre az objektumokat. /// Az adatok memória beli tárolására szolgáló típusos DataSet. dslista dslista; /// A Lista tábla típusos TableAdaptere. talista talista; 3

/// A főablak konstruktora. public frmfőablak() InitializeComponent(); // DataSet objektum létrehozása. Itt fogjuk tárolni lokálisan az adatokat. dslista = new dslista(); // TableAdapter objektum létrehozása. Ez gondoskodik majd a tábla // feltöltéséről // és a későbbi szinkronizálásról az adatbázissal. talista = new talista(); try // A memória beli lista tábla feltöltése az adatbázisból. talista.fill(dslista.lista); catch (Exception ex) MessageBox.Show("Nem sikerült megnyitni az adatbázis állományt!\r\n"+ ex.message, "Hiba", MessageBoxButtons.OK,MessageBoxIcon.Error); // Még nem volt változtatás, mentésre nincs szükség. tsmimentés.enabled = false; 3.2. Összes adat menüpont Az összes adat egyszerre történı megjelenítése egy DataGrid komponens segítségével az frmösszesadat formon történik. Az adatok megjelenítéséhez létre kell hoznunk az adatkötést, azaz a lista táblát meg kell adnunk adatforrásként az adatrács számára. Mivel az adatrács komponens alapból private hozzáféréső, és így a fıablak osztályából nem tudnánk módosítani a DataSource tulajdonságának értékét, ezért tervezési nézetben elıször állítsuk a komponens hozzáférését internal-ra (Modifiers=Internal). /// Lekérdezés/Összes adat menüpont. /// <param name="sender">a menüpont objektum.</param> private void tsmiösszesadat_click(object sender, EventArgs e) // Csak megjelenítésre használt párbeszédablak. // Létrehozzuk a form objektumot. frmösszesadat foa = new frmösszesadat(); // A formon levő adatrácsban beállítjuk az adatforrást, // a lista táblából vegye az adatokat. foa.dgvrács.datasource = dslista.lista; // Modálisan megjelenítjük a formot (párbeszédablakot). foa.showdialog(); 4

3.3. E-mail címek listája menüpont Az e-mail címek megjelenítése egy TextBox komponens segítségével az frmemaillista formon történik. Az adatok megjelenítéséhez elıször készítünk egy sztringet, amiben összegyőjtjük a címek, majd a sztring tartalmát megjelenítjük a fromon. Mivel a szövegmezı komponens alapból private hozzáféréső, és így a fıablak osztályából nem tudnánk módosítani a DataSource tulajdonságának értékét, ezért tervezési nézetben elıször állítsuk a komponens hozzáférését internal-ra (Modifiers=Internal). /// Lekérdezés/e-mail címek listája menüpont. /// <param name="sender">a menüpont objektum.</param> private void tsmiemaillista_click(object sender, EventArgs e) // Csak megjelenítésre használt párbeszédablak. // Létrehozzuk a form objektumot. frmemaillista fel = new frmemaillista(); // Létrehozunk egy sztringet, amiben összeállítjuk a // megjeleníteni kívánt tartalmat. string s = ""; // Egyesével hozzáadjuk az e-mail címeket foreach (dslista.listarow Sor in dslista.lista.rows) s += Sor.email + "\r\n"; // A sztring tartalmát elhelyezzük a TextBoxban. fel.tbemail.text = s; // Modálisan megjelenítjük a formot (párbeszédablakot). fel.showdialog(); 3.4. Adatrögzítés menüpont Az frmadatrögzítés formon elhelyezett szövegmezık segítségével fogjuk bekérni a felhasználótól az adatokat. Mindhárom komponens alapból private hozzáféréső, ezért az ablak osztályán kívülrıl nem érhetı el. Amennyiben a fıablak osztályának egy metódusából szeretnénk kiolvasni ezen mezık tartalmát, két megoldás közül választhatunk. Vagy internal hozzáférésővé tesszük a komponenseket, mint az elızı két form esetében, vagy az frmadatrögzítés osztályon belül készítünk egy-egy tulajdonságot a három szerkesztımezıhöz, amin keresztül lekérdezhetı a bennük tárolt szöveg a formon kívülrıl is. Most ezen második megoldást fogjuk megvalósítani. /// EHA kód public string EHA get return tbeha.text; 5

/// Név public string Nev get return tbnév.text; /// e-amail cím public string email get return tbemail.text; Set elérık most nem szükségesek. A formon szintaktikailag ellenıriznünk kell a bevitt adatok helyességét. Ennek érdekében mindhárom szövegmezı esetén készítünk eseménykezelıt a Validating eseményhez. /// Név ellenőrzése. /// <param name="sender">a tbnév TextBox.</param> private void tbnév_validating(object sender, CancelEventArgs e) if (Név.Length == 0) // Ha nincs beírva név. e.cancel = true; MessageBox.Show("A Név mező kitöltése kötelező!", "Hiba", MessageBoxButtons.OK, MessageBoxIcon.Error); // Csak betű és szóköz elfogadott foreach (char c in Név.ToCharArray()) if (!Char.IsLetter(c) && c!= ' ') e.cancel = true; MessageBox.Show("Csak betű és szóköz megadása lehetséges!", "Hiba", MessageBoxButtons.OK, MessageBoxIcon.Error); break; /// EHA kód ellenőrzése. /// <param name="sender">a tbeha TextBox.</param> private void tbeha_validating(object sender, CancelEventArgs e) 6

if (EHA.Length == 0) // Ha a felhasználó nem adott meg EHA kódot. e.cancel = true; MessageBox.Show("Az EHA mező kitöltése kötelező!", "Hiba", MessageBoxButtons.OK, MessageBoxIcon.Error); else // Csak betű és pont megadása megengedett. foreach (char c in EHA.ToCharArray()) if (!Char.IsLetter(c) && c!= '.') e.cancel = true; MessageBox.Show("Csak betű és pont megadása lehetséges!", "Hiba", MessageBoxButtons.OK, MessageBoxIcon.Error); break; /// Email cím ellenőrzése. /// <param name="sender">a tbemail TextBox.</param> private void tbemail_validating(object sender, CancelEventArgs e) // Az e-mail címet reguláris kifejezéssel ellenőrizzük. if (!Regex.IsMatch(Email, @"^([\w-\.]+)@((\[[0-9]1,3\.[0-9]1,3\.[0-9]1,3\.) " + @"(([\w-]+\.)+))([a-za-z]2,4 [0-9]1,3)(\]?)$" )) MessageBox.Show("A megadott e-mail cím érvénytelen!", "Adabeviteli hiba", MessageBoxButtons.OK, MessageBoxIcon.Error); e.cancel = true; Visszatérve a fıablakhoz az Adatrögzítés menüpont eseménykezelıje az alábbi. /// Adatrögzítés menüpont. /// <param name="sender">a menüpont objektum.</param> private void tsmiadatrögzítés_click(object sender, EventArgs e) // Adatbevitelre használt párbeszédablak. // Létrehozzuk a form objektumot. frmadatrögzítés fa = new frmadatrögzítés(); // Megjelenítjük a formot. if (fa.showdialog() == DialogResult.OK) 7

// Ha az OK gombbal zárta be a felhasználó a párbeszédablakot, // akkor kiolvassuk a három adatot, létrehozunk egy új sort a // táblában, és elhelyezzük benne a kiolvasott adatokat. dslista.lista.addlistarow(fa.eha, fa.név, fa.email); // Figyelem! Az EHA mező egyediségét nem ellenőriztük. Ha // a felhasználó egy már korábban bevitt EHA kódot ad meg, // akkor kivétel keletkezik, és a program leáll. // Önálló otthoni feladat: oldja meg az ellenőrzést! // Módosítottuk a tábla tartalmát, mentés szükséges lehet. tsmimentés.enabled = true; 3.5. Módosítás menüpont A Módosítás menüponthoz kapcsolódó frmmódosít form megvalósítása kicsit bonyolultabb mint az adatrögzítésnél alkalmazott társáé. Mivel itt egy létezı készletbıl kell kiválasztani a módosítani kívánt rekordot, ezért az EHA kód (elsıdleges kulcs) mezıje nem szövegmezıvel, hanem kombinált listaablakkal lett megvalósítva. A párbeszédablak megjelenítését követıen a felhasználó választja ki, hogy melyik rekordot akarja módosítani, ezért a formból hozzá kell férnünk a teljes táblához. Ezt úgy oldjuk meg, hogy az frmmódosít osztályban létrehozunk egy tulajdonságot, aminek értéket adva beállíthatjuk a ComboBox adatforrását (adatkötés létrehozása). /// Tulajdonság a memória beli adattábla elérésének támogatásához. public dslista.listadatatable dtlista // Ha lekédezik az értékét. get // Visszaadjuk a ComboBox adatforrásaként megadott tábla referenciáját. return (dslista.listadatatable) cbeha.datasource; // Ha értéket adnak a tulajdonságnak. set // Beállítjuk a táblát a ComboBox adatforrásaként. cbeha.datasource = value; // Beállítjuk a ComboBoxban megjelenő mezőt. cbeha.displaymember = "EHA"; Emellett az frmmódosít osztályban létrehozunk egy adattagot, amiben nyílván fogjuk tartani a tábla aktuális rekordját (lraktuális), valamint készítünk egy adattag/tulajdonság párost annak követésére, hogy módosított-e valamit a felhasználó. Erre azért lesz szükség, mert ettıl függıen engedélyezzük a fıablak Mentés menüpontját. Kezdıértékét hamisra állítjuk a konstruktorban. 8

/// Az aktuális rekord a táblában. private dslista.listarow lraktuális; /// Nyílvántartja, hogy történt-e módosítás a Módosít ablak segítségével. public bool VoltVáltozás get; set; /// A Módosít ablak konstruktora. public frmmódosít() InitializeComponent(); // Kezdetben "nem volt változás" VoltVáltozás = false; Ha a felhasználó egy új EHA kódot választ ki a listából, akkor a hozzá tartozó név és e-mail értékeket bemásoljuk a két szerkesztımezıbe. Ehhez a ComboBox SelectedIndexChanged eseményéhez készítünk eseménykezelıt. /// A ComboBox-ban változott a kiválasztott EHA kód. /// <param name="sender">a ComboBox objektum.</param> private void cbeha_selectedindexchanged(object sender, EventArgs e) // Megkeressük, hogy melyik az aktuális rekord a táblában. var Sor = from x in dtlista where x.eha == ((string)((datarowview)cbeha.selecteditem).row[0]) select x; if(sor.count()>0) // Ha megvan az aktuálkis rekord, tároljuk a sor objektum referenciáját. lraktuális = Sor.ElementAt(0); // Bemásoljuk a TextBoxba a nevet. tbnév.text=lraktuális.nev; // Bemásoljuk a TextBoxba az e-mail címet. tbemail.text=lraktuális.email; A módosított értékeket itt is ellenıriznünk kell hasonlóan az adatrögzítés esetéhez. Másoljuk le egyszerően az ott használt két eseménykezelıt (tbemail_validating és tbnév_validating), majd ıket a megfelelı szövegmezık Validating eseményéhez (Properties ablak). Az Alkalmaz nyomógombon történı kattintás hatására a memória beli táblában módosítani kell a név és e-mail mezık tartalmát a szövegmezıkben megadottak szerint. /// Kattintás az Alkalmaz gombon. 9

/// <param name="sender">a nyomógomb.</param> private void btalkalmaz_click(object sender, EventArgs e) if (lraktuális!=null) // Ha van aktuális rekord kiválasztva a táblában. // Tároljuk a táblában az új nevet. lraktuális.nev = tbnév.text; // Tároljuk a táblában az új e-mail címet. lraktuális.email = tbemail.text; // Módosítást hajtottunk végre a táblában. VoltVáltozás = true; Visszatérve a fıablak osztályába mpst már elkészíthetjük a Módosítás menüpont eseménykezelıjét. /// Módosítás menüpont. /// <param name="sender">a menüpont objektum.</param> private void tsmimódosítás_click(object sender, EventArgs e) // Adatbevitelre használt párbeszédablak. // Létrehozzuk a form objektumot. frmmódosít fm = new frmmódosít(); // Átadjuk a form számára az adattáblára irányuló referenciát, // így a párbeszédablakból közvetlenül elérhető a tábla tartalma. fm.dtlista = dslista.lista; // Megjelenítjük a formot. fm.showdialog(); // Ha volt változtatás a táblában. if(fm.voltváltozás) // Módosítottuk a tábla tartalmát, mentés szükséges lehet. tsmimentés.enabled = true; 3.6. Mentés menüpont A Mentés menüpont feladata az, hogy a memóriában tárolt táblát szinkronizálja az adatbázisban tárolt táblával, azaz érvényesítse a felhasználó által végrehajtott módosításokat. Mivel erre a funkcióra a kilépéshez kapcsolódóan is szükségünk lesz, ezért a feladatot megvalósító utasításokat egy külön metódusban helyezzük el. /// Szinkronizálja a memóriában található táblát az adatbázissal, azaz /// az adatfelviteleket és módosításokat érvényesíti az adatbázisban. private void Mentés() try // Szinkronizáljuk a memóriában található táblát az adatbázissal, azaz 10

// az adatfelviteleket és módosításokat érvényesítjük az adatbázisban. talista.update(dslista); // Mentés nem szükséges. tsmimentés.enabled = false; catch (Exception ex) MessageBox.Show("Nem sikerült a szinkronizálási művelet!\r\n" + ex.message, "Hiba", MessageBoxButtons.OK, MessageBoxIcon.Error); /// Mentés menüpont. /// <param name="sender">a menüpont objektum.</param> private void tsmimentés_click(object sender, EventArgs e) // Szinkronizáljuk a memóriában található táblát az adatbázissal, azaz // az adatvelviteleket és módosításokat érvényesítjük az adatbázisban. Mentés(); 3.7. Kilépés menüpont A kilépés végrehajtása elıtt amennyiben engedélyezett a mentés (történt módosítás a táblában), flkínáljuk a felhasználónak a mentés lehetıségét. /// Kilépés menüpont. /// <param name="sender">a menüpont objektum.</param> private void tsmikilépés_click(object sender, EventArgs e) if (tsmimentés.enabled) // Ha a mentés menüpont engedélyezett, azaz történt módosítás a // legutóbbi szinkronizálás óta, akkor felkínáljuk a felhasználónak // a mentés lehetőségét. if (MessageBox.Show("Kívánod menteni a változásokat?", "Kérdés", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) // Ha felhasználó akar menteni, akkor szinkronizálunk. Mentés(); Application.Exit(); 11