
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 Oracle11.sql nevű parancsállományt a hivatkozott további objektumok létrehozásához.
A beágyazott táblák speciális objektumok, melyekbe adatokat úgy vihetünk be, ha felhasználjuk az objektum konstruktorát, és paraméterként megadjuk az új rekord elemeit. Ez azonban csak az egyik megoldás.
A másik megoldásban a múlt részben ismertetett jellemzőkkel felruházott THE kulcsszót használhatjuk, mely mintegy helyettesíti a speciális táblát.
A mellékelt alkalmazásban ezt próbálhatjuk ki. A Típus mezőben meg kell adnunk egy maximum 20 karakter hosszú szöveget, melyet az ENTER leütésére beszúrhatunk abba a beágyazott táblába, melynek főtáblabeli rekordján a DataGrid kontrolban a kurzormutató éppen áll.
A mellékelt programban a múlt heti alkalmazást egészítettük ki. A program indulásakor tehát a már ismert módon feltöltjük a grid2 DataGrid kontrolt az első rekord beágyazott táblájával. Ezt a CreateSubTable metódusba ágyaztuk:
...
string cText = "SELECT * FROM THE (SELECT PS FROM AIRPLANES WHERE ID = " + idList[position].ToString() + ")";
...
A Típus mezőben megadva a rögzítendő adatot végrehajtjuk az INSERT utasítást, melyet az InsertRecord metódusunk tartalmaz. Először meghatározzuk a legnagyobb CODE értéket a táblában:
Private void InsertRecord()
{
...
int maxcode = 0;
General.CommandText = "SELECT MAX(CODE) FROM THE (SELECT PS FROM AIRPLANES WHERE ID = " + idList[position].ToString() + ")";
connect.Open();
maxcode = Convert.ToInt32(General.ExecuteScalar());
Majd megnövelve eggyel összeállítjuk az INSERT utasítás szövegét, melyet elvégeztetünk az OleDbCommend komponenssel:
maxcode++;
General.CommandText = "INSERT INTO THE (SELECT PS FROM AIRPLANES WHERE ID = " + idList[position].ToString() + ") VALUES (PLANE_INFO(" + maxcode.ToString() + ",'" + typeText.Text + "'))";
General.ExecuteNonQuery();
...
}
Látható, hogy a THE kulcsszó minden DML utasításban, csakúgy mint a lekérdezéseknél is, jól használható.
Az idList objektumban tároljuk a főtábla (AIRPLANES) ID oszlopának értékeit, ebből olvassuk ki az adott kurzorpozíciónak megfelelőt.
Az adatok megadásakor felhasználjuk a PLANE_INFO objektum konstruktorát is, paraméterként az elemekkel.
A DataGrid kontrol frissítéséhez újra meghívjuk a CreateSubTable metódust, mely - már a friss adatokat is tartalmazva – felépíti a táblát.