طرحت في ا لمنتدى عدة حلول لمشكلة تقويم أم القرى ، وهي حلول تحتاج إلى تعديلات خاصة على تصميم القاعدة ، وفي رأيي الشخصي أنها حلول مقيدة وغير كاملة لأنها تمنعك الاستخدام بسهولة لدوال التاريخ في النظام ، ومع ذلك تبقى هي الحلول المتوفرة والمستخدمة في قواعد البيانات باختلاف أنواعها .
ما أود طرحه هنا هو دالة تقوم بتنبيه المستخدم عند إدخاله لتاريخ نهاية شهر هجري في تقويم أم القرى مثلاً ( 30-12-1424هـ ) وهذا التاريخ غير مكتمل في التقويم الهجري المستخدم في الاكسس ، فتقوم هذه الدالة بتنبيه المستخدم لهذه المشكلة ، وأنه سوف يتم تعديل التاريخ المدخل بنقص يوم واحد بدلاً من زيادة يوم واحد .
ولايخفى أن هذا الحل لا يصلح لقواعد البيانات التي تعتمد على التاريخ بشكل جذري ( وأكثر قواعد البيانات هكذا ) .
ومع هذا فإن بعض قواعد البيانات لايهم فيها فرق يوم في التاريخ مع بقاء التاريخ في نفس الشهر .
وإلى الدالة التي أرجو أن تستفيدوا منها ، كما استفدنا من هذا المنتدى ومن أعضائه ومشرفيه الكرام .
ضع الكود التالي في حدث بعد التحديث لأي مربع نص للتاريخ في قاعدة البيانات
Private Sub تاريخ_العقد_AfterUpdate() Calendar = vbCalHijri تاريخ_العقد = (تدقيق_التاريخ(تاريخ_العقد.Text)) End Sub
ثم ضع الدالة التالية في وحدة نمطية خاصة (Module)
Public Function تدقيق_التاريخ(da As String)
Dim rsalh
Calendar = vbCalHijri
rsalh = "أنت أدخلت تاريخ" & Chr(13) & da & Chr(13) & _
"وهذا الشهر غير كامل في التقويم الهجري الذي يختلف عن تقويم أم القرى" _
& Chr(13) & "لهذا سوف يتم تعديله إلى تاريخ " & _
Chr(13) & DateAdd("d", -1, da)
If Left(da, 2) = 30 And Day(da) = 1 Then
MsgBox rsalh, vbMsgBoxRight
تدقيق_التاريخ = DateAdd("d", -1, da)
ElseIf Right(da, 2) = 30 And Day(da) = 1 Then
MsgBox rsalh, vbMsgBoxRight
تدقيق_التاريخ = DateAdd("d", -1, da)
Else
تدقيق_التاريخ = CDate(da)
End If