Delphi - Multi-tier alkalmazásfejlesztés MIDAS komponensekkel

Multi-tier 6. rész

forráskód letöltése
Soron következő cikkünkben azt vizsgáljuk, hogy a szerver miként vezérelhető kliensből SQL parancsbevitellel. Szerver oldal

Ebben a cikkben azt tárgyaljuk, hogy hogyan lehet a COM-szerverünk által szolgáltatott adattartalmat SQL-parancsokkal vezérelni a kliensalkalmazásból.

Ehhez átírtuk kissé a régi COM-szerverünket.
Az adatmodulon változatlanul hagytuk a TDatabase komponenst, de az előző példák szerverétől eltérően most a TTable komponenst TQuery komponensre cseréltük (Query1), és a TDataSetProvider komponens (DataSetProvider1) DataSet tulajdonságában ezt adtuk meg.
Ezenkívül a provider Options tulajdonságánál a poAllowCommandText opciót True-ra állítottuk, hogy a provider elfogadjon SQL-parancsokat a kliensalkalmazástól, tehát hogy a provider beállításait a kliensoldalról SQL-utasításokkal tudjuk vezérelni, vagyis a kliensből határozhatjuk meg a TClientDataSet-be lekért adatok struktúráját (oszlopait, szűréseit, stb.).
Ezt a szervert szintén regisztrálni kell az előző cikkekben leírt módon, vagyis le kell futtatni az alkalmazást (Run/Parameters parancs, /regserver paraméter, azután Run).

Kliens oldal

A kliens-oldalon most csak egy TDBGrid komponenst használtunk, mert ebben a SELECT SQL-utasítással bármelyik táblánk adatait lekérdezhetjük az alkalmazásszerveren keresztül.
Az "Új parancs"-gomb megnyomása után beírjuk a TEdit-be az új SQL-parancsot, majd a "Végrehajtás"-gombbal elindítjuk a SELECT-utasítás végrehajtását. Az SQL SELECT utasításának megadására a TClientDataSet CommandText tulajdonságát használtuk, a végrehajtásra pedig az Open metódust. (Ezt azért oldottuk meg így, mert a SELECT utasítás eredményhalmazt generál.)
Az "Új parancs" gomb OnClick eseménykezelőjében (TfrmFoform.Button1Click) lekódoltuk a DM.ClientDataSet1 kliens adathalmaz lezárását, a "Végrehajtás" gomb OnClick eseménykezelőjébe írt kód pedig elküldi a szerverre az Edit1-be beírt SELECT SQL utasítást, majd újra megnyitja a kliens adathalmazt. Ekkor a kliensalkalmazásba letöltődik a szerverről az SQL utasításnak megfelelő eredményhalmaz.

Példaképpen próbáljuk ki a következő SQL-parancssorokat:

select * from Szemelyek: A Szemelyek táblából megjeleníti az összes felvitt személy minden oszlopát

select * from Jelentkezes: A Jelentkezes táblából megjeleníti az összes felvitt személy minden oszlopát

select NEV, KORA from Szemelyek: A Szemelyek táblából megjeleníti az összes felvitt személy nevét és életkorát

select avg(kora) from Szemelyek: A Szemelyek táblából megjeleníti a felvitt személyek átlagéletkorát

select NEV, KORA from Szemelyek where KORA>30: A Szemelyek táblából megjeleníti minden olyan személy nevét és életkorát, aki idősebb 30 évesnél

select * from Jelentkezes where SZEMELYKOD=3: A Jelentkezes táblából megjeleníti a 3-as személykódú személyhez felvitt rekordok összes oszlopát

select * from Jelentkezes where FELADAT like 'a%': A Jelentkezes táblából megjeleníti az összes 'a'-val kezdődő feladat minden oszlopát


És végül nézzünk egy kicsit "vidámabb" lekérdezést:

select t1.NEV,t1.HELYSEG,t1.KORA,t2.DATUM,t2.FELADAT
from Szemelyek t1, Jelentkezes t2 where t1.SZEMELYKOD=t2.SZEMELYKOD order by NEV,DATUM

(Ezt a sort sortörés nélkül másoljuk át a TEdit-be, itt csak az olvashatóság kedvéért törtük meg a sort!)

Ez a parancssor összekapcsolja (JOIN) a két táblát (Szemelyek és Jelentkezes) a SZEMELYKOD alapján. A Szemelyek (t1) táblából megjeleníti a NEV és HELYSEG és KORA (életkor) oszlopokat, a Jelentkezes (t2) táblából pedig a DATUM és FELADAT oszlopokat, és mindezt névre (NEV) és azon belül dátumra (DATUM) rendezi.

Multi-tier cikksorozat