PDA

View Full Version : سوال: چگونه یک دکمه روی ردیف های CONTINUOUS FORM را اتوماتیک اجرا کنیم ؟



narpco
دوشنبه 17 آذر 1399, 15:58 عصر
سلام دوستان
یک فرم اصلی داریم
داخلش یک ساب فرم بصورت CONTINUOUS FORM داریم
در انتهای هر ردیف از CONTINUOUS FORM یک دکمه قرمز داریم که روش حرف C نوشته شده
که داخل اون یک سری کد محاسباتی برای هر ردیف نوشته شده است
که بعد از ثبت ورود و خروج باید اون دکمه رو بزنیم تا نسبت به نوع ثبتی که انجام دادیم باقی فیلد ها رو اتوماتیک پرکنه

چون این کار زمان بر هستش میخواهیم در فوتر - ساب فرم -CONTINUOUS FORM- یک دکمه بزاریم و بهش بگیم برو در هر ردیف ساب فرم -CONTINUOUS FORM- دکمه C رو بزن و همینطور ادامه بده تا اخر لیست .....
و در انتها همه تغییرات رو ذخیره کن .
ممنون میشم راهنمایی بفرمایید چه کدی باید بنویسیم که این کار انجام شود
توضیح اینکه من این دکمه اجرا کننده رو در فوتر ساب فرم -CONTINUOUS FORM-قراردادم اگر لازم هست میتونیم روی فرم اصلی قرارش بدیم ....فرقی نمیکنه کجا باشه این دکمه .......
نام فرم اصلی FORM_A
نام ساب فرم FORM_B
نام دکمه قرمز در هر ردیف BTN_CONTROL
نام دکمه آبی در فوتر ساب فرم BTN_ACT
ممنونم

عکس توضیحی
https://s16.picofile.com/file/8416673868/BOTTC.png

eb_1345
دوشنبه 17 آذر 1399, 16:45 عصر
سلام دوستان
یک فرم اصلی داریم
داخلش یک ساب فرم بصورت CONTINUOUS FORM داریم
در انتهای هر ردیف از CONTINUOUS FORM یک دکمه قرمز داریم که روش حرف C نوشته شده
که داخل اون یک سری کد محاسباتی برای هر ردیف نوشته شده است
که بعد از ثبت ورود و خروج باید اون دکمه رو بزنیم تا نسبت به نوع ثبتی که انجام دادیم باقی فیلد ها رو اتوماتیک پرکنه

چون این کار زمان بر هستش میخواهیم در فوتر - ساب فرم -CONTINUOUS FORM- یک دکمه بزاریم و بهش بگیم برو در هر ردیف ساب فرم -CONTINUOUS FORM- دکمه C رو بزن و همینطور ادامه بده تا اخر لیست .....
و در انتها همه تغییرات رو ذخیره کن .
ممنون میشم راهنمایی بفرمایید چه کدی باید بنویسیم که این کار انجام شود
توضیح اینکه من این دکمه اجرا کننده رو در فوتر ساب فرم -CONTINUOUS FORM-قراردادم اگر لازم هست میتونیم روی فرم اصلی قرارش بدیم ....فرقی نمیکنه کجا باشه این دکمه .......
نام فرم اصلی FORM_A
نام ساب فرم FORM_B
نام دکمه قرمز در هر ردیف BTN_CONTROL
نام دکمه آبی در فوتر ساب فرم BTN_ACT
ممنونم

عکس توضیحی
https://s16.picofile.com/file/8416673868/BOTTC.png





سلام

و اما در خصوص سؤال جنابعالی ، بنظر بنده نیازی به تعبیه چنین کلیدی برای محاسبه عملیات بعد از ثبت زمان ورود و خروج نمیباشد . چراکه محاسبات ستونهای دیگر تابع محاسبه ستون میزان حضور میباشد و میتوان این محاسبه را با کد نویسی در قسمت کنترل سورس فیلد مربوطه انجام داد و یا این محاسبه در ستونی از کوئری انجام داد و آن ستون رو بعنوان کنترل سورس فیلد سابفرم قرار داد( به همان صورت که محاسبه ستون میزان حضور بطور اتوماتیک انجام میشود )
ضمناً جناب ناصریان ! چرا از سابفرم برای ورود و خروج و محاسبه اطلاعات استفاده می کنید ؟ در برنامه شما استفاده از سابفرم بیشتر باید جنبه نمایش اطلاعات داشته باشد. در هر روز نیاز به یکبار ثبت زمان ورود و خروج میباشد و این ثبت و محاسبات مربوطه رو میتوان در فرم اصلی از نوع Single Form انجام داد

padide55
دوشنبه 17 آذر 1399, 16:50 عصر
سلام
یک باتن در ساب فرم ایجاد کنید

کد



Dim rs As DAO.Recordset

Set rs = Me.RecordsetClone

With rs

.MoveFirst

Do While Not rs.EOF
.Edit
call mybotton_click
.Update
.MoveNext
Loop

End With
msgbox "done"


بجای mybottonاسم باتن خودتون رو بگذارید.

