HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

COM-objektumok elérése tárolt eljárásból


Példaprogram letöltése

6212 bájt

Az talán sokak számára ismert, hogy alkalmazásainkból kapcsolatot teremthetünk a Microsoft Office szoftvercsomag elemeivel COM-komponensek interfészein keresztül. Példányosíthatjuk osztályaikat, meghívhatjuk azok metódusait. Talán kevésbé köztudott azonban, hogy ezt megtehetjük a MS SQL Server tárolt eljárásaiból is. Cikkünkben bemutatunk egy példát arra vonatkozóan, hogy miként érhetjük el a MS Word alkalmazás egy funkcióját az említett módon.

A példához szükséges a OLEDB adatbázis, melyet a mellékelt Run.cmd BATCH állomány lefuttatásával hozhatunk létre. A OLEDB.sql script 5. sorában adja meg helyesen a létrehozandó adatbázisfájlok mappájának nevét és elérési útvonalát.
A MS SQL Server rendelkezésünkre bocsát néhány rendszerfüggvényt, melyek segítségével elérhetők a programcsomag alkalmazásait reprezentáló COM-objektumok, példányosíthatjuk őket, meghívhatjuk metódusaikat, az eredményről pedig kapunk visszajelzést.
A példában a megadott szöveget átadjuk paraméterként az OLEDB.sql parancsállomány lefuttatása után az adatbázisba bekerült Checking tárolt eljárásnak, mely meghívja a létrehozott Word alkalmazás-példány CheckSpelling metódusát, amely leellenőrzi a kapott szöveget helyesírás szempontjából. Amennyiben a szöveg helytelen szavakat tartalmaz, akkor azt jelzi. A programban szabtunk egy határt a megadandó szöveg hosszának, ez 128 karakter.
A Word alkalmazás példányának eléréséhez a sp_OACreate rendszerfüggvényt használjuk, melynek szintaxisa a következő:
sp_OACreate progid | clsid,
objecttoken OUTPUT
[ , context ]
A függvény első paraméterében kell megadni a létrehozandó objektum-példány nevét, mely jelen esetben Word.Application. Amennyiben szükséges, használhatjuk a szerver objektum CLSID azonosítóját is, mely egy egyedi számsor.
A második paraméter egy, a tárolt eljárásban deklarált lokális változó, mely a művelet visszatérési értékeként fogható fel, később még fel kell használnunk.
A harmadik paraméter opcionális, a futtatás körülményeivel kapcsolatban adhatunk meg egy értéket. Lehetséges értékei:
  • 1: az objektumpéldány futása processz-en belüli, vagyis ekkor az SQL Server memóriaterületét és egyéb erőforrásait használhatja.
  • 4: ebben az esetben a példány nem használhatja a SQL Server erőforrásait.
  • 5: ebben az esetben mindkét futási forma engedélyezett.
Amennyiben nem adunk meg értéket, az 5 lesz az alapértelmezett.
Az objektum kívánt metódusának meghívásához használjuk a sp_OAMethod rendszerfüggvényt, mely a következő szintaxissal bír:
sp_OAMethod objecttoken, 
methodname 
[ , returnvalue OUTPUT ]
[ , [ @parametername = ] parameter [ OUTPUT ]
Paraméterei:
  • OBJECTTOKEN: A metódus első paraméterében kell megadnunk azt az értéket, melyet a létrehozás metódusában második paraméterként megkaptunk.
  • METHODNAME: A második paraméterben adjuk meg a metódus nevét, jelen esetben CheckSpelling nevet.
  • RETURNVALUE: A harmadik paraméter tartalmazza a függvény meghívásának visszatérési értékét, mely jelezni fogja, hogy a metódus hibátlan, vagy hibás szöveget ellenőrzött. A változó egy lokálisan deklarált változó.
  • PARAMETERNAME: A negyedik paraméter tartalmazza a meghívandó metódus lehetséges paramétereit, az OUT módú paramétereket is. Ez példánkban az ellenőrzendő szöveg lesz.
Az objektum-példány megszüntetésére használjuk a sp_OADestroy rendszerfüggvényt, a következő szintaxissal:
sp_OADestroy objecttoken
A függvény egy paramétert vár, ami nem más, mint az objektum létrehozásakor kapott referencia.
Ezek ismeretében lássuk, hogyan is épül fel a tárolt eljárás. Kezdenünk kell azzal, hogy deklarálunk néhány lokális változót:
create procedure Checking (@Word varchar(128), @Out int output) as
  DECLARE @Token int
  DECLARE @Hresult int
  DECLARE @Showresult bit
  DECLARE @Result int
A következő lépés a Word.Application objektum létrehozása:
  EXEC @Hresult = sp_OACreate 'Word.Application', @Token OUT 
Ezt követően meghívjuk a CheckSpelling metódust a megadott szöveggel:
  EXEC @Hresult = sp_OAMethod @Token, 'CheckSpelling', @Showresult OUT, @Word
Végül megszüntetjük az objektumot:
  EXEC @Hresult = sp_OADestroy @Token
Amennyiben a metódushívások eredménye nem megfelelő, vagyis a @Hresult változó értéke nulla, akkor a tárolt eljárásunk az @Out paraméterben 1 értékkel tér vissza.
  IF @Hresult <> 0
  BEGIN
    SET @Result = 1  
  END
Amennyiben a szöveg hibátlan, vagyis a @Showresult változó értéke 1, akkor a tárolt eljárásunk az @Out paraméterben 0 értékkel tér vissza, egyébként 2 értékkel.
  IF @Showresult = 1
  BEGIN
    SET @Result = 0
  END
  ELSE BEGIN
    SET @Result = 2
  END
  SET @Out = @Result
GO

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