HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Rekordműveletek nézettáblákon keresztül


SQL nézettáblák 3. rész

Példaprogram letöltése

7332 bájt

Ebben a részben megnézzük, hogy hogyan adhatunk hozzá, hogyan módosíthatun, vagy törölhetünk egy rekordot az adatbázisban, nézettáblákon keresztül. Megismerkedünk a rekordműveletek lehetőségeivel és korlátaival.

A mellékelt példaprogram futtatása előtt a Unit1.pas forráskód 20. sorában lévő ConnectionString konstans értékét módosítsa úgy, hogy a Dolgozok példaadatbázis elérhetővé váljon.
A mellékelt Dolgozok.sql állomány tartalmazza a feltöltött példa adatbázis létrehozásához szükséges szkriptet. A szkript lefuttatásához használja az SQL szerver Manager programját. Amennyiben SQL szerverének elérési útja eltér a telepítési alapbeállítástól, úgy a script-ben írja át az elérési utakat a következőre: C:\Program Files\Microsoft SQL Server\MSSQL\data\
Példaprogramunkban, az előző részben elkészített adatbázist használjuk fel. Az előző részben elkészítettük a Szemely_VIEW és Osszesadat_VIEW nézeteket. Mellékelt példaprogramunkban, a Szemely_VIEW nézettáblán keresztül végzünk rekordműveleteket, a Dolgozok adatbázisban.
A nézettáblák azon kívül, hogy megjelenítik egy adatbázis bizonyos részletét, alkalmasak arra, hogy rekordokat szúrjunk be velük tábláinkba. Lehetőségünk van már meglévő rekordok módosítására és törlésére is. A nézettáblák esetében, a rekordműveleteknek van néhány sajátosságuk. Az alábbiakban ezeket nézzük át.
Amikor egy nézettáblán valamilyen rekord műveletet hajtunk végre, az igazából a nézet alapját képező táblákban hajtódik végre.
Új rekord beszúrása esetén az a legegyszerűbb eset, amikor a nézettábla egy adattábla összes oszlopát lefedi. Ilyenkor az adattábla minden egyes mezőjét fel tudjuk tölteni értékekkel.
Ha az adattábla egyes oszlopai nincsenek benne a nézettáblában, akkor ezeknek az oszlopoknak képeseknek kell lenniük arra, hogy NULL értéket tároljanak, vagy pedig alapértelmezett érték kell, hogy tartozzon hozzájuk. Ha ezen feltételek egyike sem teljesül, akkor a nézettábla alkalmatlanná válik arra, hogy új rekordokat vegyünk fel rajta keresztül.
Delphi példaprogramunkban a Szemely_VIEW nézettáblát használjuk fel arra, hogy új rekordokat vegyünk fel a Szemely táblába. A nézet azonban nem tartalmazza az SZKod mezőt. Amikor létrehoztuk a Dolgozok adatbázist, lehetővé tettük, hogy minden egyes mező NULL értékeket is tartalmazhasson. Így nézettáblánk alkalmas arra, hogy új rekordokat tudjon fogadni. Azonban az SZKod mező értékének beállításáról nekünk kell gondoskodnunk.
A Szemely tábla SZKod mezőjét arra használjuk, hogy kapcsolatot tudjunk létesíteni az Adatok táblával. Ebből adódóan nem a legoptimálisabb megoldás, ha az SZKod mezőben NULL értékeket hagyunk. A Delphi példaprogramban készítettünk egy eljárást, amelyet minden újonnan felvitt rekord után meghívunk. A SetSZKod eljárás egy ADOTable komponens segítségével csatlakozik a Szemely táblához. Ahol a táblában az SZKod helyén NULL értékeket talál, ott az SZKod mező értékét a rekord sorszámának megfelelő értékre cseréli ki.
Emlékezzünk vissza arra, hogy a Szemely_VIEW nézetet úgy hoztuk létre, hogy csak az 1972.01.01. után született személyeket jelenítse meg. Ez felveti azt a problémát, hogy mi történik akkor, ha olyan rekordot viszünk fel, amelyben a megadott születési dátum kisebb ennél az értéknél.
Az SQL szerver, alapbeállítás szerint megengedi az olyan rekordok felvitelét is, amelyek nem esnek bele a nézettábla által megjeleníthető tartományba. Azonban amikor frissítjük a nézettáblát, a felvitt rekord nem lesz látható.
Delphi példaprogramunkban egy új rekordot ugyanúgy tudunk felvenni, mint egy Table objektum esetében.
with ADOQuery1 do begin
  Append;
  FieldByName('Nev').AsString:=Form2.ENev.Text;
  FieldByName('SzulIdo').AsString:=Form2.ESzulIdo.Text;
  Post;