padide55
دوشنبه 17 آذر 1399, 16:53 عصر
اگر در فرم میگذارید باید تغییرات زیر رو اعمال کنید
Set rs = Me.subForm1.Form.RecordsetClone

و همچنین
Call Form_subForm1.Command1_Click
ولی
همانطور که دوست خوبمون فرمودند .
چون این کار فیلد به فیلد انجام‌میشه زمان بر هست .

اول در update هر فیلد میشه کد رو قرار داد که‌محاسبه انجام بشه.
دوم
یک کوئری میشه ایجاد کرد از نوع updateکه محاسبات رو سریع در جدول اصلی اعمال کنه .
روش کوئری اگر خواستید فردا انجام میدم .
سوم .خود فرم رو به یک کوئری ارتباط داد که محاسبه در لحظه مشاهده و اعمال بشه .

padide55
دوشنبه 17 آذر 1399, 17:30 عصر
برنامه شما استفاده از سابفرم بیشتر باید جنبه نمایش اطلاعات داشته باشد. در هر روز نیاز به یکبار ثبت زمان ورود و خروج میباشد و این ثبت و محاسبات مربوطه رو میتوان در فرم اصلی از نوع Single Form انجام داد.

دقیقا
یک فرم ورود و خروج میخواهید که ورود و خروج رو در همان روز ثبت کنید .

مگر اینکه کارتکس کاغذی دارید که اخر ماه تحویل واحد مربوطه‌میشه و برای اینکه دستی محاسبه نکند .اینجا وارد میکند .


ضمنا فیلدهایی که کاربر نباید کاری با اون داشته باشه رو غیر فعال کنید .
enable=false

مثل همین فیلدهایی که اتوماتیک پر میشه .

narpco
دوشنبه 17 آذر 1399, 18:49 عصر
سلام
پست 2 ------بسیار ممنونم از حسن نظر شما البته طراحی فرم و زیبایی بصری کار زمان بری است و هنوز خیلی کار داره انشالله تموم شد عکساشو میفرستم ....ممنونم از شما


پست شماره 3-----عزیز ممنون بابت کد ولی این مدل کد رو قبلا تست کردم کار نمیکنه ..میره تو رکوردها میگرده ولی کاری انجام نمیده ......ولی اگر بخوای یک فیلدی رو صفر کنی یا بهش عددی بدی این کار انجام میشه ولی کلیک کردن روی باتن رو انجام نمیده

در مورد اینکه چرا از ساب فرم استفاده میکنم فیلم کوتاهی تهیه میکنم میفرستم شاید من از پایه در فهم این قضیه مشکل دارم ولی سواد من فعلا اینقدره :))


درمورد اینکه اگر یک کلید بزاریم برای اجرای باتن ها روی رکورد و زمان بر بودنش باید بگم به هر کال ثبت دستی هر روز زمانش بیشتره تا زدن یک رکورد و صبر کردن به مدت 4 ثانیه


اما یک نکته مهم رو بگم ......در این برنامه قرار نیست روزانه ورود و خورج ثبت بشه -----برای موسسات تک شیفت غیر صنعتی و در پایان هر ماه قرارهست اطلاعات رو وارد کنند اونم فقط ورود و خروج و برنامه خودش محاسبه می کنه و اینکه هر فیلدی که محاسبه میشه ENABLE نیست در این فرمی که میبینید فقط دو فیلد ورود و خرج باز هست برای ثبت

padide55
دوشنبه 17 آذر 1399, 19:03 عصر
سلام
یک نمونه درست کردم
تست کردم انجام میشه .
مجدد تست کنید .دقیقا همین کد رو

اگر نشد
اون کدی که در باتن cقرار دادین رو جایگزین

call mybotton_click
کنید .
دقیقا کد رو اجرا کنه .نه کلیک باتن

narpco
دوشنبه 17 آذر 1399, 19:41 عصر
سلام تا چند دقیقه دیگه یک فیلم میفرستم .......ممنون میشم اول ببینید بعد تصمیم جمعی بگیریم که چه کاری بهتره .......بسیار ممنون

padide55
دوشنبه 17 آذر 1399, 20:42 عصر
سلام
update خطا میداد .برداشتم بازم عمل کرد



Dim rs As DAO.Recordset
Set rs = Me.Recordset
With rs
.MoveFirst
Do While Not rs.EOF


'-----------operate----------



code of boton




'----------------
'.Update
.MoveNext
Loop
End With
MsgBox "done"

narpco
دوشنبه 17 آذر 1399, 22:08 عصر
سلام ببخشید با این سرعت اینترنت زودتر از این نشد که بفرستم

ممنون میشم فیلم رو ببینید و نتایج تست کد ها رو هم خواهیم دید

https://s17.picofile.com/d/8416713642/b1b00b9c-cb0b-4deb-8d50-01ee4ca94daf/CONTROL.rar

padide55
دوشنبه 17 آذر 1399, 22:59 عصر
کد محاسبه باتن گرد رو داخل کد باتن محاسبه cبگذارید .
کلیک رو بردارید .
خود کد اجرا بشه .
فیلد اول ساب فرم رو هم بجای اینکه
enable=false باشه
locked=true
بگذارید .
فقط کلیک بشه ولی قفل باشه .

