مشکل سورس گزارش موقع استفاده از استور پروسیجر
زمانی بانک اطلاعات اکسس هست براحتی میتونید سورس گزارش خودتون را Recordsource بگیرید. این طوری دستتون بازه و با تعیین انواع پارامتر انواع خروجی به صورت Report ایجاد میشه. زمانی که بانک اطلاعاتی مون sql server میشه به طور مستقیم نمیشه از Recordsource استفاده کرد چرا که این طور که من فهیدم تمام خروجی ها به صورت Recordset است. و گزارش برخلاف فرم ، سابفرم و لیست باکس و کمبوباکس قابلیت ست شدن با رکوردست رو نداره.
میخواستم بدونم راهکار اساتید محترم تو این زمینه چیست؟ البته با مطالعه ای که کردم ظاهرا لازمه یک جدول بسازیم و دیتا را از سرور به اون منتقل کنیم. اما چگونگی اون رو خواستم از راهنمایی دوستان استفاده کنم
نقل قول: مشکل سورس گزارش موقع استفاده از استور پروسیجر
اگر رکوردست شما adodb نباشه، مشکلی ندارین و میتونین هنوز به شکل زیر از اون در ریپورت استفاده کنین:
me.recordsourse=rs.name
در موردی که شما دارین، میتونین یک کوئری از نوع pass through بسازین که دیتا رو از sql server بگیره و این کوئری رو بعنوان recordsource ریپورت استفاده کنین.
نقل قول: مشکل سورس گزارش موقع استفاده از استور پروسیجر
ممنون استاد mazoolagh
در دریای اکسس واقعا امکاناتی هست که حداقل من این یه مورد رو هنوز بهش نگاهم نکرده بود. امکان بسیار جالبی است.
چون اطلاعاتی که قراره واکشی بشه دارای یکی دو پارامتر مثل بازه زمانی و شماره سند و ... است و در حال حاضر این پارامترها در استورپروسیجر برای واکشی با سرعت بالا قید شده آیا با این روش دیگه نمیتونم از استورپروسیجر استفاده کنم؟ یعنی یه جورایی دوباره لینک به جداول و این در شبکه نسبتا کنده
در ضمن ممنون میشم یه نگاهی هم به آخرین پست در خصوص وب سرویس بفرمایید. با نمونه سایت
http://www.freevbcode.com/ShowCode.asp?ID=7611
هنوز جواب نگرفتم
نقل قول: مشکل سورس گزارش موقع استفاده از استور پروسیجر
مشکلی نیست و میتونین از stroed proc در کوئری pass through استفاده کنین،
کافی هست اون رو با exec صدا بزنین (مشابه همون کاری که سمت sql انجام میدیدن):
exec stored_proc_name
باید schema رو هم در اسمش بیارین همینجور اگر پارامتر نیاز داره مثلا:
exec dbo.OrdersByDate @OrderDate
نقل قول: مشکل سورس گزارش موقع استفاده از استور پروسیجر
تشکر استاد
تست می کنم
البته یه روشی هم دیدم که در اون روش pass through داخل کدهای برنامه ایجاد می شد و مقدار دهی از اونجا انجام میشد
If Not IsNull(CurrentDb.QueryDefs("passThroughGetA").SQL) Then
CurrentDb.QueryDefs.Delete "passThroughA"
End If
Dim qdfPassThrough As DAO.QueryDef
Dim MyDB As DAO.Database
Dim strConnect, SQL As String
Set MyDB = CurrentDb()
Set qdfPassThrough = MyDB.CreateQueryDef("passThroughA")
qdfPassThrough.Connect = "ODBC;DSN=ODBC_SGM;Trusted_Connection=Yes;DATABASE =QQDB"
SQL = "SELECT top 10 VTarikh, VNumHesab, VNumVam, VMablaghVam FROM dbo.tblSabeghe WHERE VNumHesab = " & Me.number & " order by Vtarikh desc"
qdfPassThrough.SQL = "SELECT top 10 VTarikh, VNumHesab, VNumVam, VMablaghVam FROM dbo.tblSabeghe WHERE VNumHesab = " & Me.number & " order by Vtarikh desc"
qdfPassThrough.ReturnsRecords = True
qdfPassThrough.Close
با این روش pass through ایجاد کردم ولی به نظر میرسه سرعت واکشی و کمتر شدن کد نویسی از مزایای پیشنهاد شماست
نکته: استاد اگر زحمتی نیست در یک تایپیک آموزشی در خصوص ایجاد توابع اختصاصی برای برنامه توضیحاتی ارائه بفرمایید. بسیاری از کدهایی که می نویسیم تکرار کدهای قبلیمون هست و اگر توانایی نوشتن توابع را داشته باشیم خیلی راهگشا میشه. واقعا جای چنین مطلبی در تالار اکسس خالیه. توابعی با چند ارگومان و نوع خروجی که داره و ...
نقل قول: مشکل سورس گزارش موقع استفاده از استور پروسیجر
من یک پارامتر تو استورپروسیجرم دارم. و قراره این پارامتر مقدارش رو از فرم بگیره و با اجرای دستور گزارش مربوطه که سورس اون pass through است نمایش داده بشه
exec stored_proc_name FORMS!FRMAAA!NUMBER
با این شیوه ارتباط برقرار نمیشه. در صورتیکه به صورت دستی عددی را به عنوان پارامتر بگذارم و pass through ذخیره کنم
اجرا میشه. که البته هدف ما پویا بودن فرمه که باید حتما بشه مقادیر از فرم به اون داد.
نقل قول: مشکل سورس گزارش موقع استفاده از استور پروسیجر
کوئری های pass through توسط اکسس پردازش نمیشن و مستقیما به sql server فرستاده میشن (اسمش رو خودشه)
یک query def تعریف کنین و
FORMS!FRMAAA!NUMBER رو در sql اون بیارین:
qdf.sql="exec stored_proc_name @param_name=" & FORMS!FRMAAA!NUMBER
نقل قول: مشکل سورس گزارش موقع استفاده از استور پروسیجر
عالی بود استاد. به روش زیر عمل کردم و جواب گرفتم. به این ترتیب با استفاده از استور پروسیجر و پارامترهای اون براحتی و سرعت بالا درخواست مورد نظر از سرور به PT منتسب میشه و PT میشه سورس گزارش ما
Dim qd As QueryDef
Set qd = CurrentDb.QueryDefs("passThroughHesabBill")
qd.Sql = "exec GetBillSP @NumHesab=" & Me.Text1
Me.List4.RowSourceType = "Table/Query"
Me.List4.RowSource = "passThroughHesabBill"