PDA

View Full Version : سوال در مورد Extended Stored Procedure



محسن
سه شنبه 12 فروردین 1382, 23:08 عصر
چطور میتوان ازDLL نوشته شده توسط ویژوال بیسیک بعنوان
Extended Stored Procedure استفاده کرد؟ [/quote]

vadood
پنج شنبه 14 فروردین 1382, 14:59 عصر
تا جایی که من می دونم نمیشه اگه راهی یافتی به من هم یاد بده چون وی بی فقط اکتیوایکس دی ال ال درست می کنه.

در ضمن چه جوری میشه این تو انگلیسی تایپ کرد؟

S.Azish
دوشنبه 18 فروردین 1382, 16:19 عصر
یکی از امکانات جالب SQL Server امکان استفاده کردن از COM Object ها در دستورات SQL هست که میتونه استفاده های خیلی زیادی داشته باشه. این کار به دو صورت امکان پذیر هست, یک اضافه کردن dll به صورت یک extended stored procedue و دوم ایجاد یک instance از کلاس مورد نظر که روش ساده تری هست. در روش اول شما میتونید یک method از object رو به صورت یک stored procedure صدا بزنید که توضیحات کاملش در SQL Server Book Online هست یا از این لینک

http://archive.devx.com/free/mgznarch/vcdj/1998/mar98/sql1.asp

در روش دوم باید یک instance از object درست کرد و به متدهای اون دسترسی پیدا کرد. برای درست کردن instance باید از sp_OACreate stored procedure استفاده کرد و برای صدا زدن متدها یا برای دسترسی به property ها از stored procedure های زیر

sp_OAGetProperty
sp_OASetProperty
sp_OAMethod

برای مثال



DECLARE @Object int
DECLARE @Hresult int
DECLARE @Username varchar(255)
DECLARE @ErrorSource varchar (255)
DECLARE @ErrorDesc varchar (255)

--Create the object
EXEC @Hresult = sp_OACreate 'Word.Application', @Object OUT
--Call the object's property and return the value
EXEC @Hresult = sp_OAGetProperty @Object, 'UserName', @Username OUT
--Destroy the object
EXEC @Hresult = sp_OADestroy @Object

IF @Hresult <> 0
BEGIN
EXEC sp_OAGetErrorInfo @Object, @ErrorSource OUT, @ErrorDesc OUT
PRINT "Error Occurred Calling Object: " + @ErrorSource + " " + @ErrorDesc
RETURN
END

PRINT @Username

dan
سه شنبه 04 اسفند 1383, 09:14 صبح
این سوال برای من هم مطرح بود . از اطلاعات شما متشکرم . اما من یک مشکل دیگر هم داشتم . یک dll که با دلفی نوشته بودم یک تابع با یک خروجی داشت که در یک app خروجی آن قابل دریافت بود اما در یک
extended procedure خروجی آن Null یود .

AminSobati
سه شنبه 04 اسفند 1383, 11:15 صبح
دوست عزیزم، جنس مقدار برگشتی چی بوده؟ و ضمنا به چه صورت اون رو در SQL Server ثبت و استفاده کردین

dan
سه شنبه 04 اسفند 1383, 13:57 عصر
از اینکه وقت گذاشتید تشکر می کنم

_________________________________________
library testdll;

uses
SysUtils,
Classes;

{$R *.res}

function xp_a:string;
begin
{for test}
result:='10';
end;

exports xp_a;

end.
_________________________________________
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

exec sp_addextendedproc N'xp_a', N'testdll.dll'
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
_________________________________________
declare @a varchar(10)
exec master..xp_a @a output
select @a as output_________________________________________

AminSobati
چهارشنبه 05 اسفند 1383, 17:07 عصر
دوست عزیزم آیا غیر از مقدار Null، هیچ خطای دیگری به شما نمایش نمیده؟

dan
پنج شنبه 06 اسفند 1383, 09:20 صبح
خیر ، البته تابع dll را با برگشتی integer نیز امتحان کردم ، فرقی نداشت . راستش گمان می کنم اگر یک dll همراه با سورس دلفی آن که در MSSQL هم کار کند می داشتم مشکل حل می شد . اما همه مثالهای MSSQL یا در VB است یا در C . مثلا یک مشکل دیگر من ایجادDTS با دلفی بود ولی فقط VB را اکسپورت می کند.

AminSobati
جمعه 07 اسفند 1383, 14:14 عصر
لطفا خود فایل dll کامپایل شده رو اینجا پست کنین

dan
یک شنبه 09 اسفند 1383, 14:53 عصر
دوست عزیز یک dll با خروجی (integer) عدد 10 را ملاحظه می کنید . App همراه آن خروجی dll را دریافت می کند . نام تابع مربوطه xp_a است.

AminSobati
دوشنبه 24 اسفند 1383, 10:46 صبح
این لینک رو حتما ببینین:
http://www.howtodothings.com/viewarticle.aspx?article=223

dan
سه شنبه 25 اسفند 1383, 09:02 صبح
از اینکه وقت گذاشتید تشکر می کنم :D

AminSobati
چهارشنبه 26 اسفند 1383, 01:23 صبح
موفق باشید :)