|
|
MS SQL adatbázis kezelés Delphi-ből
16. rész
|
|
Példaprogram letöltése
15753 bájt
|
Mellékelt példában a TStoredProc komponens használatát mutatjuk be, MS SQL adatbázis környezetben. Megtudhatjuk, hogy miként aktivizálhatjuk az adatbázisunkban elhelyezett tárolt eljárásainkat.
Az előző fejezetben tárgyalt tárolt eljárások elérésére a TStoredProc objektum szolgál. Mint a TTable és a TQuery komponensek, a TStoredProc is a TDataSet leszármazottja, így elég sok azonos metódusuk és property-jük van. A Delphi szempontjából a tárolt eljárások használatának két előnye van. Először is, ha az adatokon elvégzendő műveleteket arra bízzuk, aki a legjobban ért hozzá, vagyis az adatbázisszerverre, akkor biztosak lehetünk benne, hogy az adatfeldolgozás teljesítménye és sebessége sokkal jobb lesz. Másrészt az adatokat úgyis az adatbázisszerveren tároljuk, hálózati forgalmunk nagymértékben csökken, ha a táblák helyett csak a műveletek eredményét kérjük el.
TStoredProc komponens létrehozása után először hozzá kell rendelnünk azt az adatbázisszerverhez. A DatabaseName property mutathat egy BDE Aliasra, vagy egy TDatabase komponensre. Ha csatlakozunk az adatbázishoz, az SQL Serveren megvalósított tárolt eljárás nevét kiválaszthatjuk egy lenyíló listából, ha a StoredProcName property-re kattintunk. Ekkor a paraméterek nevei automatikusan a Params property-be kerülnek. Ha az adatbázis éppen nem elérhető, a tárolt eljárás nevét és a paraméterek adatait kézzel kell beírnunk. A paramétereket nevükön kívül típusuk is jellemzi. A Delphi-ben 4 féle paramétertípus ismert.
Az input paramétert mi adjuk át a tárolt eljárásnak feldolgozásra. Az output paramétert a tárolt eljárásban az OUTPUT kulcsszóval definiáltuk, és az eljárástól kapunk bennük vissza értékeket. Mindkét előbbi funkciót megvalósítja az input/output típus. Végül létezik egy result típus, amibe azt az értéket kapjuk vissza, amit a tárolt eljárásban RESULT utasítással állítunk be. Egy Result nevű result típusú paraméter mindig létrejön, mert az SQL Server tárolt eljárásai mindig adnak vissza visszatérési értéket. Ha az adatbázis elérhető, és kiválasztjuk a megfelelő tárolt eljárást, a paraméterek nevei mellett azok adattípusát is automatikusan megkapjuk. A Params tömb Value property-jének beállításával a paraméterekhez default értéket is hozzárendelhetünk. Korábbi Delphi verziók csak a paraméter nevét tudták átvenni, így az adattípusokat kézzel kellett beállítani. Ha a tárolt eljárás nevét csak futásidőben állítjuk be, akkor a TParam objektumok nem jönnek létre automatikusan, nekünk kell azokat felügyelnünk. Ehhez a TParam Create metódusát és a TParams AddParam metódusát használhatjuk. A következő példában egy tervezési időben létrehozott és a pubs adatbázishoz kapcsolt TStoredProc komponenshez futási időben rendeljük hozzá az előző fejezetben létrehozott au_info2 nevű tárolt eljárást. Az egyik paraméternek értéket is adunk.
var
P1, P2: TParam;
begin
with StoredProc1 do
begin
StoredProcName := 'GET_EMP_PROJ';
Params.Clear;
P1 := TParam.Create(Params, ptInput);
P2 := TParam.Create(Params, ptOutput);
try
Params[0].Name := '@lastname';
Params[1].Name := '@firstname';
ParamByname('@lastname ').AsString := 'C%';
ExecProc;
finally
P1.Free;
P2.Free;
end;
end;
end;
A paraméterek beállítása után az ExecProc metódussal lehet a tárolt eljárást futtatni. Mint ahogy a Query komponensnél már láttuk, itt is van Prepare metódus, ami előkészíti a terepet a tárolt eljárás számára. Ilyenkor a program ellenőrzi a paramétereket, inicializálja a BDE-t, üzenetet küld az SQL Servernek a tárolt eljárásról és lefoglalja a művelethez szükséges erőforrásokat. Ha nem adjuk ki a Prepare utasítást, a tárolt eljárás végrehajtása előtt a Delphi automatikusan végrehajt egy Prepare-t, majd utána egy Unprepare-t is, hogy a lefoglalt erőforrások felszabaduljanak. Ha a tárolt eljárást sokszor hívjuk egymás után, célszerű nekünk kiadnunk egy Prepare-t az egész műveletsor előtt, így az nem hajtódik végre minden hívás előtt. Csak arra kell figyelnünk, hogy ha futásidőben megváltoznak a paraméterek (de nem az értékek!), a Prepare-t újra végre kell hajtani.
Prepare végrehajtásakor tehát a TStoredProc paraméterei és az SQL Server tárolt eljárásának paraméterei egymáshoz rendelődnek. Ez történhet úgy, hogy az egyes paramétereket a nevük azonosítja, de történhet a sorrendjük alapján is. Ez esetben nagyon oda kell figyelni, hogy adattípus szerint is találkozzanak az egyes paraméterek. Első esetben a ParamBindMode property értéke pbByName, második esetben pbByNumber.
A tárolt eljárás végrehajtása után háromféleképpen kaphatunk vissza értéket. Visszakaphatunk egy adathalmazt vagyis egy táblát, amit egy TDatasource komponensen keresztül megjeleníthetünk mondjuk egy DBGrid-ben. Visszaadhatunk értéket az OUTPUT paramétereken keresztül, illetve a result paraméteren keresztül is.
Ha a tárolt eljárásunk adathalmazt is ad vissza eredményként, akkor az Open metódus hívásával vagy az Active property TRUE értékre állításával tudjuk megnyitni. Ha nem várunk eredményt, akkor elég az ExecProc metódust meghívni.
Példaprogram
Korábbi példákban már használtuk a Test1 aliast, amit az SQL Server pubs mintaadatbázisára definiáltunk. A példában az adatbázis publishers tábláját fogjuk 'karbantartani' tárolt eljárásokon keresztül. Ehhez három tárolt eljárást írunk, amit a 'Tárolt eljárások létrehozása' gomb be is illeszt az SQL Serverbe. A demo_add_publisher tárolt eljárással fogunk új kiadót beszúrni a táblába.
CREATE PROCEDURE demo_add_publisher
@pub_id int,
@pub_name varchar(40),
@city varchar(20),
@state char(2),
@country varchar(30)
AS
insert into publishers (pub_id, pub_name, city, state, country)
values (@pub_id, @pub_name, @city, @state, @country)
Módosításkor a demo_update_publishert, törléskor a demo_delete_publishert hívjuk meg.
CREATE PROCEDURE demo_update_publisher
@pub_id int,
@pub_name varchar(40),
@city varchar(20),
@state char(2),
@country varchar(30)
AS
update publishers
set pub_name = @pub_name, city = @city,
state = @state, country = @country
where pub_id = @pub_id
CREATE PROCEDURE demo_delete_publisher
@pub_id int
AS
delete publishers where pub_id = @pub_id
Az éppen meghívott tárolt eljárás szövegét az sp_helptext rendszerszintű tárolt eljárással kérdezzük le, és kiírjuk a képernyőre.
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 97. 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!
|