PDA

View Full Version : سوال: باز کردن فرم در حالی که زیر فرم قابل ادیت نباشد



m3343kh
پنج شنبه 22 مهر 1400, 15:10 عصر
با سلام
میخواهم با زدن دکمه روی فرم اول فرم دوم که شامل یک زیر فرم است باز شود با این شرط اینکه زیر فرم قابل ادیت نباشد
یعنی خاصیت Allow Edits زیر فرم false شود.
با تشکر و دعای خیر

m3343kh
پنج شنبه 22 مهر 1400, 21:37 عصر
پیشاپیش از لطف شما بزرگواران سپاسگزارم

m3343kh
جمعه 23 مهر 1400, 07:59 صبح
153525 با سلام
این هم تصویر چیزی که میخواهم

m3343kh
جمعه 23 مهر 1400, 11:19 صبح
خواهش میکنم اگر کسی میدونه، راهنمایی کند
برای شنبه لازم دارم

mazoolagh
شنبه 24 مهر 1400, 15:13 عصر
اگر همین دستور docmd.openform رو یک نگاه میکردین پاسخ خودتون رو گرفته بودین.

1- این دستور یک پارامتر داره به اسم data mode که چند حالت قبول میکنه: data entry (add) و read only و edit و property setting
کاملا مشخص هست که چه پارامتری رو باید برای هر حالت انتخاب کنین.

2- اگر شرایط پیچیده تر باشه بازای هر باتن یک openargs جداگانه به فرم میفرستین و رخداد open_form براساس مقدار اون عمل میکنین.

m3343kh
شنبه 24 مهر 1400, 19:39 عصر
با تشکر از بذل توجه شما استاد گرامی
1- اتفاقا به پارامترهای add و edit و غیره هم رسیدم اما برای حالتی است که زیر فرم نداشته باشید.
یعنی رکوردهای یک فرم را تحت تاثیر قرار میدهد نه زیر فرم.

2- متوجه فرمایشتان نشدم.

mazoolagh
یک شنبه 25 مهر 1400, 11:15 صبح
یک توضیح مختصر میدم که اگر ابهامی هست برطرف بشه.

هر فرم 4 ویژگی داره برای کنترل چگونگی کار با دیتا:
allow additions
allow deletions
allow edits
data entry

وقتی شما فرم رو به روش معمولی باز میکنین، این 4 ویژگی که در طراحی (یا با کدهای خود فرم) تعیین شدن ، موثر هستن.
حالا اگر فرم رو با docmd.openform بازکنین، با پارامتر datamode میتونین (تا حدی) این 4 تا رو کنترل کنین.
اگر datamode رو روی propertysetting بگذارین معنیش این هست که این 4 ویژگی همونی که در طراجی فرم تنظیم شده بمونن (پیشفرض هم همین هست)
اگر datamode رو readonly بگذارین، تمام این 4 ویژگی فرم (و همچنین سابفرم های اون) رو false میکنه (بدون توجه به اینکه در طراحی چی تعریف شدن).

mazoolagh
یک شنبه 25 مهر 1400, 11:22 صبح
اگر datamode رو روی add بگذارین، فرم به حالت data entry میره (یعنی هر 4 ویژگی مورد نظر رو true میگذاره بدون توجه به مقادیر تنظیم شده در طراحی)
بنابراین اینکه فقط ثبت رکورد جدید داشته باشین (بدون ویرایش و ...) شاید با این بدست نیاد.
البته فکر کنم فقط در محدوده رکوردهای ثبت شده قابلیت ویرایش و ... داشته باشین و به رکوردهایی که قبلا ثبت شدن دسترسی ندارین - ولی این رو باید تست کنین چون مطمئن نیستم.

mazoolagh
یک شنبه 25 مهر 1400, 11:23 صبح
در مورد openargs و کاربرد اون اینجا مطلب و نمونه هست، اون ها رو مطالعه کنین تا بعدا پیاده سازی حواسته تون رو با استفاده از اون توضیح بدم.

m3343kh
یک شنبه 25 مهر 1400, 12:02 عصر
سلام
153527
حالت آخر acFormReadOnly برای دکمه فقط خواندنی خوبه
اما مسئله من با حالت ورود اطلاعات بدون دسترسی به ویرایش رکوردهای قبلی هست که هیچ کدام از این 4 گزینه Datamode برآورده نمیکند
یعنی کاربر بتواند رکوردهای قبلی را مشاهده کند و قادر اضافه کردن رکورد جدید باشد اما با خروج از آن رکورد نتواند ویرایش کند.

m3343kh
یک شنبه 25 مهر 1400, 14:02 عصر
بالاخره جوینده یابنده است
با اضافه کردن یک خط کد به زیر کد openform بصورت زیر، درست شد

DoCmd.OpenForm "Data_frm", acNormal
Form_Data_frm.Data_sfrm.Form.AllowEdits = False

