...............................
Printable View
...............................
با سلام مجدد
با صدا زدن تابع زیر در رویداد Change تکست باکس تاریخ تا حدودی هدف محقق میشه ولی در رویدادهای keydown/keypress موفق نشدم بدرستی این تابع رو اجرا کنم
Public Sub ShamsiDateValid(ctl As Control)
On Error GoTo Err_DateValid
Dim bInputMask As Boolean
If Len(ctl.InputMask) > 0 Then
bInputMask = True
Else
bInputMask = False
End If
If Left(ctl.Text, 1) <> 1 Then
ctl.Text = ""
ctl.SelStart = 1
Exit Sub
End If
If Mid(ctl.Text, 2, 1) < 2 Or Mid(ctl.Text, 2, 1) > 5 Then
ctl.Text = Left(ctl.Text, 1)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
If Mid(ctl.Text, 2, 1) = 5 Then
If Mid(ctl.Text, 3, 1) > 0 Then
ctl.Text = Left(ctl.Text, 2)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
End If
If Mid(ctl.Text, 2, 1) = 5 Then
If Mid(ctl.Text, 4, 1) > 0 Then
ctl.Text = Left(ctl.Text, 3)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
End If
If bInputMask = True Then
If Mid(ctl.Text, 6, 1) > 1 Then
ctl.Text = Left(ctl.Text, 5)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
Else
If Mid(ctl.Text, 5, 1) > 1 Then
ctl.Text = Left(ctl.Text, 4)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
End If
If bInputMask = True Then
If Mid(ctl.Text, 6, 1) = 1 And Mid(ctl.Text, 7, 1) > 2 Then
ctl.Text = Left(ctl.Text, 6)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
If Mid(ctl.Text, 6, 1) = 0 And Mid(ctl.Text, 7, 1) = 0 Then
ctl.Text = Left(ctl.Text, 6)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
If Mid(ctl.Text, 9, 1) = 0 And Mid(ctl.Text, 10, 1) = 0 Then
ctl.Text = Left(ctl.Text, 9)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
If Mid(ctl.Text, 9, 1) > 3 Then
ctl.Text = Left(ctl.Text, 8)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
If Int(Mid(ctl.Text, 6, 2)) < 7 Then
If Mid(ctl.Text, 9, 1) > 2 And Mid(ctl.Text, 10, 1) > 1 Then
ctl.Text = Left(ctl.Text, 9)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
ElseIf Int(Mid(ctl.Text, 6, 2)) > 6 Then
If Mid(ctl.Text, 9, 1) > 2 And Mid(ctl.Text, 10, 1) > 0 Then
ctl.Text = Left(ctl.Text, 9)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
End If
Else
If Mid(ctl.Text, 5, 1) = 1 And Mid(ctl.Text, 6, 1) > 2 Then
ctl.Text = Left(ctl.Text, 5)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
If Mid(ctl.Text, 5, 1) = 0 And Mid(ctl.Text, 6, 1) = 0 Then
ctl.Text = Left(ctl.Text, 5)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
If Mid(ctl.Text, 7, 1) = 0 And Mid(ctl.Text, 8, 1) = 0 Then
ctl.Text = Left(ctl.Text, 7)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
If Mid(ctl.Text, 7, 1) > 3 Then
ctl.Text = Left(ctl.Text, 6)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
If Int(Mid(ctl.Text, 5, 2)) < 7 Then
If Mid(ctl.Text, 7, 1) > 2 And Mid(ctl.Text, 8, 1) > 1 Then
ctl.Text = Left(ctl.Text, 7)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
ElseIf Int(Mid(ctl.Text, 5, 2)) > 6 Then
If Mid(ctl.Text, 7, 1) > 2 And Mid(ctl.Text, 8, 1) > 0 Then
ctl.Text = Left(ctl.Text, 7)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
End If
End If
Exit_DateValid:
Exit Sub
Err_DateValid:
Resume Exit_DateValid
End Sub
فکر کنم بشه کدها رو یمقداری جمع وجورتر نوشت
فکر می کنم کدهای نمونه جدیدتر نسبت به نمونه قبل جمع و جورتر و خلاصه تر شده باشه
Public Sub ShamsiDateValid(ctl As Control)
On Error GoTo Err_DateValid
Dim bInputMask As Boolean
If Len(ctl.InputMask) > 0 Then
bInputMask = True
Else
bInputMask = False
End If
If Left(ctl.Text, 1) <> 1 Then
ctl.Text = ""
ctl.SelStart = 1
Exit Sub
End If
If Mid(ctl.Text, 2, 1) < 2 Or Mid(ctl.Text, 2, 1) > 5 Then
ctl.Text = Left(ctl.Text, 1)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
If Mid(ctl.Text, 2, 1) = 5 Then
If Mid(ctl.Text, 3, 1) > 0 Then
ctl.Text = Left(ctl.Text, 2)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
End If
If Mid(ctl.Text, 2, 1) = 5 Then
If Mid(ctl.Text, 4, 1) > 0 Then
ctl.Text = Left(ctl.Text, 3)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
End If
If Mid(GetNumbers(ctl.Text), 5, 1) > 1 Then
If bInputMask = False Then ctl.Text = Left(ctl.Text, 4) Else: ctl.Text = Left(ctl.Text, 5)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
If Mid(GetNumbers(ctl.Text), 5, 1) = 1 And Mid(GetNumbers(ctl.Text), 6, 1) > 2 Then
If bInputMask = False Then ctl.Text = Left(ctl.Text, 5) Else: ctl.Text = Left(ctl.Text, 6)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
If Mid(GetNumbers(ctl.Text), 5, 1) = 0 And Mid(GetNumbers(ctl.Text), 6, 1) = 0 Then
If bInputMask = False Then ctl.Text = Left(ctl.Text, 5) Else: ctl.Text = Left(ctl.Text, 6)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
If Mid(GetNumbers(ctl.Text), 7, 1) = 0 And Mid(GetNumbers(ctl.Text), 8, 1) = 0 Then
If bInputMask = False Then ctl.Text = Left(ctl.Text, 7) Else: ctl.Text = Left(ctl.Text, 9)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
If Mid(GetNumbers(ctl.Text), 7, 1) > 3 Then
If bInputMask = False Then ctl.Text = Left(ctl.Text, 6) Else: ctl.Text = Left(ctl.Text, 8)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
If Int(Mid(GetNumbers(ctl.Text), 5, 2)) < 7 Then
If Mid(GetNumbers(ctl.Text), 7, 1) > 2 And Mid(GetNumbers(ctl.Text), 8, 1) > 1 Then
If bInputMask = False Then ctl.Text = Left(ctl.Text, 7) Else: ctl.Text = Left(ctl.Text, 9)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
ElseIf Int(Mid(GetNumbers(ctl.Text), 5, 2)) > 6 Then
If Mid(GetNumbers(ctl.Text), 7, 1) > 2 And Mid(GetNumbers(ctl.Text), 8, 1) > 0 Then
If bInputMask = False Then ctl.Text = Left(ctl.Text, 7) Else: ctl.Text = Left(ctl.Text, 9)
ctl.SelStart = Len(ctl.Text)
Exit Sub
End If
End If
Exit_DateValid:
Exit Sub
Err_DateValid:
Resume Exit_DateValid
End Sub
البته فعلا مورد 4 و 7 که در پست 145 به اونها اشاره شده انجام نشده
ضنمناٌ اگر در کدها مشاهده می کنین که برای Input Mask شرط برقرار شده بخاطر این است که ممکنه فرمت تاریخ در این قسمت وارد نشده باشد یا بعبارتی Input Mask خالی باشد
سلام دوباره،نقل قول:
نوشته شده توسط eb_1345
من چون دیر رسیدم همین نمونه پست 153 رو گرفتم.
دست مریزاد، خیلی خوب و بعنوان پیلوت واقعا فراتر از انتظار هست بخصوص در این زمان کوتاه.
مشکل keychange همین فلیکری هست که دیده میشه،
بجاش میشه از رخداد keydown استفاده کرد و با توجه به keyascii کلید رو شناسایی و با ترکیب text تکسباکس و داشتن محل cursor، پیشبینی کرد که چی قراره بشه.
موردی که خود اکسس پیام کامل نشدن ماسک رو میده
میشه در رخداد form error شناسایی و در form unload هندل کر (پست 17 تاپیک مبتدی: راهنمایی در نوشتن مسیج باکس)
با سلام مجدد
در رخداد KeyDown از کدهای زیر استفاده کرده ام:
Private Sub TxtDate_KeyDown(KeyCode As Integer, Shift As Integer)
On Error Resume Next
If Not KeyIsValid(KeyCode) Then KeyCode = 0
Dim BySelStart As Byte
Dim IntKeyCode As Integer
BySelStart = TxtDate.SelStart
IntKeyCode = GetNumbers(Chr(KeyCode))
'IntKeyCode = Chr(KeyCode)
If IntKeyCode <> 1 And BySelStart = 0 Then
KeyCode = 0
Exit Sub
End If
If Len(Left(GetNumbers(TxtDate.Text), 1)) > 0 And (IntKeyCode < 2 Or IntKeyCode > 5) And BySelStart = 1 Then
KeyCode = 0
Exit Sub
End If
If IntKeyCode > 0 And Mid(GetNumbers(TxtDate.Text), 2, 1) = 5 And BySelStart = 2 Then
KeyCode = 0
Exit Sub
End If
If IntKeyCode > 0 And Mid(GetNumbers(TxtDate.Text), 2, 1) = 5 And BySelStart = 3 Then
KeyCode = 0
Exit Sub
End If
If IntKeyCode > 1 And BySelStart = 5 Then
KeyCode = 0
Exit Sub
End If
If IntKeyCode > 2 And Mid(GetNumbers(TxtDate.Text), 5, 1) = 1 And BySelStart = 6 Then
KeyCode = 0
Exit Sub
End If
If IntKeyCode = 0 And Mid(GetNumbers(TxtDate.Text), 5, 1) = 0 And BySelStart = 6 Then
KeyCode = 0
Exit Sub
End If
If IntKeyCode > 3 And BySelStart = 8 Then
KeyCode = 0
Exit Sub
End If
If Val(Mid(GetNumbers(TxtDate.Text), 5, 2)) < 7 Then
If IntKeyCode > 1 And Mid(GetNumbers(TxtDate.Text), 7, 1) > 2 And BySelStart = 9 Then
KeyCode = 0
Exit Sub
End If
ElseIf Val(Mid(GetNumbers(TxtDate.Text), 5, 2)) > 6 Then
If IntKeyCode > 0 And Mid(GetNumbers(TxtDate.Text), 7, 1) > 2 And BySelStart = 9 Then
KeyCode = 0
Exit Sub
End If
End If
If IntKeyCode = 0 And Mid(GetNumbers(TxtDate.Text), 7, 1) = 0 And BySelStart = 9 Then
KeyCode = 0
Exit Sub
End If
End Sub
در این کدها دیگه مشکل فلیکری وجود نداره
البته این کد ها در صورت درست بودن باید بصورت یک تابع در بیاد و در رخداد KeyDown صدا زده شود
بر روی موردهای 6 و 7 پست 146 کاری انجام نداده ام
الآن که در حال ارسال نمونه جدید هستم متوجه مشکلی شدم که خیلی حوصله نداشتم بررسی کنم که دلیل مشکل چی میباشه و اون اینکه وقتی تاریخی رو کامل وارد می کنی و میخواهی با استفاده از کلید Delete کل تاریخ پاک بشه پاک نمیشه
باسلام مجدد
کدها رو همون روزشنبه تغییر دادم ولی ظاهراً سایت برنامه نویس دوسه روزی با مشکل مواجه شده بود که بخاطر همین نتونستم نمونه اصلاح شده رو ضمیمه کنم
در نمونه جدید فکر میکنم هر 7 مورد اشاره شده در پست 146 انجام شده باشه (البته بنظر خودم )
در نمونه جدید کدها رو در تابع زیر قرار دادم که فراخوانی این تابع در رخداد KeyPress صورت میگیره
Public Function ShamsiDateValid(myDate As Control, KeyAscii As Integer)
On Error Resume Next
Dim d, m, Y
Dim strDate As String
Dim IntKeyAscii As Integer
Dim KeyAsc As Integer
Dim BySelStart As Byte
If (KeyAscii > 47 And KeyAscii < 58) Or (KeyAscii = 8) Or (KeyAscii = 46) Or (KeyAscii = 9) Then
KeyAscii = KeyAscii
Else:
KeyAscii = 0
End If
If myDate.InputMask <> "0000/00/00" Then myDate.InputMask = "0000/00/00"
KeyAsc = Chr(KeyAscii)
BySelStart = myDate.SelStart
strDate = myDate.Text
IntKeyAscii = KeyAsc
Y = Split(myDate.Text, "/")(0)
m = Split(myDate.Text, "/")(1)
d = Split(myDate.Text, "/")(2)
Y = Replace(Y, "_", "")
m = Replace(m, "_", "")
d = Replace(d, "_", "")
If KeyAscii = 8 Then Exit Function
If IntKeyAscii <> 1 And BySelStart = 0 Then
KeyAscii = 0
Exit Function
End If
If Len(Left(Y, 1)) > 0 And (IntKeyAscii < 2 Or IntKeyAscii > 5) And BySelStart = 1 Then
KeyAscii = 0
Exit Function
End If
If IntKeyAscii >= 5 And Len(Y) = 4 And Mid(Y, 3, 1) > 0 And BySelStart = 1 Then
KeyAscii = 0
Exit Function
End If
If IntKeyAscii >= 5 And Len(Y) = 4 And (Mid(Y, 3, 1) > 0 Or Mid(Y, 4, 1) > 0) And BySelStart = 1 Then
KeyAscii = 0
Exit Function
End If
If IntKeyAscii > 0 And Mid(Y, 2, 1) = 5 And BySelStart = 2 Then
KeyAscii = 0
Exit Function
End If
If IntKeyAscii > 0 And Mid(Y, 2, 1) = 5 And BySelStart = 3 Then
KeyAscii = 0
Exit Function
End If
If IntKeyAscii > 1 And BySelStart = 5 Then
KeyAscii = 0
Exit Function
End If
If IntKeyAscii > 2 And Left(m, 1) = 1 And BySelStart = 6 Then
KeyAscii = 0
Exit Function
End If
If IntKeyAscii > 0 And Len(Mid(m, 2, 1)) > 0 And Mid(m, 2, 1) > 2 And BySelStart = 5 Then
KeyAscii = 0
Exit Function
End If
If IntKeyAscii = 0 And Left(m, 1) = 0 And BySelStart = 6 Then
KeyAscii = 0
Exit Function
End If
If IntKeyAscii > 3 And BySelStart = 8 Then
KeyAscii = 0
Exit Function
End If
If IntKeyAscii > 2 And Val(Left(m, 2)) > 6 And Len(Mid(d, 2, 1)) > 0 And Mid(d, 2, 1) > 0 And BySelStart = 8 Then
KeyAscii = 0
Exit Function
End If
If Val(Left(m, 2)) < 7 Then
If IntKeyAscii > 1 And Left(d, 1) > 2 And BySelStart = 9 Then
KeyAscii = 0
Exit Function
End If
ElseIf Val(Left(m, 2)) > 6 Then
If IntKeyAscii > 0 And Left(d, 1) > 2 And BySelStart = 9 Then
KeyAscii = 0
Exit Function
End If
End If
If IntKeyAscii = 0 And Left(d, 1) = 0 And BySelStart = 9 Then
KeyAscii = 0
Exit Function
End If
If IntKeyAscii >= 0 And Int(InStr(strDate, "_")) > 0 And (BySelStart + 1) > Int(InStr(strDate, "_")) Then
KeyAscii = 0
myDate.SelStart = Int(InStr(strDate, "_")) - 1
Exit Function
End If
End Function
از تابع زیر هم برای چک کردن موارد زیر استفاده شده :
1- خالی نبودن تاریخ در صورتی که در خصوصیت tag تکست باکس تاریخ {}درج شده باشد
2- چک کردن سال بین محدوده مجاز (برای زمانی که تاریخ بصورت کپی پیست وارد میشود)
3- کنترل تعداد روزها در شش ماهه دوم سال( برای زمانی که مثلا با ماه شش ماهه اول روز 31 برای روز وارد شده باشد بعد بیائیم عدد ماه شش ماه دوم وارد کنیم)
الیته برای این مورد میتوان بدون صدور پیغام هم در زمان تغییر عدد ماه چک شود که اگر قبلا برای روز عدد 31 وارد شده دیگر نتوان عدد ماههای نیمه دوم رو وارد کرد و یا اینکه اگر عدد شش ماهه دوم وارد شد در همان موقع چک شود که اگر عدد روز 31 میباشد عدد روز پاک شود تا در ادامه با توجه به عدد ماه پر شود
4- کنترل سال کبیسه
Public Function FDateValid(myDate As Control) As Boolean
On Error Resume Next
FDateValid = True
Dim d, m, Y As String
Y = Left(myDate, 4)
m = Mid(myDate, 5, 2)
d = Mid(myDate, 7, 2)
If IsNull(myDate) And myDate.Tag = "{}" Then
FDateValid = False
MsgBoxFa "!ورود يک مقدار درست براي تاريخ الزامي ميباشد"
DoCmd.CancelEvent
Exit Function
End If
If Not (Y >= 1200 And Y <= 1500) Then
FDateValid = False
MsgBoxFa "! محدوده مجاز سال بايد از 1200 تا 1500 وارد شود", vbCritical, "خطا"
DoCmd.CancelEvent
Exit Function
End If
If (Val(m) > 6 And Val(d) > 30) Then
FDateValid = False
MsgBoxFa ". تعداد روزهاي هر ماه در شش ماهه دوم سال حداکثر 30 روز است !لطفا روز را اصلاح كنيد", vbCritical, "خطا"
DoCmd.CancelEvent
Exit Function
End If
If LeapYear(Y) = True And Val(d) = 30 And Val(m) = 12 Then
FDateValid = False
MsgBoxFa ". تعداد روزهاي اسفند ماه حداکثر 29 روز است !لطفا روز را اصلاح كنيد", vbCritical, "خطا"
DoCmd.CancelEvent
Exit Function
End If
End Function
در این لینک یک ویدئو کوتاه در خصوص نحوه انتقال کرسر به اولین جای خالی سمت چپ تکست باکس تاریخ در حالتی که اگر اقدام به ورود اعداد سمت راست تاریخ شود با وجودیکه ارقام سمت چپ تاریخ خالی باشد نمایش داده میشود.
تهیه این ویدئو بیشتر برای دوستانی که حال و حوصله بررسی کدها و نمونه ضمیمه پست قبلی رو ندارند گذاشته شده
فکر کنم در تابع 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 ها رو هم در همین سناریو بیاره.
این سیستم نوتیفیکیشن هم برای حالت ویرایش رکورد و هم برای حالت رکورد جدید باید کار کنه.
برای باز شدن موضوع،
فرم زیر رو در حالت new record در نظر بگیرین:
ضمیمه 156664
ضمیمه 156665
ضمیمه 156666
حالا اگر کاربر، تاریخ تولد رو ناقص بخواد رد کنه:
enter یا tab بزنه یا
با موس بخواد رو فیلد دیگه ای فوکوس کنه یا
از navigation بخواد رو رکورد دیگه ای بره:
ضمیمه 156667
ولی اگر بخواد فرم رو ببنده، فقط اون موقع هست که بهش اطلاع میدیم رکورد ثبت نمیشه
و ازش میپرسیم که آیا کارش رو ادامه میده و دیتا درست وارد میکنه یا فرم بسته بشه:
ضمیمه 156669
یا اگر از قبل در تاریخ استخدام مقدار 1244/10/29 رو نوشتیم (در همین حالت new record)
و بعد فیلد دیگه ای رو ویرایش کنیم و دوباره به همین تاریخ استخدام برگردیم
و این بار دهگان روز ماه رو از 2 به 3 تغییر بدیم و بخواهیم از فیلد خارج بشیم:
ضمیمه 156670
ولی اگر بخواهیم فرم رو ببندیم:
ضمیمه 156671
دقت کنین که طبق خواسته اولیه ورود اطلاعات از چپ انجام میشه
و کنترل رقم بر اساس مقادیر سمت چپش هست و درست هم همینه
وگرنه ویرایش برای کاربر سخت میشه
در حالت ویرایش رکورد هم همین وضعیت هست
فقط پیام message box تفاوت میکنه :
ضمیمه 156672