ورود

View Full Version : سوال: اجرای stored procedure sql server در اکسس



simorgh2000
سه شنبه 30 دی 1404, 14:59 عصر
سلام بر اساتید محترم
آیا میشه stored procedure نوشته شده در sql server را در اکسس صدا زد ؟
دیتابیس sql server است و فرم ها در اکسس است .
اساتید محترم لطفا یه راهنمایی بکنید ممنون میشم . یه نمونه کد هم کافیه

mazoolagh
سه شنبه 30 دی 1404, 21:33 عصر
سلام و روز خوش

شما باید از Pass-Through Query استفاده کنین.
البته مشخص نکردین که این stored procedure شما قراره چه کار کنه:
میتونه مقدار برنگردونه (مثل کوئری های DD یا عملیات CUD) یا این که
یک مقدار تکی یا رکوردست برگردونه (برای اکسس کلا فرقی نداره این موضوع - همه رو رکوردست میبینه).

روش کار هم اینجوری هست که در property sheet کوئری یک ODBC connection string هست که باید اون رو درست تنظیم کنین،
بعد دیگه هر کوئری مجار در MS SQL رو میتونین بنویسین (بطور واضح در نمای SQL View) و اجرا کنین.

اجرای sp هم دقیقا مثل همون فرمتی هست که در خود MS SQL استفاده میکنین:
USE [NorthWind];
EXEC [dbo].[Sales by Year]
@Beginning_Date = '1990-01-01',
@Ending_Date = '2020-01-01';

اینجا فرض بر این هست که یک sp به نام Sales by Year دارین
که دوتا پارامتر Beginning_Date@ و Ending_Date@ از نوع datetime داره.

simorgh2000
سه شنبه 30 دی 1404, 22:27 عصر
سلام و روز خوش

شما باید از Pass-Through Query استفاده کنین.
البته مشخص نکردین که این stored procedure شما قراره چه کار کنه:
میتونه مقدار برنگردونه (مثل کوئری های DD یا عملیات CUD) یا این که
یک مقدار تکی یا رکوردست برگردونه (برای اکسس کلا فرقی نداره این موضوع - همه رو رکوردست میبینه).

روش کار هم اینجوری هست که در property sheet کوئری یک ODBC connection string هست که باید اون رو درست تنظیم کنین،
بعد دیگه هر کوئری مجار در MS SQL رو میتونین بنویسین (بطور واضح در نمای SQL View) و اجرا کنین.

اجرای sp هم دقیقا مثل همون فرمتی هست که در خود MS SQL استفاده میکنین:
USE [NorthWind];
EXEC [dbo].[Sales by Year]
@Beginning_Date = '1990-01-01',
@Ending_Date = '2020-01-01';

اینجا فرض بر این هست که یک sp به نام Sales by Year دارین
که دوتا پارامتر Beginning_Date@ و Ending_Date@ از نوع datetime داره.

استادممنون تست کردم درست جواب داد
استاد من از طریق کد به sql وصل میشم و اطلاعات در فرم نمایش میدم آیا بدون کوئری هم امکان داره sp (از طریق vba) را اجرا کرد؟

mazoolagh
چهارشنبه 01 بهمن 1404, 18:22 عصر
سلام دوباره

تاپیک زیر رو ببینین، نمونه کد هم هست:

مشکل سورس گزارش موقع استفاده از استور پروسیجر (https://barnamenevis.org/showthread.php?560992)

simorgh2000
چهارشنبه 01 بهمن 1404, 21:36 عصر
سلام دوباره

تاپیک زیر رو ببینین، نمونه کد هم هست:

مشکل سورس گزارش موقع استفاده از استور پروسیجر (https://barnamenevis.org/showthread.php?560992)

استاد عزیز ممنون مفید بود :تشویق:

simorgh2000
چهارشنبه 01 بهمن 1404, 23:13 عصر
استاد کدی که استفاده کردم و جواب داد

Dim db As DAO.Database

Dim qdfPassThrough As DAO.QueryDef


Dim strConnect, SQL As String


On Error Resume Next
CurrentDb.QueryDefs.Delete "passThroughA"
On Error GoTo 0


Application.RefreshDatabaseWindow




Set db = CurrentDb


Set qdfPassThrough = db.CreateQueryDef("passThroughA")


qdfPassThrough.Connect = "ODBC;DRIVER=SQL Server Native Client 11.0;SERVER=.;UID=sa;PWD=123;"




qdfPassThrough.SQL = "use test_03 ; exec [dbo].[usp_select2] @nam=N'" & Forms!frm_sp!txt_nam & "' , @city=N'" & Forms!frm_sp!txt_city & "';"


qdfPassThrough.ReturnsRecords = True
qdfPassThrough.Close


Set qdfPassThrough = Nothing
Set db = Nothing
Application.RefreshDatabaseWindow


Forms!frm_sp.Form.RecordSource = "passThroughA"