padide55
دوشنبه 17 آذر 1399, 23:06 عصر
راه دوم .
بجای کلیک از چک باکس استفاده کنید.
فقط هم trueبشه
یک کد .
me.chkbox=true
ببینید چجور میشه .همه تیک میخوره از اول ؟

narpco
دوشنبه 17 آذر 1399, 23:19 عصر
فعلا تا اینجا به این نتیجه رسیدیم که با کدنویسی از طریق رکوردست نمیتونیم به -باتن -هر ردیف در ساب فرم فرمان اجرا بدیم ....هر نوع عمل محاسباتی یا ایجاد اطلاعات یا تغییر اطلاعات انجام میشه عملیات CLICK_ انجام نمیشه

padide55
دوشنبه 17 آذر 1399, 23:30 عصر
فایل نمونه این تاپیک رو‌ملاحظه بفرمایید .

تاپیک (https://www.access-programmers.co.uk/forums/threads/select-all-records-on-form-checkbox.208469/)

narpco
دوشنبه 17 آذر 1399, 23:40 عصر
پاسخ رو در پی وی دادم خدمتتون ممنون میشم یک جا ادامه بدین یا در پی وی یا اینجا که من هم در جریان به موقع قرار بگیرم ..ممنون

من هم فایل نمونه لینک شما رو دیدم هم فرمایشات شما رو کامل خوندم ....

لینکی که فرستادین و فایل پیوستش به کار ما ارتباطی نداره فک کنم
ما دنبال یک موضوع ساده هستیم
اجرای باتن C در هر ردیف

توسط یک دکمه در فوتر همان فرم ...ممنون میشم فیلم رو مشاهده بفرمایید

padide55
دوشنبه 17 آذر 1399, 23:58 عصر
اگر رکوردست خطا داشت به پایان نرسیده خطا میدادو به doneنمیرسید .
و چون خط اول اجرا شد پس
کلیک ساب فرم عمل میکنه .
همانطور که فرمودید
به نظرم چون ساب فرم و فرم در کد به هم ارجاع میشن .یک جا فوکوس روی فرم‌هست که کلیک عمل نمیکنه.
پیشنهاد میکنم به باتن کلیک . مسیر بدین

Call Form_subForm1.Command1_Click
فکر کنم حل بشه.

narpco
سه شنبه 18 آذر 1399, 00:34 صبح
فرمایش شما رو تست کردم ...نتیجه نداد
اما با عکس زیر نگاه کنید
اصلا فرض کنیم ساب فرم یک فرم مستقل هست و فرم اصلی وجود ندارد البته بعد از ایجاد ردیف ها همچین فرضی داریم
فقط ساب فرم رو باز می کنیم
و تمام مواردی که ارجاع به فرم اصلی داره رو در دکمه C موقتا تغییر میدیم

و در دستور رکورد ست میگیم که هر بار که به رکورد بعدی میری Id رکورد رو به من نشون بده

نکته جالب اینه که هر بار یک عدد رو نشون میده
در صورتیکه رکورد های ایجاد شده در جدول ساب فرم دارای ای دی های متفاوتی هستن
من به این نتیجه رسیدم که اصلا به رکورد بعدی حرکتی انجام نمیشه که بخواد روی باتن کلیک کنه همون ردیف اول رو انجام میده خلاص می ایسته...باقی زمان رو داره فقط بین رکوردها حرکت می کنه تا به اخر برسه

https://s17.picofile.com/file/8416728668/DNVHDND.png

eb_1345
سه شنبه 18 آذر 1399, 01:57 صبح
فعلا تا اینجا به این نتیجه رسیدیم که با کدنویسی از طریق رکوردست نمیتونیم به -باتن -هر ردیف در ساب فرم فرمان اجرا بدیم ....هر نوع عمل محاسباتی یا ایجاد اطلاعات یا تغییر اطلاعات انجام میشه عملیات CLICK_ انجام نمیشه
چگونه به چنین نتیجه ای رسیدین که با کد نویسی اینکار شدنی نیست؟

padide55
سه شنبه 18 آذر 1399, 08:31 صبح
سلام.
فایل شما اینجا کدها عمل میکنه
مشکل از سیستم شماست
این فایل رو چک کنید.

هم اجرای کد و هم کلیک باتن عمل میکنه

narpco
سه شنبه 18 آذر 1399, 08:55 صبح
چگونه به چنین نتیجه ای رسیدین که با کد نویسی اینکار شدنی نیست؟

سلام ..عرض کردم ما به این نتیجه رسیدیم ..یعنی من نمیتونم ....این که میشه یا نمیشه ..من در مقام نظر دهی نیستم :))
فعلا دارم تست می کنم ببینم متوجه میشم مشکل کجاست یانه ....

narpco
سه شنبه 18 آذر 1399, 09:06 صبح
سلام.
فایل شما اینجا کدها عمل میکنه
مشکل از سیستم شماست
این فایل رو چک کنید.

هم اجرای کد و هم کلیک باتن عمل میکنه


