فکر کنم در تابع FDateValid پست 158 برای اینکه بعد از صدور پیغام های تابع فوق بر روی تکست باکس تاریخ فوکوس شود نیاز بااشه بعد از دستور DoCmd.CancelEvent عبارت MyDate.SetFocus
اضافه شود.
فکر کنم در تابع FDateValid پست 158 برای اینکه بعد از صدور پیغام های تابع فوق بر روی تکست باکس تاریخ فوکوس شود نیاز بااشه بعد از دستور DoCmd.CancelEvent عبارت MyDate.SetFocus
اضافه شود.
سلام دوباره
خب باید بگم دست مریزاد و خسته نباشین
اول از همه این که در این نمونه shared logic رعایت شده که بسیار مهم هست (تاریخ ایرانی تقریبا در هر فرمی دست کم یکی هست).
بعد اینکه از رخداد Keypress کنترل برای فیلتر کردن کلیدها استفاده شده که این هم درسته.
اینها مهم هاش بود - مابقیش رو باید اونایی که به بحث علاقه دارن خودشون پیگیر باشن.
البته مثل همه نمونه های اولیه چیزهای ریزی هم دیده میشه:
مثلا اگر در رکورد جدید، کاربر بخواد تاریخ رو خالی بذاره و فرم رو ببنده (یک موقعیت کاملا متداول - بخصوص در این فرم که بعد از خروج از کنترل اتوماتیک میره رکورد بعدی)
مجبوره از task manager کلا اکسس رو رو ببنده!
یا اگر فرضا مقدار تاریخ از پیش 1331/04/31 ثبت شده باشه، کاربر میتونه 4 رو مثلا 8 بگذاره و این مقدار (1331/08/31) در جدول میشینه بدون هیچ پیامی.
با سلام و درود فراوان
ببخشید استاد مازولاق عزیز ! آیا نمونه ضمیمه 158 رو تست کردید
چون در ارتباط با این دو موردی که اشاره فرموده ای فکر کنم در نمونه فوق مشکلی وجود نداشته باشه ؛ شاید هم بنده دقیقاً متوجه منظور شما نشده ام
در ارتباط با مورد اول اگر کاربر از طریق فرم اقدام به ایجاد رکورد جدید نماید ولی بخواهد بدون وارد کردن تاریخ از فرم خارج شود با پیغام «ورود يک مقدار درست براي تاريخ الزامي الزامي ميباشد» مواجه میشود , چون در خصوصیت tag تکست باکس تاریخ علامت {} درج شده و مطابق شرط هفتم پست 145 باید لزوماً تاریخ وارد شود در غیر اینصورت امکان خروج از فرم وجود ندارد.
در ارتباط با مورد دوم هم همانطور که در توضیحات پست 157 اشاره کرده ام اگر چنین تغییری از طرف کاربر صورت بگیرد در هنگام خروج از فرم با پیغام« تعداد روزهاي هر ماه در شش ماهه دوم سال حداکثر 30 روز است !لطفا روز را اصلاح كنيد» مواجه میشود .
علی ایحال در نمونه اصلاح شده ضمیمه , تغییرات جزئی ای بعمل آورده ام
در گام بعدی نیاز هست یک سیستم نوتیفیکشن پیاده بشه که کاربر رو از وضعیت مشکل آگاه کنه
جوری که کمترین مزاحمت رو داشته باشه:
یعنی بجز وقتی که کاربر بخواد فرم با دیتا مشکل دار رو ببنده نباید هیچ message box باشه و این هم فقط بخاطر این که نیاز هست پاسخ کاربر رو بگیریم.
معمولا هر برنامه نویس اکسس یک استراتژی استاندارد و سراسری validation از پیش نوشته آماده کرده که در همه فرمها ازش برای چیزهایی مثل:
نام، نام خانوادگی، کدملی، شماره همراه، ایمیل، پلاک خودرو، ... استفاده میکنه؛
کافی هست این Persian DateBox ها رو هم در همین سناریو بیاره.
این سیستم نوتیفیکیشن هم برای حالت ویرایش رکورد و هم برای حالت رکورد جدید باید کار کنه.
حالا اگر کاربر، تاریخ تولد رو ناقص بخواد رد کنه:
enter یا tab بزنه یا
با موس بخواد رو فیلد دیگه ای فوکوس کنه یا
از navigation بخواد رو رکورد دیگه ای بره:
13.png
ولی اگر بخواد فرم رو ببنده، فقط اون موقع هست که بهش اطلاع میدیم رکورد ثبت نمیشه
و ازش میپرسیم که آیا کارش رو ادامه میده و دیتا درست وارد میکنه یا فرم بسته بشه:
14.png
یا اگر از قبل در تاریخ استخدام مقدار 1244/10/29 رو نوشتیم (در همین حالت new record)
و بعد فیلد دیگه ای رو ویرایش کنیم و دوباره به همین تاریخ استخدام برگردیم
و این بار دهگان روز ماه رو از 2 به 3 تغییر بدیم و بخواهیم از فیلد خارج بشیم:
19.png
ولی اگر بخواهیم فرم رو ببندیم:
20.png
دقت کنین که طبق خواسته اولیه ورود اطلاعات از چپ انجام میشه
و کنترل رقم بر اساس مقادیر سمت چپش هست و درست هم همینه
وگرنه ویرایش برای کاربر سخت میشه
در حالت ویرایش رکورد هم همین وضعیت هست
فقط پیام message box تفاوت میکنه :
23.png