و اما مسئله اصلی این بود که فرم دوم (data_frm)در لیست فرمهای vba ظاهر نمی شد و نمی توانستم آدرس بدهم

برای این کار یک دکمه روی فرم data_frm یا فرم دوم درست کردم و در رویداد open آن از vba استفاده کردم و فرم دوم وارد لیست فرمهای vba شد. بعد دکمه را حذف کردم

m3343kh
یک شنبه 25 مهر 1400, 14:07 عصر
من از این روش برای دسترسی کاربرانی که پس از لاگین بسته به نوع کاربریشان، اجازه ورود اطلاع جدید را دارند ولی دسترسی به رکوردهای قبلی فقط بصورت نمایش دارند میخواستم استفاده کنم.

شاید به درد دوستان دیگر بخورد.
ممنون از سایت بسیار خوبتان.:تشویق:

amirzazadeh
یک شنبه 25 مهر 1400, 14:11 عصر
سلام
یه نگاهی به این لینک بندازید (روش پیشنهادی دومش اینه که از دو تا ساب فرم استفاده کنید رکوردهای موجود در ساب فرم دوم فقط خواندنی هستند و اونایی که در حال ایجاد هستند در ساب فرم اول تولید و به محض تکمیل داده به ساب فرم دوم منقل و از دسترس کاربر خارج میشه )
https://stackoverflow.com/questions/4849141/how-to-lock-specific-rows-in-a-subform-when-a-form-loads

m3343kh
یک شنبه 25 مهر 1400, 17:20 عصر
بله ممنون
قبلا از روش دو ساب فرم استفاده کرده بودم.
اما این روش حجم فایل رو کمتر میکنه (یک فرم و ساب فرم)

mazoolagh
سه شنبه 27 مهر 1400, 12:39 عصر
و اما مسئله اصلی این بود که فرم دوم (data_frm)در لیست فرمهای vba ظاهر نمی شد و نمی توانستم آدرس بدهم
برای این کار یک دکمه روی فرم data_frm یا فرم دوم درست کردم و در رویداد open آن از vba استفاده کردم و فرم دوم وارد لیست فرمهای vba شد. بعد دکمه را حذف کردم


درستش این هست که این کار رو در parent سابفرم انجام بدین، همه کارهایی که کردین اضافی بوده.

mazoolagh
سه شنبه 27 مهر 1400, 12:50 عصر
بله ممنون
قبلا از روش دو ساب فرم استفاده کرده بودم.
اما این روش حجم فایل رو کمتر میکنه (یک فرم و ساب فرم)

اگر برنامه کامل شده و احتمال نیاز به تغییر طراحی در فرم در آینده هم نیست، ایرادی نداره که یک نسخه فرم readonly یا addonly و ...هم داشته باشین چون حجم فایل اصلا اهمیتی نداره.
اون چه که اهمیت داره سادگی نگهداری برنامه است.

mazoolagh
سه شنبه 27 مهر 1400, 12:53 عصر
سلام
یه نگاهی به این لینک بندازید (روش پیشنهادی دومش اینه که از دو تا ساب فرم استفاده کنید رکوردهای موجود در ساب فرم دوم فقط خواندنی هستند و اونایی که در حال ایجاد هستند در ساب فرم اول تولید و به محض تکمیل داده به ساب فرم دوم منقل و از دسترس کاربر خارج میشه )
https://stackoverflow.com/questions/4849141/how-to-lock-specific-rows-in-a-subform-when-a-form-loads

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

m3343kh
سه شنبه 27 مهر 1400, 21:37 عصر
درستش این هست که این کار رو در parent سابفرم انجام بدین، همه کارهایی که کردین اضافی بوده.

ممنون
قسمت parent سابفرم کدوم قسمت هست؟

mazoolagh
پنج شنبه 29 مهر 1400, 08:53 صبح
ممنون
قسمت parent سابفرم کدوم قسمت هست؟

منظور از parent همون فرمی هست که سابفرم درون اون قرار داره.

چون صحبت دسترسی کاربران هم شد سر فرصت یک نمونه میگذارم تا روش کار روشن بشه.

amirzazadeh
سه شنبه 04 آبان 1400, 11:09 صبح
سلام و روز خوش
فکر کنم این لینک اشتباهی و برای مورد دیگه ای بوده.
با سلام و احترام
منظور من از معرفی این لینک دادن ایده کلی بود. به شخصه خودم از فرم های باند نشده استفاده می کنم.به جای ساب فرم هم لیست باکس یا لسیت ویو رو به کار می گیرم.
پیشنهاد خودم اضافه کردن یک فیلد با عنوان کد کاربر ایجاد کننده به رکوردها هست که موقع ویرایش در صورت همخوانی کد کاربر ویرایش کننده با کد کاربر ایجاد کننده، اجازه ویرایش داده خواهد شد و در غیر اینصورت با دادن پیام از ویرایش جلوگیری خواهد شد.