چطور میتوان ازDLL نوشته شده توسط ویژوال بیسیک بعنوان
Extended Stored Procedure استفاده کرد؟ [/quote]
چطور میتوان ازDLL نوشته شده توسط ویژوال بیسیک بعنوان
Extended Stored Procedure استفاده کرد؟ [/quote]
تا جایی که من می دونم نمیشه اگه راهی یافتی به من هم یاد بده چون وی بی فقط اکتیوایکس دی ال ال درست می کنه.
در ضمن چه جوری میشه این تو انگلیسی تایپ کرد؟
یکی از امکانات جالب SQL Server امکان استفاده کردن از COM Object ها در دستورات SQL هست که میتونه استفاده های خیلی زیادی داشته باشه. این کار به دو صورت امکان پذیر هست, یک اضافه کردن dll به صورت یک extended stored procedue و دوم ایجاد یک instance از کلاس مورد نظر که روش ساده تری هست. در روش اول شما میتونید یک method از object رو به صورت یک stored procedure صدا بزنید که توضیحات کاملش در SQL Server Book Online هست یا از این لینک
http://<br /> <a href="http://archi....asp</a><br />
در روش دوم باید یک 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
این سوال برای من هم مطرح بود . از اطلاعات شما متشکرم . اما من یک مشکل دیگر هم داشتم . یک dll که با دلفی نوشته بودم یک تابع با یک خروجی داشت که در یک app خروجی آن قابل دریافت بود اما در یک
extended procedure خروجی آن Null یود .
دوست عزیزم، جنس مقدار برگشتی چی بوده؟ و ضمنا به چه صورت اون رو در SQL Server ثبت و استفاده کردین
از اینکه وقت گذاشتید تشکر می کنم
_________________________________________
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_________________________________________
دوست عزیزم آیا غیر از مقدار Null، هیچ خطای دیگری به شما نمایش نمیده؟
خیر ، البته تابع dll را با برگشتی integer نیز امتحان کردم ، فرقی نداشت . راستش گمان می کنم اگر یک dll همراه با سورس دلفی آن که در MSSQL هم کار کند می داشتم مشکل حل می شد . اما همه مثالهای MSSQL یا در VB است یا در C . مثلا یک مشکل دیگر من ایجادDTS با دلفی بود ولی فقط VB را اکسپورت می کند.
لطفا خود فایل dll کامپایل شده رو اینجا پست کنین
دوست عزیز یک dll با خروجی (integer) عدد 10 را ملاحظه می کنید . App همراه آن خروجی dll را دریافت می کند . نام تابع مربوطه xp_a است.
این لینک رو حتما ببینین:
http://www.howtodothings.com/viewart...px?article=223
از اینکه وقت گذاشتید تشکر می کنم :D