عزیز من ممنونم کهزحمت میکشید و فایل درست می کنید و در بحث شرکت میکنید ...

اما کاری که فایل شما می کنه الان اینه که کدی که در باتن موجود در ردیف ساب فرم هست رو برداشتین کپی کردین در دکمه فوتر و میگید درسته و سیستم من مشکل داره

عزیز دل من در فیلم کامل توضیح دادم و اگر لطف میکردین کامل و با دقت فیلم رو مشاهده میفرمودید من نتیجه اجرای چند مدل کد رو از طریق رکورد ست توضیح دادم

این روشی که شما رفتی رو من تو پشت 17 توضیح دادم .....و مشکل موجود رو ........

به هر حال اینکه در باتن c دستورما msgbox نیست که ساده بشه برش داشت اورد و در باتن فوتر قرارداد چون وارد قواعد دستور رکورد ست میشه
من دیشب هم عرض کردم که این کار رو انجام دادم نتیجه نمیده ...

این فایلی هم که شما فرستادین رو سیستم من به درستی کار می کنه پس مشکل از فایل و سیستم و روش نیست

عرض بنده اینه که msgbox که شما بعنوان دستور اجرایی گذاشتین رو برنامه من هم اجرا میکنه مشکلی نیست .....
حالا انشالله برای اینکه بحث به نتیجه برسه من الان سعی می کنم یک نسخه از فایل رو خلاصه تر کنم بفرستم انشالله که به نتیجه برسیم .... بازم ممنون از شما

eb_1345
سه شنبه 18 آذر 1399, 09:17 صبح
عزیز من ممنونم کهزحمت میکشید و فایل درست می کنید و در بحث شرکت میکنید ...

اما کاری که فایل شما می کنه الان اینه که کدی که در باتن موجود در ردیف ساب فرم هست رو برداشتین کپی کردین در دکمه فوتر و میگید درسته و سیستم من مشکل داره

عزیز دل من در فیلم کامل توضیح دادم و اگر لطف میکردین کامل و با دقت فیلم رو مشاهده میفرمودید من نتیجه اجرای چند مدل کد رو از طریق رکورد ست توضیح دادم

این روشی که شما رفتی رو من تو پشت 17 توضیح دادم .....و مشکل موجود رو ........

به هر حال اینکه در باتن c دستورما msgbox نیست که ساده بشه برش داشت اورد و در باتن فوتر قرارداد چون وارد قواعد دستور رکورد ست میشه
من دیشب هم عرض کردم که این کار رو انجام دادم نتیجه نمیده ...

این فایلی هم که شما فرستادین رو سیستم من به درستی کار می کنه پس مشکل از فایل و سیستم و روش نیست

عرض بنده اینه که msgbox که شما بعنوان دستور اجرایی گذاشتین رو برنامه من هم اجرا میکنه مشکلی نیست .....
حالا انشالله برای اینکه بحث به نتیجه برسه من الان سعی می کنم یک نسخه از فایل رو خلاصه تر کنم بفرستم انشالله که به نتیجه برسیم .... بازم ممنون از شما


سلام
هدف جناب padide55 (https://barnamenevis.org/member.php?263869-padide55) از گذاشتن msgbox درمیان حلقه Do While این بوده که نشان دهند پیمایش رکورد در حال اجراست



Private Sub Command192_Click()
Rdate = Rdate + 1
'MsgBox [Rdate]
End Sub

درمثال ایشان اگر بجای MsgBox [Rdate] عبارت... Rdate = Rdate + 1 قرار بدهید مشاهده می کنیدکه تاریخ ها از رکورد اول تا آخر به مقدار1 عدد اضافه میشوند
حالا کافیست در حلقه شرط Call Command192_Click را فراخوانی کنید

narpco
سه شنبه 18 آذر 1399, 09:25 صبح
این اخرین نسخه فایل هست

ممنون میشم به نگاهی بفرمایید

چون ممکنه من اشتباه ساده یا بزرگی داشته باشم که چون متوجهش نمیشم... زحمت دوستان نتیجه نمیده .....اینه که سعی کردم فایل خلاصه شده بفرستم انشالله که مشکل حل بشه

https://s17.picofile.com/file/8416752842/test2000.rar.html

padide55
سه شنبه 18 آذر 1399, 09:34 صبح
عزیز من ممنونم کهزحمت میکشید و فایل درست می کنید و در بحث شرکت میکنید ...

اما کاری که فایل شما می کنه الان اینه که کدی که در باتن موجود در ردیف ساب فرم هست رو برداشتین کپی کردین در دکمه فوتر و میگید درسته و سیستم من مشکل داره

عزیز دل من در فیلم کامل توضیح دادم و اگر لطف میکردین کامل و با دقت فیلم رو مشاهده میفرمودید من نتیجه اجرای چند مدل کد رو از طریق رکورد ست توضیح دادم

این روشی که شما رفتی رو من تو پشت 17 توضیح دادم .....و مشکل موجود رو ........

به هر حال اینکه در باتن c دستورما msgbox نیست که ساده بشه برش داشت اورد و در باتن فوتر قرارداد چون وارد قواعد دستور رکورد ست میشه
من دیشب هم عرض کردم که این کار رو انجام دادم نتیجه نمیده ...

این فایلی هم که شما فرستادین رو سیستم من به درستی کار می کنه پس مشکل از فایل و سیستم و روش نیست

عرض بنده اینه که msgbox که شما بعنوان دستور اجرایی گذاشتین رو برنامه من هم اجرا میکنه مشکلی نیست .....
حالا انشالله برای اینکه بحث به نتیجه برسه من الان سعی می کنم یک نسخه از فایل رو خلاصه تر کنم بفرستم انشالله که به نتیجه برسیم .... بازم ممنون از شما

سلام
اگر مشاهده بفرمایید میبینید که دو باتن گذاشتم
یکی
کد داره و دیگری کلیک باتن رو call میکنه . منظور اینه که هر دو روش عمل میکنه .

فایلتون رو الان نگاه میکنم.

eb_1345
سه شنبه 18 آذر 1399, 11:27 صبح
این اخرین نسخه فایل هست

ممنون میشم به نگاهی بفرمایید

چون ممکنه من اشتباه ساده یا بزرگی داشته باشم که چون متوجهش نمیشم... زحمت دوستان نتیجه نمیده .....اینه که سعی کردم فایل خلاصه شده بفرستم انشالله که مشکل حل بشه

https://s17.picofile.com/file/8416752842/test2000.rar.html






سلام
یکی دو نکته ظریف برای اجرای کدها باید در نظر گرفته شود که عملیات بدرستی انجام شود
اجازه بدهید جناب padide55 (https://barnamenevis.org/member.php?263869-padide55) فایل رو اصلاح فرمایند

narpco
سه شنبه 18 آذر 1399, 11:44 صبح
عزیز بنده دو زانو منتظرم ....هر چقدر که طول بکشه .......بنده خدا دیشب تا دیر وقت درگیر حل مسئله من بودن من خیلی شرمندشون شدم .....حالا خنده دار اینجاست که مخ ما هنگ کرده بود به عقلمون نرسید از اول نسخه اخر فایل رو بفرستم ....یه جاهایی مغز یاری نمیکنه برای فکرکردن ....احتمال قوی هم من دارم دارم اشتباه می کنم چون فایلی که بنده خدا دوستمون فرستاد درست کار می کنه ...........حالا وقتی حل شد ....میفهمیم داستان چی بوده ....به هر حال بسیار ممنونم از شما دو عزیز که وقت میزراید و فکر میکنید که مشکل من رو حل کنید ....:قلب::قلب:

padide55
سه شنبه 18 آذر 1399, 13:22 عصر
عزیز بنده دو زانو منتظرم ....هر چقدر که طول بکشه .......بنده خدا دیشب تا دیر وقت درگیر حل مسئله من بودن من خیلی شرمندشون شدم .....حالا خنده دار اینجاست که مخ ما هنگ کرده بود به عقلمون نرسید از اول نسخه اخر فایل رو بفرستم ....یه جاهایی مغز یاری نمیکنه برای فکرکردن ....احتمال قوی هم من دارم دارم اشتباه می کنم چون فایلی که بنده خدا دوستمون فرستاد درست کار می کنه ...........حالا وقتی حل شد ....میفهمیم داستان چی بوده ....به هر حال بسیار ممنونم از شما دو عزیز که وقت میزراید و فکر میکنید که مشکل من رو حل کنید ....:قلب::قلب:

سلام
من از قبل هم گفتم که کلا کد نویسی مشکل دارم . سعی میکنم مشکل رو با جستجو اینترنت و ... رفع کنم واما.....

اینجا الان مشکل کلیک نیست .
مشکل مسیردادن برای محاسبه در ساب فرمه .
حتی محاسبه هم از طریق فرم به ساب فرم مشکل داریم .

من کد رو از فرم اجراکردم .دقیقا تمام رکروردهای ساب فرم حرکت next داریم ولی کد جهت اجرا در ساب فرم
لطفا
مسیر اجرای فایل خارج از ساب فرم داده بشه و داخل ساب فرم اجرا بشه .

حالا یا باید قبلش فوکوس به ساب فرم داده بشه یا مسیر کد به درستی صادر بشه . یک مشکل دیگه هم در نام نویسی فیلدها .
در بیشتر منابع دستور کلیک به صورت _click داریم و دقیقا در نام گذاریها هم از _ استفاده شده . نمیدونم به این موضوع ربط داره ؟
نیاز به همکاری جناب eb_1345 (https://barnamenevis.org/member.php?424036-eb_1345) داریم.

متاسفانه امروز بسیار سرم شلوغه. ولی باز هم تا فردا همچنان جستجو میکنم .

padide55
سه شنبه 18 آذر 1399, 13:34 عصر
سلام
یکی دو نکته ظریف برای اجرای کدها باید در نظر گرفته شود که عملیات بدرستی انجام شود
اجازه بدهید جناب padide55 (https://barnamenevis.org/member.php?263869-padide55) فایل رو اصلاح فرمایند

اینکه ذهن رو درگیر کنیم خوبه . الان من این دو روز کلی مطلب یاد گرفتم .

eb_1345
سه شنبه 18 آذر 1399, 18:22 عصر
سلام
من از قبل هم گفتم که کلا کد نویسی مشکل دارم . سعی میکنم مشکل رو با جستجو اینترنت و ... رفع کنم واما.....

اینجا الان مشکل کلیک نیست .
مشکل مسیردادن برای محاسبه در ساب فرمه .
حتی محاسبه هم از طریق فرم به ساب فرم مشکل داریم .

من کد رو از فرم اجراکردم .دقیقا تمام رکروردهای ساب فرم حرکت next داریم ولی کد جهت اجرا در ساب فرم
لطفا
مسیر اجرای فایل خارج از ساب فرم داده بشه و داخل ساب فرم اجرا بشه .

حالا یا باید قبلش فوکوس به ساب فرم داده بشه یا مسیر کد به درستی صادر بشه . یک مشکل دیگه هم در نام نویسی فیلدها .
در بیشتر منابع دستور کلیک به صورت _click داریم و دقیقا در نام گذاریها هم از _ استفاده شده . نمیدونم به این موضوع ربط داره ؟
نیاز به همکاری جناب eb_1345 (https://barnamenevis.org/member.php?424036-eb_1345) داریم.

متاسفانه امروز بسیار سرم شلوغه. ولی باز هم تا فردا همچنان جستجو میکنم .


سلام
خاطرم هست در یکی از تاپیک ها اشاره کرده بودم که برای اجرای یک سابروتین از فرم دیگر آن سابروتین را باید بصورت public تعریف کنید . بنابراین شما وقتی میخواهید سابروتین کمند باتن سابفرم را از فرم اصلی فراخوانی کنید آن را باید بصورت public تعریف نمائید
نحوه فراخوانی کدها از رویداد کلیک کمند باتن فرم اصلی بصورت زیر است :



Private Sub Command1145_Click()
Dim rs As DAO.Recordset
Set rs = Me.frm_rollcall_B_Sub.Form.Recordset
rs.MoveFirst
Do While Not rs.EOF
Call Form_frm_rollcall_B_Sub.btn_control_Click
rs.MoveNext
Loop
End Sub

اینکار با استفاده از حلقه تکرار for .....next هم قابل انجام است :


Private Sub Command1145_Click()
On Error Resume Next
Dim i As Integer
Me.frm_rollcall_B_Sub.SetFocus
Me.frm_rollcall_B_Sub.Form.Recordset.MoveFirst
Call Form_frm_rollcall_B_Sub.btn_control_Click
For i = 1 To Me.frm_rollcall_B_Sub.Form.Recordset.RecordCount - 1
DoCmd.GoToRecord , , acNext
Call Form_frm_rollcall_B_Sub.btn_control_Click
Next
End Sub

منتها در این حالت چون میخواهید از طریق رکوردست سابفرم بر روی رکوردها پیمایش صورت گیرد لازم است در ابتدای کدها، سابفرم فوکوس شود
پیشنهاد میشود از همان کد های روش اول استفاده شود

narpco
سه شنبه 18 آذر 1399, 19:20 عصر
سلام ...پست 29 -----اتفاقا من این موضوعpublic بودن یادم بود و انجام هم دادم
فایل پست 23 رو لطفادانلود کنید رمز فایل رو خودتون میدونید .....

با اینحال بازم کار نکرد

کدهای پست 29 رو هم تست کردم نشد .....ایا امکان داره که باید کتابخونه ای رو در رفرنس اضافه کنیم؟

https://s16.picofile.com/file/8416817834/ddedddddddddd.png


من دکمه عملیات این کد ها رو هم روی فرم اصلی تست می کنم هر روی ساب فرم ....جواب نمیده

eb_1345
سه شنبه 18 آذر 1399, 19:41 عصر
سلام ...پست 29 -----اتفاقا من این موضوعpublic بودن یادم بود و انجام هم دادم
فایل پست 23 رو لطفادانلود کنید رمز فایل رو خودتون میدونید .....

با اینحال بازم کار نکرد

کدهای پست 29 رو هم تست کردم نشد .....ایا امکان داره که باید کتابخونه ای رو در رفرنس اضافه کنیم؟

https://s16.picofile.com/file/8416817834/ddedddddddddd.png


من دکمه عملیات این کد ها رو هم روی فرم اصلی تست می کنم هر روی ساب فرم ....جواب نمیده
امتحان کردم ، کدها در هر دو حالت بدون هیچ خطائی اجرا میشه

عکس خطا در استفاده از کدهای روش دوم میباشد . در کدها فوکوس یر روی کمند باتن سابفرم هم اضافه کن ببین نتیجه میده
بصورت زیر :


On Error Resume Next
Dim i As Integer
Me.frm_rollcall_B_Sub.SetFocus
Form_frm_rollcall_B_Sub.Form.BTN_CONTROL.SetFocus
Me.frm_rollcall_B_Sub.Form.Recordset.MoveFirst
Call Form_frm_rollcall_B_Sub.btn_control_Click
For i = 1 To Me.frm_rollcall_B_Sub.Form.Recordset.RecordCount - 1
DoCmd.GoToRecord , , acNext
Call Form_frm_rollcall_B_Sub.btn_control_Click
Next

اگر بازهم با این وجود خطا صادر شد مجدداً فایلی رو که کدهای فوق در آن قرار دادی آپ کن

eb_1345
سه شنبه 18 آذر 1399, 19:59 عصر
در کدهای روش اول چون رکوردست به متد Dao نسبت داده شده در قسمت رفرنسها این مورد رو هم (مطابق تصویر ضمیمه) اضافه کن ببین نتیجه بخش هست یا نه

narpco
سه شنبه 18 آذر 1399, 20:00 عصر
https://s16.picofile.com/d/8416823100/e604c775-08c8-480f-80e6-612f1788cb3a/MS_TAB_240.rar

با سپاس


موقع اضافه کردن رفرنس این خطا رو میده

https://s16.picofile.com/file/8416823468/vvvvvvvvvvvvvvvvvvvvvvvv.png

eb_1345
سه شنبه 18 آذر 1399, 20:08 عصر
https://s16.picofile.com/d/8416823100/e604c775-08c8-480f-80e6-612f1788cb3a/MS_TAB_240.rar

با سپاس


موقع اضافه کردن رفرنس این خطا رو میده

https://s16.picofile.com/file/8416823468/vvvvvvvvvvvvvvvvvvvvvvvv.png



کلمه form بعد از نام سابفرم اضافه شود


On Error Resume Next
Dim i As Integer
Me.frm_rollcall_B_Sub.SetFocus
Form_frm_rollcall_B_Sub.Form.BTN_CONTROL.SetFocus
Me.frm_rollcall_B_Sub.Form.Recordset.MoveFirst
Call Form_frm_rollcall_B_Sub.Form.btn_control_Click
For i = 1 To Me.frm_rollcall_B_Sub.Form.Recordset.RecordCount - 1
DoCmd.GoToRecord , , acNext
Call Form_frm_rollcall_B_Sub.Form.btn_control_Click
Next

narpco
سه شنبه 18 آذر 1399, 20:17 عصر
خطا نمیده ولی کاری هم انجام نمیشه فقط میره سریع از اول تا اخر رکوردها رو چک میکنه ....کاری انجام نمیده

eb_1345
سه شنبه 18 آذر 1399, 21:16 عصر
خطا نمیده ولی کاری هم انجام نمیشه فقط میره سریع از اول تا اخر رکوردها رو چک میکنه ....کاری انجام نمیده
سابروتین کمند باتن سابفرم که بصورت public تغییر نداده اید . بررسی کردم به هم صورت Private بود:لبخندساده:
ضمن اینکه کدها به همون صورت اول بدون درج form سابفرم درست بود.
چون عبارت On Error Resume Next برای رفع خطا در اول کدها قرار داده بودم خطا صادر نمیشد


Dim i As Integer
Me.frm_rollcall_B_Sub.SetFocus
Form_frm_rollcall_B_Sub.Form.BTN_CONTROL.SetFocus
Me.frm_rollcall_B_Sub.Form.Recordset.MoveFirst
Call Form_frm_rollcall_B_Sub.btn_control_Click
For i = 1 To Me.frm_rollcall_B_Sub.Form.Recordset.RecordCount - 1
DoCmd.GoToRecord , , acNext
Call Form_frm_rollcall_B_Sub.btn_control_Click
Next


الآن از همان کدهای روش اول هم میتونید استفاده کنید

eb_1345
سه شنبه 18 آذر 1399, 21:26 عصر
در فراخوانی سابروتین مربوط به کمند باتن نباید خصوصیت form برای نام سابفرم درج شود


Call Form_frm_rollcall_B_Sub.btn_control_Click

narpco
سه شنبه 18 آذر 1399, 21:29 عصر
سابروتین کمند باتن سابفرم که بصورت public تغییر نداده اید . بررسی کردم به هم صورت Private بود:لبخندساده:

شما منظورتون دکمه C بود من همش فکر میکردم دکمه عمل کننده ای که باید بره و دکمه c رو اجرا کنه رو میگین

من شرمنده ام ....خیلی عالی و درست کار می کنه .......و ممنون از شما و دوست عزیزمون که وقت گذاشتین
واقعا دیگه نا امید شده بودم

عرض ارادت ما مثل همیشه پذیرا باشد ....ممنون که هستید ..................................:قلب::قلب: :قلب:

narpco
سه شنبه 18 آذر 1399, 21:43 عصر
نکته مهمی که در مقایسه کد پست 36 با روش کد نویسی رکورد ست فهمیدم اینه که سرعت بسیار بالاتره و خطاش صفر هست اگر بادتون باشه در اخر فیلم یک خطای کار با رکورد ست رو نشون دادم که اکسس هنگ میکنه و میره بیرون

این تفاوت سرعت حرکت برای هرنوع عملیاتی هست ---حالا نه الزاماٌ فقط برای اجرا کردن دکمه c
بلکه مثلا میگیم برو در هر ردیف هر روزی تعطیل بود ورود و خروج رو صفر کن

یک بار میره مثل بچه ادم کار رو انجام میده و بدون خطا :)

اصلا فکرن می کردم یک for-next ساده این همه کار عملیاتی در رکوردها ازش بر بیاد ....

الان براحتی میتونیم هر عملیاتی که میخوایم رو بری رکورد ها انجام بدیم بدون محدودیت تعداد ردیف های یک کانتینیوس فرم ....
افرین به خلاقیت ...:تشویق::تشویق::تشویق:

eb_1345
سه شنبه 18 آذر 1399, 23:25 عصر
کدهای پست 36 بصورت زیر اصلاح میشود:


Dim i As Integer
Me.frm_rollcall_B_Sub.SetFocus
Form_frm_rollcall_B_Sub.Form.BTN_CONTROL.SetFocus
Me.frm_rollcall_B_Sub.Form.Recordset.MoveFirst
For i = 1 To Me.frm_rollcall_B_Sub.Form.Recordset.RecordCount - 1
Call Form_frm_rollcall_B_Sub.btn_control_Click
DoCmd.GoToRecord , , acNext
Next

در کدهای پست 36 من حواسم نبوده فراخوانی سابروتین را بعد از DoCmd.GoToRecord , , acNext قرار داده بودم که منطقاً باید قبل از آن قرار بگیرد . بخاطر همین هم بنده در کدها ، کدفراخوانی سابروتین را یکبار قبل از اجرای حلقه درج نموده بودم در صورتیکه اگر این کد فراخوانی قبل از DoCmd.GoToRecord , , acNext درج شود نیازی به آن یک خط کد قبل از اجرای حلقه تکرار نمی باشد .

eb_1345
چهارشنبه 19 آذر 1399, 01:58 صبح
اگر بادتون باشه در اخر فیلم یک خطای کار با رکورد ست رو نشون دادم که اکسس هنگ میکنه و میره بیرون

بعضی مواقع این حالت در زمانی رخ میدهد که در فرایند اجرای یک روال احتمال خطا وجود داشته باشد از دستور On Error Resume Next در ابتدای کدها استفاده کنیم .این دستور به برنامه می گوید در هنگام مواجه با خطا به خط بعد از خطا منتقل شو به عبارتی دیگر این دستور به برنامه می گوید که از خطاهای درون روال چشم پوشی بکن . به همین خاطر اکسس وقتی تشخیص میدهد یک خطای غیر قابل چشم پوشی در طول فرایند اجرای روال صورت گرفته ولی از طرفی به روال دستور داده شده باشد که از خطا چشم پوشی کن . اکسس ترجیح میدهد تا اتفاقی ناگواری برای برنامه نیفتاده از برنامه خارج شود .(تعبیرخودمونی:لبخندساده:)
در روال های مهم که احتمال خطا زیاد است بهتر است وقوع خطاهای قابل پیش بینی کنترل ومدیریت شود .
در اینحالت درابتدای کدها دستور On Error Go To ErrorHandler و در انتهای کدها : ErrorHandler درج میشود . در ابتدای روال، برنامه با دستورOn Error Go To ErrorHandler به برنامه می گوید در هنگام مواجه با خطا به خط ErrorHandler منتقل شو.
حتماً میدانید که بعد از خط ErrorHandler با استفاده از دستور شرطی IF یا Select از طریق پنجره مسیج باکس هشدار لازم در خصوص خطای صورت گرفته به کاربر داده میشود.



ص

padide55
چهارشنبه 19 آذر 1399, 08:29 صبح
سلام
:تشویق:
نکات برنامه نویسی اینجا به کار میاد

ضمنا
فیلدها خالی باشه پیغام #type میده در جمع پایین ساب فرم .

در مسیر کد مربوطه لطف کنید nz اضافه کنید
به این صورت:



=subtotalsum(Sum(Nz([RCb_Delay_in])))

narpco
چهارشنبه 19 آذر 1399, 09:31 صبح
سلام صبح بخیر

کد پست 40 رو تست کردم یک مشکل کوچیک داره

مثلا اگر 31 رکورد داریم در ساب فرم روی 30 رکورد عملیات انجام میده و رکورد اخر رو رها میکنه


ولی

کد پست 36 کامل و درست کار می کنه .....

eb_1345
چهارشنبه 19 آذر 1399, 11:33 صبح
سلام صبح بخیر

کد پست 40 رو تست کردم یک مشکل کوچیک داره

مثلا اگر 31 رکورد داریم در ساب فرم روی 30 رکورد عملیات انجام میده و رکورد اخر رو رها میکنه


ولی

کد پست 36 کامل و درست کار می کنه .....


سلام
در کدهای پست 40 عدد 1 که از تعداد رکوردها کسر شده باید حذف میشد . اما با حذف آن هم خطای 2105 ایجاد میشود که نیاز به یک مدیریت خطا مطابق آنچه در پست 41 اشاره شد دارد .
پس همان بهتر که از کدهای پست 36 استفاده شود.