sp_OAMethod - Katastrofal fejl
Jeg har lavet en activeX control i Visual C++ med MFC. Den har et interface og to funktioner:long test()
long GetBorgerPlan(long BrugerId, long BorgerId, DATE TilDato, DATE FraDato, BSTR IdList)
Jeg kan kalde begge funktionerne med ActiveX Control Test Container.
Men det er meningen at jeg skal kunne kalde dem fra SQL, og det er her det går galt.
Kaldet til sp_OACreate går godt, men kaldet til sp_OAMethod går galt, lige gyldig hvilken af de to funktioner jeg vil kalde.
Her er min sql kode:
DECLARE @object int -- Handle til COM objekt
DECLARE @hr int -- HRESULT fra COM kald (ikke returparameter)
EXEC @hr = dbo.sp_OACreate 'DISPOOBJECT.DispoObjectCtrl.1', @object OUT
IF @hr <> 0 -- Create af objekt er fejlet. Serveren kan evt. v‘re overbelastet, eller
-- objektet kan mangle registrering
BEGIN
EXEC sp_displayoaerrorinfo @object, @hr -- test (udvid evt. med log ?)
select @ReturnCode=2
RETURN
END
-- Saa er objektet skabt. Kald metode paa Objekt
DECLARE @result int
SELECT @result=0
SELECT @hr=0
EXEC @hr = dbo.sp_OAMethod @object, 'GetBorgerPlan', @result output, @BrugerId, @BorgerId, @FraDato, @TilDato, @Statuskode
-- EXEC @hr = dbo.sp_OAMethod @object, 'Test', @result output
IF @hr = 0
BEGIN
select @ReturnCode=@result
END
IF @hr <> 0 -- Kald til skabt objekt er fejlet.
BEGIN
EXEC sp_displayoaerrorinfo @object, @hr -- test(udvid evt. med log ?)
select @ReturnCode=4
select @hr=0 -- reset HRESULT
END
EXEC @hr = dbo.sp_OADestroy @object
IF @hr <> 0
BEGIN
EXEC sp_displayoaerrorinfo @object, @hr
select @ReturnCode=8
RETURN
END
Resultatet er:
@ReturnCode = 4
OLE Automation Error Information
HRESULT: 0x8000ffff
Source: ODSOLE Extended Procedure
Description: Katastrofal fejl
Jeg kører Windows 2000, SQL Server 2000 og Visual CPP 6.
Da returncode er 4, så må objektet jo være blevet lavet. Så hvorfor kan jeg så ikke kalde min funktion?
Hvad består fejlen i og hvordan kan jeg rette den?