end;
A Delphi példaprogramban próbáljuk ki, hogy mi történik akkor, ha olyan rekordot veszünk fel, amely nem tartozik bele a Szemely_VIEW által megjeleníthető tartományba. Azt tapasztalhatjuk, hogy a DBGrid1 objektum ugyanúgy megjeleníti a rekordot, mint a feltételnek eleget tevőket. Ez így van egészen addig, míg a Frissítés feliratú gombra nem kattintunk. Ha újraindítjuk a programot, vagy csupán frissítjük a nézettáblát, újra csak a nézet feltételének eleget tevő rekordok válnak láthatóvá.
A nézettáblát Delphi-ben a következő utasítással frissíthetjük:
ADOQuery1.ReQuery;
Ha Delphi-ből módosítani akarunk a nézettáblában egy rekordot, akkor azt a következő módon tehetjük meg.
with ADOQuery1 do begin
  Edit;
  FieldByName('Nev').AsString:=Form2.ENev.Text;
  FieldByName('SzulIdo').AsString:=Form2.ESzulIdo.Text;
  Post;
end;
A módosítás összetett nézettáblák esetében is működne. Nem módosíthatjuk azoknak a mezőknek a tartalmát, amelyek adattáblák közti kapcsolódást szolgálnak.
Törölni csak olyan rekordokat tudunk, amelyek megjelennek a nézettáblában, azaz eleget tesznek a nézettáblában definiált feltételnek.
Ha a Delphi példaprogramban olyan rekordot viszünk fel, ahol a születési dátum kisebb, mint 1972.01.01, akkor a rekord csak addig törölhető, még a nézettábla tartalmát nem frissítjük. Utána ugyanis a Szemely_VIEW nézetből elérhetetlenné válik.
Egy rekordot törölni az alábbi módon tudunk.
ADOQuery1.Delete;

Cikksorozat

#IDKategóriaCikk címeSorozat
2591WindowsTippek és trükkök - RAS - Modem csengetési szám állítása1. rész
2622WindowsTippek és trükkök - Program futtatása más felhasználóként2. rész
2640WindowsA Windows ikonméretének megváltoztatása és Windows 2000 Asztaltémák3. rész
2657WindowsTippek és trükkök - Internet Explorer4. rész
2667WindowsTippek és trükkök5. rész
2684WindowsAlapértelmezések állítása, telepítési fájlok helye, intéző nézetek6. rész
2696WindowsBiztonsági trükkök7. rész
2702WindowsWindows XP trükkök8. rész
2729WindowsWindows 2000 és XP tippek, trükkök9. rész
2757WindowsRegistry trükkök10. rész
2784WindowsTippek, trükkök11. rész
2829WindowsTippek, trükkök12. rész
2889WindowsWindows XP tippek13. rész
2909WindowsTippek Windows XP-hez14. rész
2919WindowsWindows tippek15. rész
2924WindowsWindows tippek16. rész
2963WindowsWindows tippek17. rész
2973WindowsWindows Tippek18. rész
2981WindowsWindows tippek19. rész
2990WindowsTippek-trükkök20. rész
3027WindowsIIS tippek21. rész
3034WindowsWindows XP tippek-trükkök22. rész
3088WindowsWindows 2000/XP tippek, trükkök23. rész
3133WindowsWindows XP tippcsokor24. rész
3140WindowsWindows XP tippek, trükkök25. rész
3152WindowsXP és IIS tippek - trükkök26. rész
3158WindowsWindows XP tippek, trükkök27. rész
3168WindowsTippek, trükkök28. rész
3170WindowsRegistry trükkök29. rész
3179WindowsTippek, trükkök30. rész
3197WindowsWindows XP tippek, trükkök31. rész
3205WindowsTippek, trükkök32. rész
3214WindowsTippek, trükkök33. rész
3223WindowsTippek, trükkök34. rész
3233WindowsTippek, trükkök35. rész
3271WindowsTippek, trükkök36. rész
3307WindowsTippek, trükkök37. rész
3370WindowsTippek, trükkök38. rész
3399WindowsTippek, trükkök39. rész
3510WindowsTippek, trükkök40. rész
3611WindowsHardverrel kapcsolatos tippek, trükkök41. rész
3668WindowsRegistry trükkök42. rész
3711WindowsTippek, trükkök43. rész
3771WindowsTippek, trükkök44. rész
3801WindowsTippek, trükkök45. rész
3831WindowsTippek, trükkök46. rész
3891WindowsTippek, trükkök47. rész
3921WindowsTippek, trükkök48. rész
3981WindowsTippek, trükkök49. rész
4041WindowsTippek, trükkök50. rész
4071WindowsTippek, trükkök51. rész
4151WindowsTippek, trükkök52. rész
4171C#Tippek, trükkök53. rész
4211WindowsTippek, trükkök54. rész
4251WindowsTippek, trükkök55. rész
4281WindowsTippek, trükkök56. rész
3589DelphiTippek, trükkök57. rész
3718DelphiTippek, trükkök58. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 200. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |