PDA

View Full Version : ایجاد محدودیت در درج تاریخ



ghafeleh1370
سه شنبه 04 خرداد 1389, 18:14 عصر
با سلام
من چون توی فرمهام از تاریخ هجری - شمسی استفاده می کنم و همچنین چون مقدار تاریخ از نوع number هست می خوام براش محدودیت قرار بدم یعنی قبل یا بعد از تاریخ مورد نظری رو وارد نکنم
لطفا راهنمایی کنید

id1385
سه شنبه 04 خرداد 1389, 19:24 عصر
با سلام
من چون توی فرمهام از تاریخ هجری - شمسی استفاده می کنم و همچنین چون مقدار تاریخ از نوع number هست می خوام براش محدودیت قرار بدم یعنی قبل یا بعد از تاریخ مورد نظری رو وارد نکنم
لطفا راهنمایی کنید


سلام
منظورتون از اینکه به صورت نامبر هست یعنی چی ؟
یعنی به این صورت ؟ 1389/03/04
یا اینکه می خواهید سال و ماه و عدد رو جدا کرده و هر کدوم رو جدا وارد جدول کنید ؟

اگر منظورتون قسمت اوله که می تونید به شکل زیر عمل کنید.
اول Input mask تکست باکس خودتون رو به صورت 0000/00/00 وارد کنید
بعد توی اکشن KeyPress تکست باکس عدد زیر رو وارد کنید تا بغیر چارترهای انتابی که اعداد 0 تا 9 هستند و یک ” / “ که تاریخ رو جدا می کنه کاربر چیز دیگه ای رو نتونه وارد کنه.



Private Sub txt_date_KeyPress(KeyAscii As Integer)
On Error Resume Next
Dim StrValid As String
StrValid = "0123456789/"
If KeyAscii > 26 Then
If InStr(StrValid, Chr(KeyAscii)) = 0 Then
KeyAscii = 0
End If
End If
End Sub
اگر هم می خواهید که بصورت دوم عمل کنید و سال/ماه/روز رو جدا کنید م یتونید بصورت زیر عمل کنید.
اول تاریخ رو تقسیم کنید یا همون split ، و بعد اونا رو فراونی کنید.بصورت کد زیر




'//txt_date="1389/03/04"
Dim MyDate(), MyYear, MyMon, MyDay As String
MyDate() = Split(txt_date.Value, "/") ' string tarikh
MyYear = MyDate(0) ' Sal
MyMon = MyDate(1) ' Mah
MyDay = MyDate(2) ' Rooz
/* ---------------------------
KhorooJi
MyDate(1389,03,04)
MyYear = 1389
MyMon = 03
MyDay = 04
--------------------------- */

موفق باشید

ghafeleh1370
سه شنبه 04 خرداد 1389, 19:39 عصر
ببخشید توضیحات کم بود خوب متوجه نشدید
من توی table فرمت یا data type تاریخ رو از نوع تکست استفاده کردم بدلیلی اینکه اگه بخوام از نوع date/time استفاده کنم بدلیل استفاده از تاریخ شمسی به مشکل می خورم چون بعضی از تاریخ ها رو نمی تونم وارد کنم
به همین دلیل من از تکست برای وارد کردن استفاده کردم
حالا می خوام یه شرط بزارم که مثلا تاریخ قبل از 1388/12/12 رو وارد نکن یعنی اگه کاربر خواست تاریخ 1388/12/11 رو وارد کنه پیغام خطا ظاهر بشه که باید تاریخبزگتر از این تاریخ باید باشد
مثل نمونه زیز
1388/12/12<
توی نمونه DATE/TIME مشکلی با این کد ندارم ولی توی تکست نمی دونم چکار کنم
ممنون میشم راهنمایی کنید

sajjad_kochekian
سه شنبه 04 خرداد 1389, 20:25 عصر
من یک پیشنهاد دیگه براتون دارم اگر می خواهید به اینصورت که خودتون گفتید کنترل کنید
بهتر است سه فیلد برای تاریخ در نظر بگیرید(سال-ماه-روز)
این طوری می تونید از عدد استفاده کنید به جای متن و کنترل آن هم راحت است

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

