ورود

View Full Version : اجراي كويري پارامتر دار بوسيله كد نويسي



RESMAILY
یک شنبه 14 آذر 1389, 08:02 صبح
به نام خدا
با سلام. دوستان در صورت امكان راهنمايي بفرمايند. سوال اين است كه ايا مي توان يك Query كه داراي يك يا چند پارامتر مي باشد را بوسيله كدنويسي از درون برنامه با ارسال پارامتر اجرا نمود و مثلا آن را datasource يك فرم يا گزارش قرار داد؟
توجه بفرماييد كه اين كار را مي توان با عبارات SQL انجام داد. حتي مي شود كه پارامترهارا به سبك Access يك يا چند كنترل از يك فرم خاص تعريف نمود. ولي منظور من متفاوت است و هدف آن است كه يك Query آماده را (باصطلاح كامپايل شده)كه داراي پارامترهاي مثلا X و Y است، بدينوسيله اجرا نماييم. چيزي شبيه به SP در Sqlsever. :متفکر:

wolfstander
یک شنبه 14 آذر 1389, 11:13 صبح
سلام
امکان داره
شما تو قسمت criteria که مربوط به شرط گذاشتن توی کوئری هاست، با استفاده از Build شرط خودتون رو بنویسید
شبیه stored Procedure ها نمیشه گفت ولی در حد زیادی همون کارآیی رو داره

RESMAILY
یک شنبه 14 آذر 1389, 12:24 عصر
به نام خدا
با سلام. با تشكر منظور بنده نحوه ساخت نيست، منظور آن است كه چگونه اين كويري ساخته شده را ازدرون برنامه صدا بزنيم. اصلا مي شود؟ اگر مي شود نحو يا syntax آن چگونه است؟

wolfstander
یک شنبه 14 آذر 1389, 13:05 عصر
سلام
شما ابتدا کوئری خود را ایجاد نمایید
بعد مطابق با عکسهای ضمیمه، از ویزاردهای اکسس استفاده کنید

همانطوری که میبینید، در دکمه اضافه شده این کدها اضافه می شود

Private Sub Command0_Click()
On Error GoTo Err_Command0_Click

Dim stDocName As String

stDocName = "Query1"
DoCmd.OpenQuery stDocName, acNormal, acEdit

Exit_Command0_Click:
Exit Sub

Err_Command0_Click:
MsgBox Err.Description
Resume Exit_Command0_Click

End Sub

RESMAILY
دوشنبه 15 آذر 1389, 08:11 صبح
به نام خدا
با سلام و تشكر از وقتي كه صرف نموديد. در همين مثال حالا اگر كويري داراي «پارامتر» بود و نياز به مقدار دهي داشته باشد، پنجره آكسس باز مي شود و مقدار پارامتر را طلب مي كند. سوال من اين است كه آيا مي شود همان موقع كه كويري را در برنامه صدا مي زنيم، مقادير مورد نياز پارامترها را بوسيله كدنويس ارسال نماييم؟ در اينصورت نحو آن چگونه است؟
ولف استاندر عزيز مطلع هستند كه مي شود با آوردن عبارت SQL كويري مزبور مي شود اين كاررا نمود. يا مي شود كه پارامترها را فيلهايي از فرم جاري و صدا زننده كويري قرار داد. اما اينهها مورد نظر نيستند. شما براي صدا زدند يك Sp داراي پارامتر چيزي شبيه به كد زير را به كار مي بريد

EXEC Myquery ,Parametr1,Paremetr2
البته چيزي شبيه به كد فوق (الآن شكل سينتاكس را درست بخاطر نمي آورم) اما هرچه مي گردم در آكسس هنوز جيزي پيدا نكردم. آيا در كتابخانه DAO بايد گشت يا ADO يا خود آكسس چنين چيزي را پشتيباني مي كند يا آنكه چي؟

wolfstander
دوشنبه 15 آذر 1389, 08:50 صبح
سلام
یک نمونه برای شما میفرستم، شما نگاه کن ببین کوئری در قسمت Criteria چه ورودی ای از فرم را میپذیرد
هیچ محدودیتی هم وجود ندارد
شما میتوانید از دستورات sql مثل like هم در اینجا استفاده کنید

RESMAILY
دوشنبه 15 آذر 1389, 13:16 عصر
به نام خدا
با سلام. بازهم متشكرم. بنده هم به اين نمونه اشاره كرده بودم. يعني ارسال پارامتر ازيك فرم خاص بشرطي كه كويري را از قبل محدود به همان فرم كرده باشيم. حتي مي شود عبارت را بصورت ذيل استفاده كر د

SELECT Table1.NameKala, Table1.ShomareFactor, Table1.TedadKharid
FROM Table1
WHERE (((Table1.NameKala)='" & strX & "']));

اما معلوم است كه موضوع سوال اندكي متفاوت تر است.
من فكر مي كنم سوالي كه طرح شد در طراحي برنامه ها مخصوصا برنامه هايي كه روي شبكه قرار مي گيرند و يا به آكسس پروجكت تبديل مي شوند كاربرد زيادي داشته باشد.

mazoolagh
دوشنبه 15 آذر 1389, 23:02 عصر
اگر درست فهمیده باشم منظور این دوستمون این هست که چگونه به یک کوئری پارامتریک بتونیم پارامتر رو پاس کنیم.

روی همین مثالی که جناب wolfstander آپلود کردن فرض کنید که یک کوئری پارامتریک بنام PQ1 به صورت زیر تعریف کردیم:


PARAMETERS SF Long;
SELECT * FROM TABLE1
WHERE ShomareFactor=[SF]
حالا برای ارسال پارامتر به کوئری توسط کد به شکل زیر عمل میکنیم:


Dim QD As QueryDef
Set QD = CurrentDb.QueryDefs("PQ1")
QD.Parameters("SF") = value
برای راحتی مثال جناب wolfstander رو با تغییرات دوباره آپ میکنم.