all groups > sql server (alternate) > july 2003 >
You're in the

sql server (alternate)

group:

mssql server


mssql server udo polder
7/30/2003 7:33:15 AM
sql server (alternate):
hello

can anyone tell me if it is possible to use activeX components (com/dcom) in
MS-sql stored procedures?

tia

Re: mssql server Helmut Wöss
7/30/2003 8:09:33 AM
yes it is! Here is an example from a german forum (using Delphi for
programming the com+ object):

Schritt 1: COM+ Objekt (alias ActiveX alias COM-Objekt) in Delphi erzeugen


unit OSSPCOM_Impl;
{$WARN SYMBOL_PLATFORM OFF} interface uses
ActiveX, Mtsobj, Mtx, ComObj, OSSPCOM_TLB, StdVcl; type
TOSSPCOMObj = class(TMtsAutoObject, IOSSPCOMObj)
protected
function Get_Daten: OleVariant; safecall;
procedure DoWork(vInput: OleVariant; out vOutput: OleVariant); safecall;
{ Protected-Deklarationen }
end; implementation uses ComServ; function TOSSPCOMObj.Get_Daten:
OleVariant;
begin
Result := 'Zeichenkette aus dem COM+ Objekt';
SetComplete;
end; procedure TOSSPCOMObj.DoWork(vInput: OleVariant; out vOutput:
OleVariant);
begin
vOutput := vInput + ' (ok)';
SetComplete;
end; initialization
TAutoObjectFactory.Create(ComServer, TOSSPCOMObj, Class_OSSPCOMObj,
ciMultiInstance, tmApartment);
end.

Das kompilierte COM+ Objekt wird danach in eine COM+ Anwendung installiert
(siehe Komponentendienste von Windows 2000/XP/2003).

Schritt 2: Stored Procedure ruft das eigene COM+ Objekt auf

CREATE PROCEDURE spCallCOMplusObj
@sTXT VARCHAR(50) OUTPUT
AS
Declare @Object int, @hr int, @RetVal int, @iStatus int
SET @iStatus = 1
-- Objektinstanz erzeugen
Exec @hr = sp_OACreate '{0E9447C4-EF22-4570-B202-45D50D3B5EFB}', @Object
OUTPUT
IF @hr = 0
BEGIN
SET @iStatus = 2
END
-- Interface-Methode (Property) abfragen
Exec @hr = sp_OAGetProperty @Object, 'Daten', @sTXT OUTPUT
IF @hr=0
BEGIN
SET @iStatus = 3
END
Exec @hr = sp_OAMethod @Object, 'DoWork'
IF @hr=0
BEGIN
SET @iStatus = 4
END
Exec @hr = sp_OADestroy @Object
Return @iStatus



Schritt 3: Funktion im Query Analyzer des MS SQL Servers testen

DECLARE @sTEXT VARCHAR(50)
DECLARE @iResult INT
EXEC @iResult = spCallCOMplusObj @sTEXT OUTPUT
SELECT @iResult,@sTEXT
Als Ergebnis muss die Zeichenkette aus dem COM+ Objekt sichtbar sein.

hth,
Helmut

"udo polder" <udo@polder.cd> schrieb im Newsbeitrag
news:bg7l5b$kft$03$1@news.t-online.com...
[quoted text, click to view]

AddThis Social Bookmark Button