HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Hasznos apróságok PL/SQL-ben


Példaprogram letöltése

16483 bájt

Cikkünkben olyan hasznos apróságokat gyűjtöttünk össze, melyek jól jöhetnek olyan esetekben, ha a PL/SQL nyelvet kell használni, mert az alkalmazás Oracle rendszerben tárolt adatokkal dolgozik. A példákban megvizsgáljuk, hogyan lehet egy tábla utolsó rekordját, valamint minden n. rekordját lekérdezni egy-egy SQL utasítással. A cikk második felében bemutatjuk, hogyan tudjuk a DataGridTableStyle osztály felhasználásával egyszerűen megcserélni egy DataGrid kontrol két tetszőleges oszlopát.

A példaprogram használata előtt létre kell hozni egy SOUSER sémát az Oracle adatbázis-rendszerünkben, és fel kell ruházni DBA jogosultsággal. A sémába bejelentkezve le kell viszont futtatni a mellékelt Oracle.sql nevű parancsállományt a hivatkozott további objektumok létrehozásához.
A Tip01 projekt futtatásakor, amennyiben a Table1 tábla nem rendelkezik rekordokkal, első lépésként fel kell tölteni adatokkal programból (Feltöltés gomb).
Az Oracle rendszer használatakor igen nagy segítséget jelent, hogy minden egyes adattábláról rendelkezésre áll egy konstans információ azzal kapcsolatban, hogy hány rekordot is tartalmaz a tábla. Ez a ROWNUM változó értéke, melyet most felhasználunk a feladatok megoldására. Az következő két, Oracle-t használó példa a Tip01 projektben található.
Tábla utolsó rekordjának lekérdezése
A feladat egyértelmű lenne, ha programból szeretnénk az utolsó rekordot lekérdezni, hiszen ekkor csak a táblát tartalmazó objektum megfelelő property-jét kellene megvizsgálni. Azonban akkor, amikor a művelet eredményére egy tárolt alprogram részművelete támaszkodik, és nem léphetünk ki a hívó kódba, egy SQL utasítást kell használnunk.
A példaprogramunkban az űrlapra helyezett TabControl UTOLSÓ REKORD füle alatt kérdezhetjük le az utolsó rekord értékeit a LEKÉRDEZÉS gomb megnyomásával. Az eredmény a három TextBox kontrolban látható majd.
Ehhez nem kell mást tennünk, mint az Oracle adatbázisklienshez történő kapcsolódás után az OleDbCommand komponens CommandText property-jében megadni a következő SQL utasítást:
SELECT *
FROM (SELECT rownum r,Table1.* FROM Table1 ORDER BY ID) WHERE r IN(SELECT count(*) FROM Table1)
A tábla minden n. rekordjának lekérdezése
A MINDENM N. REKORD fül alatt található szövegmezőben meg kell adnunk egy számot 1 és 99 közt, majd meg kell nyomnunk a LEKÉRDEZÉS a Table1 táblában található minden n. rekord lekérdezéséhez.
A megoldás itt is egy SQL utasítás, melyet az OleDbDataAdapter komponens megfelelő property-jében kell elhelyeznünk, és feltöltenünk az eredménnyel a DataTable objektumot.
Az SQL utasítás pedig:
SELECT ID, NAME, PRICE
FROM (SELECT Table1.*, rownum r FROM Table1)
WHERE MOD(r," + nr.ToString() + ") = 0
A parancs karakterláncában a változó értéke az az „n” szám, melyet megadtunk a szövegmezőben.
Oszlopok cseréje DataGrid kontrolban
A példaalkalmazás a Tip02 projektben található.
Példánkban a mellékelt Employees.xml állománnyal töltjük fel induláskor a DataGrid kontrolunkat, majd a szerkesztőmezőkben megadott két számnak megfelelő oszlop helyét megcseréljük a kontrolban.
Ehhez felhasználjuk a DataGridTableStyle osztály lehetőségeit, melynek segítségével tábla-sémákat deklarálhatunk a DataGrid kontrolban, milyen stílusban szeretnénk megjeleníteni adatainkat.
A megoldásban nem teszünk mást, mint megadunk egy kezdeti stílust a kontrolhoz:
...
DataGridTableStyle tStyle = new DataGridTableStyle();
tStyle.MappingName = ds.Tables[0].TableName; 
dataGrid1.TableStyles.Add(tStyle);
A táblastílusok minden oszlopra oszlopstílusokat is tartalmaznak, ezt reprezentálja a DataGridColumnStyle osztály. A DataGrid kontrol eredeti stílusának elemein végighaladva megkeressük a megadott oszlopokat a listában, ezeket felfűzzük egy új táblastílus objektumra, majd az új stílust adjuk vissza DataGrid kontrolnak a régi eldobása után.
A műveletet a ChangeColumns metódusban végezzük el, melynek paramétereiben megadtuk a két cserélendő oszlop sorszámát. Tehát lekérdezzük az eredeti sorrendet tartalmazó stílust:
DataGridTableStyle etStyle = dataGrid1.TableStyles[0];
Megvizsgáljuk hány elemet tartalmaz:
int counter = etStyle.GridColumnStyles.Count;
Létrehozzuk az új stílust az eredeti névvel:
DataGridTableStyle newStyle = new DataGridTableStyle();  
newStyle.MappingName = dataGrid1.TableStyles[0].MappingName;
Majd az elemeken végigmenve az új sorrendre tekintettel felfűzzük az oszlopstílusokat:
for(int i = 0; i < counter; ++i)  
{
Ha megtaláltuk az első megadott számnak megfelelő oszlopot, akkor a következő elemként a másik számnak megfelelő oszlopot fűzzük fel:
  if (i == col1)
  { newStyle.GridColumnStyles.Add(etStyle.GridColumnStyles[col2]);
  }
  if (i == col2)
  {
newStyle.GridColumnStyles.Add(etStyle.GridColumnStyles[col1]);
  }
  ...
}
Ha feltöltöttük az új DataGridTableStyle objektumot, töröljük a régit:
dataGrid1.TableStyles.Remove(etStyle);
Majd felfűzzük az újat:
dataGrid1.TableStyles.Add(newStyle);

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 225. 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 |