id1385
سه شنبه 04 خرداد 1389, 20:50 عصر
شما می تونید از datediff استفاده کنید، ولی این زیاد جالب نیست برای تاریخ هجری شمسی.
می تونید توی یه فانکشن خودتون ماه های رو تعریف کنید چون ما تعدا روزهای متفاوت توی ماه هامون داریم کاربر به مشکل می خوره، برای حل مشکلتون شما می تونید چند تا کار انجام بدید.
datedif:
استفاده از دیت دیف درصورتی که زیاد براتون مهم نباشه که 100% صحیح کار کنه.!!!!


'ekhtelafe beyne do tarikh
'ekhtelafe beyne mahe tarikhe aval va tarikhe dovom
MsgBox DateDiff("yyyy", "1389/02/04", "1390/03/04")
MsgBox DateDiff("m", "1389/02/04", "1389/03/04")
MsgBox DateDiff("d", "1389/02/04", "1389/03/04")


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

راه سوم:
توی ماژول ماهها رو تعریف و مقدار هر ماه رو بدید و اختلاف ماهها رو در بیارید.

موفق باشد.

Fatollah_ghazi
سه شنبه 04 خرداد 1389, 20:55 عصر
با سلام ميتونيد در قسمت validaition rule فيلد تاريخ خود شرط بزاريد مثلا" بزرگتر از يك تاريخ خاص يا كوچكتر و يا حتي بين دو تاريخ مورد نظر.

ghafeleh1370
سه شنبه 04 خرداد 1389, 21:05 عصر
من یک پیشنهاد دیگه براتون دارم اگر می خواهید به اینصورت که خودتون گفتید کنترل کنید
بهتر است سه فیلد برای تاریخ در نظر بگیرید(سال-ماه-روز)
این طوری می تونید از عدد استفاده کنید به جای متن و کنترل آن هم راحت است

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

نمی تونم چون تاریخ توی یه فیلد تعیین شده نمونه شمسی رو ندارم یعنی چطور توی TABLE که نمیشه ماژول شمسی رو تعریف کرد توی فرم رو نمی دونم


شما می تونید از datediff استفاده کنید، ولی این زیاد جالب نیست برای تاریخ هجری شمسی.
می تونید توی یه فانکشن خودتون ماه های رو تعریف کنید چون ما تعدا روزهای متفاوت توی ماه هامون داریم کاربر به مشکل می خوره، برای حل مشکلتون شما می تونید چند تا کار انجام بدید.
datedif:
استفاده از دیت دیف درصورتی که زیاد براتون مهم نباشه که 100% صحیح کار کنه.!!!!


'ekhtelafe beyne do tarikh
'ekhtelafe beyne mahe tarikhe aval va tarikhe dovom
MsgBox DateDiff("yyyy", "1389/02/04", "1390/03/04")
MsgBox DateDiff("m", "1389/02/04", "1389/03/04")
MsgBox DateDiff("d", "1389/02/04", "1389/03/04")
راه دوم :
می تونید تابع بالا رو استفاده کنید ولی قبلش تاریخ شمسی رو میلادی کنید و اختلاف اونا رو در بیارید که این راه به نظرم راحت ترین روش براتون می تونه باشه چون اولی جالب نیست راه سوم هم یه کم سخته! یادتون باشه تو این راه هم ممکنه اون اختلافات پیش بیاد.

راه سوم:
توی ماژول ماهها رو تعریف و مقدار هر ماه رو بدید و اختلاف ماهها رو در بیارید.

موفق باشد.

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

با سلام ميتونيد در قسمت validaition rule فيلد تاريخ خود شرط بزاريد مثلا" بزرگتر از يك تاريخ خاص يا كوچكتر و يا حتي بين دو تاريخ مورد نظر.

با این راه نمیشه چون تست کردم جواب نداد

اینم نمونه خودم اگه خواستید رو این نمونه تست کنید
تا اینجا هم ممنون بابت جوابهاتون

Fatollah_ghazi
سه شنبه 04 خرداد 1389, 22:04 عصر
با سلام همونطوري كه گفته بودم عمل كرد نمونه خودتو اصلاح كردم .