View Full Version : سوال: درخواست کمک در اکسس
ziba56
پنج شنبه 20 فروردین 1394, 22:11 عصر
با سلام و عرض خسته نباشید
من در حد کار با جداول ,کویری ها , فرمها و گزارشات در اکسس کار کرده ام ولی برنامه نویسی یا ماکرونویسی را اصلا.
من دو جدول دارم که از طریق یک فیلد کلیدی ( کد دانش آموزی ) بینشون ارتباط یک به چند برقرارکرده ام برای این جداول تعدادی کویری دارم که در هر کویری دانش آموزان یک دروره خاص مشاهده می شوند که از این کویری ها فرمهایی جداگانه ایجاد شده است.
مشکل من این است که میخواهم در هر فرم یک دکمه داشته باشم که هر وقت روش کلیک می کنم یک کویری به نام Query1 باز بشه و لیست تمام دوره هایی که رکورد جاری (مثلا خانم آرزو) از آن فرم در آن دوره ها شرکت کرده است نمایش داده شود. این دکمه در همه فرمها وجود داشته باشد ولی اطلاعاتش را از یک کویری بگیرد.
نمی دونم تونستم منظورم را واضح بیان کنم؟
آیا با یک کد sql در کویری می شه این کار را انجام داد؟ اگر لطف کنید مرا رهنمایی بفرمایید یک دنیا سپاسگذارتان خواهم بود
نمونه فایل ضمیمه شده است
Abbas Amiri
جمعه 21 فروردین 1394, 13:29 عصر
سلام
با فشردن ALT+F11 وارد VBE شودو در منوی Insert>Module را انتخاب کنید و در آنجا کدهای زیر را کپی کنید.
Function ShowQ1(Code As Integer)
Dim q As QueryDef, s As String
Dim q2 As QueryDef, i As Integer
On Error Resume Next
DoCmd.DeleteObject acQuery, "Qtemp1"
Set q = CurrentDb.QueryDefs("query1")
s = q.SQL
i = InStr(s, ";") - 1
s = Left(q.SQL, i) & " WHERE (Table2.code)=" & Code
Set q2 = CurrentDb.CreateQueryDef("Qtemp1", s)
Set q2 = Nothing
Set q = Nothing
DoCmd.OpenQuery "Qtemp1"
End Function
از قسمت VBEخارج شوید . حالا در پنجره Properties>Events در سمت راست رویداد On Click باتن(ها) که عبارت [Embedded Macro] نوشته شده روی سه نقطه کلیک کنید تا ماکروی آن باز شود .تنظیمات قبلی را حذف کنید و درمنوی New Action گزینه Run Code را انتخاب کنید . در قسمت Function Name عبارت:
ShowQ1(Forms![شیمی]!Code)
را جهت فرم شیمی درج کنید . وبرای بقیه باتن ها در فرم های دیگر نام فرم را در قسمت براکت عبارت فوق جایگزین کنید.
ziba56
جمعه 21 فروردین 1394, 18:26 عصر
ببخشید من دوباره مزاحم شدم , دو تا سوال دارم :
1) آیا میشه کاری کرد فراخوانی ماژول برای On Click دکمه مورد نظر , اتوماتیک انجام شود. یعنی اگر من از فرم شیمی یک کپی گرفتم و در قسمت record Source خصوصیات فرم جدید , ارتباط کویری را از شیمی به فیزیک تغییر داده و ذخیره کردم , این دکمه دیگر نیازی به تغییر نداشته باشد و خودش اتوماتیک با تغییر record Source به کویری مثلا فیزیک , نام فرم در قسمت براکت عبارت :
ShowQ1(Forms![شیمی]!Code)
را به فیزیک تغییر دهد؟
2) اگر بخواهم با کلیک روی دکمه مورد نظر به جای کویری یک فرم با همان شرایط قبل باز بشه در کد مربوطه چه تغییراتی باید بدهم؟
با تشکر
Abbas Amiri
شنبه 22 فروردین 1394, 21:09 عصر
ببخشید من دوباره مزاحم شدم , دو تا سوال دارم :
1) آیا میشه کاری کرد فراخوانی ماژول برای On Click دکمه مورد نظر , اتوماتیک انجام شود. یعنی اگر من از فرم شیمی یک کپی گرفتم و در قسمت record Source خصوصیات فرم جدید , ارتباط کویری را از شیمی به فیزیک تغییر داده و ذخیره کردم , این دکمه دیگر نیازی به تغییر نداشته باشد و خودش اتوماتیک با تغییر record Source به کویری مثلا فیزیک , نام فرم در قسمت براکت عبارت :
ShowQ1(Forms![شیمی]!Code)
را به فیزیک تغییر دهد؟
2) اگر بخواهم با کلیک روی دکمه مورد نظر به جای کویری یک فرم با همان شرایط قبل باز بشه در کد مربوطه چه تغییراتی باید بدهم؟
با تشکر
سلام
در قسمت Function Name عبارت:
ShowQ1(Forms!(screen.ActiveForm.Name)!Code)
ودر ماژول بجای خط آخر عبارت :
DoCmd.OpenForm "YourFormName"
را جایگزین کنید.
فقط در نظر داشته باشید RecordSource فرم شما query1 باشد. و خصوصیت Modal و PopUp آن True باشد
ziba56
شنبه 22 فروردین 1394, 22:12 عصر
جناب آقای مهندس امیری سلام دستتون خیلی خیلی درد نکنه . یک دنیا ممنون
من خط اول و خط آخر ماژول را به شکل زیر تغییر دادم : ( ببخشید هر کار میکنم متن برنامه از چپ به راست نمیشه برای همین بعضی قسمتها بخصوص پرانتزها کمی به هم ریخته میشه )
function ShowQ1(Forms!(Screen.ActiveForm.form1)!Code)
Dim q AsQueryDef, s As String
Dim q2 AsQueryDef, i As Integer
On ErrorResume Next
DoCmd.DeleteObjectacQuery, "Qtemp1"
Set q =CurrentDb.QueryDefs("query1")
s = q.SQL
i =InStr(s, ";") - 1
s = Left(q.SQL,i) & " WHERE (Table2.code)=" & Code
Set q2 =CurrentDb.CreateQueryDef("Qtemp1", s)
Set q2 =Nothing
Set q =Nothing
DoCmd.OpenForm"Form1"
EndFunction
ولی وقت کلیک روی دکمه موجود در فرم error میده. فکر کنم درست متوجه نشدم نام تابع را چطور باید تغییر بدم.اسم فرمی که باید با کلیک روی دکمه فراخوانی بشه form1 است.
اگر خط اول را به شکل زیر تغییر بدم روی Screen خطا می دهد و خط را قرمز می کند.
Function ShowQ1(Forms!(screen.ActiveForm.form1)!Code)(Code As Integer)
شرمنده امیدوارم با رفع این مشکل زحمت را کم کنم و دیگه مزاحمتون نشوم
متشکرم
Abbas Amiri
شنبه 22 فروردین 1394, 23:32 عصر
سلام
منظور بنده از Function name در قسمت ماکرو بود.
به نام سابروتین کاری نداشته باشید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.