موضوعات سابقة في هذه السلسلة
شرح دوال أكسس ـ دوال تدفق البرنامج
http://www.arabteam2000.com/vb/showthread....&threadid=18236
الإخوة الكرام
السلام عليكم ورحمة الله وبركاته وبعد
استكمالاً للشرح الذي بدأته حول دوال أكسس أقدم اليوم شرحاً من المستوى المتوسط لدوال التاريخ والوقت التي تبلغ 23 دالة ، ومعنى كون هذا الشرح من المستوى المتوسط أنني تركت شرح بعض الأشياء المتقدمة في هذه الدوال وبعض المتغيرات الاختيارية التي يمكن أن تؤثر على نتيجة الدالة حرصاً على عدم التشويش وركزت على الهدف الأساسي للدالة .
ونظراً لطول الشرح فقد أرفقت الشرح مكتوباً بالكامل في ملف وورد حتى تسهل قراءته وتطبيقه دون الحاجة للرجوع إلى المنتدى كما أرفقت ملف أكسس يحتوي على أمثلة لاستخدام كل دالة في الاستعلامات والنماذج
كلي أمل في أن يكون الشرح واضحاً ومفيداً لأحبتي وأنا على استعداد للإجابة على كافة التساؤلات حول هذه الدوال
إخوتي الكرام / وضعت هذه المشاركة في هذا المنتدى وليس في منتدى الدروس نظراً لقلة مرتادي ذلك المنتدى مقارنة بهذا المنتدى فإن رأى الإخوة المشرفون إبقاء هذه المشاركة بضعة أيام حتى يطلع عليها معظم الأعضاء فربما يكون ذلك أعم للقائدة وإن رأوا نقلها مباشرة فذلك لهم
أخيراً ... لا يزال لدي الأمل بأن أرى مساهمة من بقية الإخوة في شرح بعض الدوال وتحمل جزء من هذه المهمة الشاقة ، وأقدم اعتذاري عن التأخر في تقديم هذا الشرح فقد استغرقت كتابته أكثر من شهر ونصف ولم أكن متفرغاً بشكل كامل لذلك
إليكم شرح دوال التاريخ والوقت
Cdate
تستخدم دالة Cdate من أجل تحويل سلسلة إلى تاريخ وتنصح مايكروسوفت باستخدام هذه الدالة دائماً مع متغيرات التاريخ لضمان تحويل المتغيرات الممررة إلى تاريخ كما أنها تقوم بالتأكد من أن المتغير الممرر من نوع تاريخ ، كما أنها مفيدة في التأكد من تحويل التاريخ الممرر للدالة إلى التقويم الحالي المحدد في قاعدة البيانات ( هجري ، ميلادي )
وتستخدم بالصيغة التالية :
CDate(MyDate)
على سبيل المثال فإن الدالة بالصيغة التالية :
CDate("February 12, 1969")ستعيد متغيراً من نوع تاريخ
CVdate
وهي مثل دالة Cdate تماماً إلا أن المتغير الذي ترجعه الدالة هو من نوع Variant والألوية فيه لمتغير التاريخ أي أن النوع الفرعي له هو تاريخ
Date
وهي تقوم بإرجاع أو عرض تاريخ اليوم الحالي وتستخدم عند الرغبة في الحصول على تاريخ اليوم
وتستخدم بالصيغة التالية :
Date()
حيث ترجع تاريخ اليوم
Time
وهي تقوم بإرجاع أو عرض الوقت الحالي للنظام وتستخدم عند الرغبة في الحصول على الوقت الحالي
وتستخدم بالصيغة التالية :
Time ()
حيث ترجع الوقت الحالي
Now
وهي تقوم بإرجاع أو عرض الوقت والتاريخ الحالي معاً وتستخدم عند الرغبة في الحصول على الوقت والتاريخ الحالي معاً
وتستخدم بالصيغة التالية :
Now()
الوقت والتاريخ الحالي معاً
DateAdd
تعد دالة DateAdd من دوال التاريخ المهمة حيث تستخدم في إضافة مدة معينة على تاريخ معين
لنفترض أن لديك تاريخاً ما وتريد معرفة التاريخ الموافق بعد إضافة 100 يوم مثلاً على هذا التاريخ في هذه الحالة ستكون دالة DateAdd هي الدالة المناسبة
تتطلب دالة DateAdd تحديد ثلاثة متغيرات هي :
1- نوع الفترة التي تريد إضافتها وهل هي يوم ِأم شهر أم سنة أم ساعة إلخ ،،،
2- العدد أي ما هو عدد الأيام أو الأشهر التي تريد إضافتها
3- التاريخ الذي تريد الإضافة إليه
وتستخدم بالصيغة التالية :
DateAdd(الفترة, العدد, التاريخ)
حيث تعيد متغيراً من نوع تاريخ
هناك عدد من متغيرات الفترة التي يمكن استخدامها وفي القائمة التالية أهم هذه المتغيرات :
yyyy سنة
q ربع سنة
m شهر
d يوم
w يوم الأسبوع
ww أسبوع
h ساعة
n دقيقة
s ثانية
فإذا أردنا مثلاً إضافة (10) أيام إلى تاريخ "1/1/1423" فتكون الدالة بالصيغة التالية :
DateAdd("d", 10, "1/1/1423")DateDiff
وهي أيضاً من أهم دوال التاريخ وتستخدم لحساب المدة بين تاريخين بحسب متغير الفترة المحدد للدالة
وربما تلاحظون أننا كثيراً ما نستخدم هذه الدالة لعدد من الأغراض مثل حساب عدد أيام الإجازة أو الغياب أو خارج الدوام أو العمر أو غيرها
وتستخدم هذه الدالة بالصيغة التالية :
DateDiff(الفترة, تاريخ1, تاريخ2[, أول يوم في الأسبوع], أول أسبوع في السنة]])
ومتغيرات الدالة كالتالي :
الفترة : وهو أحد المتغيرات المذكورة سابقاً مثل m , d , w وغيرها
تاريخ1 : التاريخ الأول وهو التاريخ الأصغر
تاريخ 2 : التاريخ الثاني وهو التاريخ الأكبر ولو عكست لكانت قيمة الدالة بالسالب
أول يوم في الأسبوع : متغير اختياري أي يمكن عدم استخدامه وهو مفيد في حالة حساب عدد الأسابيع بين تاريخين إذ يتم الاعتماد عليه في تحديد أول يوم في الأسبوع وبالتالي قد يتغير عدد الأسابيع بحسب هذا المتغير ، فلو افترضنا مثلاً أننا نريد حساب المدة مثلاً من يوم السبت هذا الأسبوع حتى يوم الاثنين الأسبوع القادم فلو جعلنا أول يوم في الأسبوع هو الأحد فستكون النتيجة هي ( 2 ) أسبوعان لكن لو جعلنا أول يوم في الأسبوع هو يوم الأربعاء مثلاً فالنتيجة ستكون ( 1 ) أسبوع واحد لأنه لا يوجد خلال هذه الفترة سوى يوم أربعاء واحد وهكذا
زد على ذلك أن هذا المتغير مهم في حالة رغبتنا في حساب عدد أحد أيام الأسبوع بين تاريخين مثل لو أردنا حساب أيام السبت بين تاريخين ففي هذه الحالة نجعل متغير الفترة هو W أي يوم في الأسبوع ومتغير أول يوم في الأسبوع هو يوم السبت وهذا مفيد في حالة رغبتك في حساب المدة بالأيام بين تاريخين بدون أيام الإجازات ( الخميس والجمعة مثلاً ) حيث تستخرج عدد أيام الخميس خلال التاريخين وعدد أيام الجمعة ثم تجمعها وتطرحها من مجموع الأيام بين التاريخين
متغير أول يوم في الأسبوع يستخدم أحد المتغيرات التالية :
vbUseSystem 0 نظام الويندوز
vbSunday 1 الأحد وهو الافتراضي
vbMonday 2 الاثنين
vbTuesday 3 الثلاثاء
vbWednesday 4 الأربعاء
vbThursday 5 الخميس
vbFriday 6 الجمعة
vbSaturday 7 السبت
أما متغير أول أسبوع في السنة فهو اختياري أيضاً وهو مفيد في حالة حساب عدد الأسابيع أي في حالة استخدام متغير الفترة ww حيث يحدد ما هو أول أسبوع سيتم اعتباره ضمن هذه السنة وهو يستخدم أحد المتغيرات التالية :
vbUseSystem 0 نظام الويندوز
vbFirstJan1 1 أول أسبوع يحتوي على أي يوم في السنة الجديدة وهو الافتراضي
vbFirstFourDays 2 الأسبوع الذي يحتوي على أربعة أيام أو أكثر في السنة الجديدة
vbFirstFullWeek 3 الأسبوع الذي تكون جميع أيامه في السنة الجديدة
DatePart
وتستخدم هذه الدالة للحصول على جزء معين من التاريخ الممرر لها مثل العام أو اليوم أو الشهر حيث تعيد متغيراً من نوع Variant (Integer) وتستخدم بالصيغة التالية
DatePart(الفترة, التاريخ)
حيث يحدد متغير الفترة الجزء المطلوب استخراجه من التاريخ المرر لها فعلى سبيل المثال ترجع الدالة التالية العام ( 1423 )
DatePart("yyyy","1/5/1423")بينما ترجع الدالة التالية الشهر ( 5 )
DatePart("m","1/5/1423")وترجع الدالة التالية اليوم ( 1 )
DatePart("d","1/5/1423")DateSerial
تستخدم دالة DateSerial لإرجاع متغير من نوع تاريخ من ثلاث متغيرات رقمية تمثل السنة والشهر واليوم وتسخدم بالصيغة التالية
DateSerial(year, month, day)
حيث يتم تمرير ثلاثة أرقام لها
يمثل الأول السنة والثاني الشهر والثالث اليوم ، ويمكن استخدام المعادلات الحسابية في هذه الأرقام فالمثال التالي :
DateSerial(1990 - 10, 8 - 2, 1 – 1)
يرجع التاريخ التالي : "31/5/1980" وهكذا
TimeSerial
تستخدم دالة TimeSerial لإرجاع متغير من نوع وقت من ثلاث متغيرات رقمية تمثل الساعات والدقائق والثواني وتسخدم بالصيغة التالية
TimeSerial(hour, minute, second)
حيث يتم تمرير ثلاثة أرقام لها يمثل الأول الساعات والثاني الدقائق والثالث الثواني ، ويمكن استخدام المعادلات الحسابية في هذه الأرقام فالمثال التالي :
TimeSerial(12 - 6, -15, 0)
يرجع الوقت التالي : " 5:45:00 " وهكذا
DateValue
تستخدم دالة DateValue من إجل تحويل تعبير معين إلى تاريخ ، وهي مفيدة في حالة وجود تعبير معين نرغب في تحويله إلى تاريخ حتى يتم التعامل معه كتاريخ ، وتستخدم بالصيغة التالية :
DateValue(date)
على سبيل المثال لو مررنا للدالة سلسلة
نصية تصلح لأن تكون تاريخاً فإن هذه الدالة ستقوم بتحويلها إلى تاريخ مثل
DateValue("12 12 1423")
TimeValue
تستخدم دالة TimeValue من إجل تحويل تعبير معين إلى وقت ، وهي مفيدة في حالة وجود تعبير معين نرغب في تحويله إلى وقت حتى يتم التعامل معه كوقت ، وتستخدم بالصيغة التالية :
TimeValue(time)
على سبيل المثال لو مررنا للدالة سلسلة نصية تصلح لأن تكون وقتاً فإن هذه الدالة ستقوم بتحويلها إلى وقت مثل
TimeValue("4:35:17 PM")Day – Month – Year - Weekday
تستخدم هذه الدوال الأربع لاسترجاع جزء معين من التاريخ حيث يمرر لأي منها تاريخ معين وتعيد قيمة جزء معين من هذا التاريخ وذلك على النحو التالي :
Day تعيد اليوم
Weekday تعيد يوم الأسبوع ( 1= الأحد ، 2= الاثنين ..... )
Month تعيد الشهر
Year تعيد السنة
وكلها تستخدم بنفس الصيغة التالية
Day(date) Weekday(date) Month(date) Year (date)
على سبيل المثال فإن المثال التالي :
Month("1/5/2002")يرجع القيمة ( 5 ) وهي قيمة جزء الشهر في التاريخ الممرر للدالة ، وهكذا
Second – Minute – Hour
تستخدم هذه الدوال الثلاث لاسترجاع جزء معين من الوقت حيث يمرر لأي منها وقت معين وتعيد قيمة جزء معين من هذا الوقت وذلك على النحو التالي :
Second تعيد الثواني
Minute تعيد الدقائق
Hour تعيد الساعات
وكلها تستخدم بنفس الصيغة التالية
Second(time ) Minute(time ) Hour(time)
على سبيل المثال فإن المثال التالي :
Minute("4:35:17 PM")يرجع القيمة ( 35 ) وهي قيمة جزء الدقائق في الوقت الممرر للدالة ، وهكذا
MonthName
وتستخدم لعرض اسم الشهر الموافق للرقم المحدد مع خيار لعرض الاسم المختصر أو الكامل وتكون بالصيغة التالية :
MonthName(رقم الشهر[, خيار لعرض الاسم المختصر])
حيث يتم تمرير رقم الشهر لها في المتغير الأول ومتغير من نوع Boolean ( منطقي ) في المتغير الثاني أي ( falsetrue ) حيث سيتم عرض الاسم المختصر مع true والاسم الطويل مع false
لعل من المفيد أن أقول إنه يمكن استخدام هذه الدالة مع دالة Month بحيث يتم التعرف على رقم الشهر في التاريخ ثم على اسمه وذلك بالصيغة التالية :
MonthName(Month("1/5/2002"( , false) لعرض الاسم الكامل
MonthName(Month("1/5/2002"( , true) لعرض الاسم المختصرWeekdayName
وتستخدم لعرض اسم يوم الأسبوع الموافق للرقم المحدد مع خيار لعرض الاسم المختصر أو الكامل وتكون بالصيغة التالية :
WeekdayName(رقم اليوم, خيار لعرض الاسم المختصر, أول يوم في الأسبوع)
حيث يتم تمرير رقم اليوم داخل الأسبوع لها في المتغير الأول ومتغير من نوع Boolean ( منطقي ) في المتغير الثاني أي ( falsetrue ) حيث سيتم عرض الاسم المختصر مع true والاسم الطويل مع false ، أما الخيار الثالث فيستخدم لتحديد اليوم الأول في الأسبوع حيث سيتم بناء عليه حساب الأرقام ويمكن استخدام أي من القيم التالية في هذا المتغير :
vbUseSystem 0 سيتم استخدام إعدادات النظام
vbSunday 1 الأحد وهو الافتراضي
vbMonday 2 الاثنين
vbTuesday 3 الثلاثاء
vbWednesday 4 الأربعاء
vbThursday 5 الخميس
vbFriday 6 الجمعة
vbSaturday 7 السبت
لعل من المفيد أن أقول إنه يمكن استخدام هذه الدالة مع دالة Weekday بحيث يتم التعرف على رقم اليوم في التاريخ ثم على اسمه وذلك بالصيغة التالية :
WeekdayName (Weekday("1/5/2002"( , false , 0) لعرض الاسم الكامل
WeekdayName (Weekday("1/5/2002"( , true , 0) لعرض الاسم المختصرTimer
تعيد قيمة تمثل عدد الثواني التي مرت منذ منتصف الليل وتستخدم عادة لحساب المدة الزمنية التي استغرقتها عملية ما حيث يتم إسناد قيمة الـ Timer إلى متغير قبل بدء التنفيذ ، وبعد تنفيذ العملية تتم المقارنة بين القيمة الحالية لـ Timer والقيمة السابقة لمعرفة المدة الزمنية .
على سبيل المثال يمكنك استخدام الإجراء التالي لحساب المدة الزمنية التي استغرقها تنفيذ الاستعلام المرر للدالة وهو من أمثلة التعليمات :
Sub QueryTimer (strQueryName As String(
Dim sngStart As Single, sngEnd As Single
Dim sngElapsed As Single
sngStart = Timer
DoCmd.OpenQuery strQueryName, acNormal
sngEnd = Timer
sngElapsed = Format(sngEnd - sngStart, "Fixed")
MsgBox ("استغرق تنفيذ الاستعلام " & strQueryName & " " & sngElapsed & ثانية "")
End SubIsDate
تستخدم دالة IsDate لفحص ما إذا كان المتغير الممرر لها تاريخ أم لا حيث تعيد true إذا كان المتغير تاريخاً و تعيد false إذا لم يكن تاريخاً ، وتستخدم بالصيغة التالية :
IsDate(تعبير)
و يتم تمرير متغير ما لها لفحص إن كان يصلح لأن يكون تاريخاً أم لا وعلى سبيل المثال ترجع دالة IsDate القيمة true في المثال التالي :
IsDate("2/12/1990 ")بينما ترجع القيمة false في المثال التالي :
IsDate("أبو هاجر ")تحياتي وتقديري للجميع
أخوكم / أبو هاجر

