السلام عليكم و رحمة الله و بركاتة
أخوان المبرمجين أعزكم الله
لقد لا حظت أن الكثيرين و خاصة ممن يعملون في المملكة العربية السعودية يشتكون من قصة التاريخ الهجري
أنا لا أخفيكم العلم كانت عندي نفس المشكلة بس حليتها حل نهائي و لله الحمد نسيت الصداع الي كانت مسببتة لي هذي المشكلة ،و أرتأيت ان أضع الحل على هذا الموقع أبتغاء رضاء الله و خدمة لأخواننا الي كانوا و ما زلوا يخدمونا و أكيد ما با يقصروا
لو أحتجنا لمساعدتهم
بالنسبة للتاريخ الهجري
طبعا الحاسب يتعامل مع التاريخ الميلادي فقط و التاريخ الهجري ناتج عن عملية حسابية غاية في التعقيد و للأسف الحاسب لا يعترف بالحسابات الهجرية ( جربوا و شوفوا على التاريخ 30 /2/ لأي سنة)
الفكرة ( لمبرمجي الفيجول بيسك بكل أصداراتة + VBA )
- تعمل حقل نصي لكل حقل تاريخ
فرضا لو معاك حقل أسمة Birth_Date ونوعه DateTime أضف لجانبة حقل نصي أسمة Birth_Date_HIJ
-لما يسجل المستخدم التاريخ الهجري في شاشة الأدخال يتم تحويل هذا التاريخ لميلادي في متغير
- يحفظ السجل طبيعي و لكن القيمة الي با تكون في الحقل التاريخ العادي هي
القيمة الموجودة في المتغير
- القيمة الي حطها المستخدم ( الهجرية ) تتسجل في الحقل النصي الي سويتة من شوية
عملية التحويل لها ثلاث دوال انا بفضل الله عملتها و نجحت بنسبة 100 %
فأن لكل حقل تاريخ حقل بجانبة نصي لحفظ التاريخ بشكل هجري
طبعا المستخدم من شاشات الادخال سيسجل تاريخ هجري
وعليكم أن تحولوا التاريخ المسجل لتاريخ ميلادي
ثم يحفظ التاريخ الميلادي الناتج في الحقل الي من النوع تاريخ و التاريخ الهجري في الحقل النصي
بالنسبة للأستعلام
العملية كالتالي
المستخدم سيسجل تاريخ هجري
و الدوال تحدد التاريخ المناسب بعد تحويلة لتاريخ ميلادي
ثم تستعلم عن طريق هذة القيم
و الحقول الناتجة من الأستعلام خلي الحقول النصية (الي تم تسجيل التاريخ الهجري فيها ) هي التي تظهر للمستخدم
بدل الحقول التي من نوع تاريخ التي تجري عليها العملية
و الدوال الي صممتها لهذة العملية هي كالتالي
-ToGregorianDate
و تستقبل تاريخ هجري و تحولة لتاريخ ميلادي
-ToHijriDate
و تستقبل تاريخ ميلادي و تحولة لتاريخ هجري
-ConvertDate
هذة الدالة الأساسية للدالتين السابقتين
و هي دالة التحويل نفسها
ضع الدوال السابقة في ملف Module و جرب
--------------------------------------------------الدوال -----------------------------------
Private Function ConvertDate(ByRef StringIn As String, ByRef OldCalender As Integer, ByVal NewCalender As Integer, ByRef NewFormat As String) As String
Dim SavedCal As Integer
Dim D As Date, s As String
SavedCal = Calendar
Calendar = OldCalender
D = CDate(StringIn)
Calendar = NewCalender
s = CStr(D)
ConvertDate = Format(s, NewFormat)
Calendar = SavedCal
End Function
Public Function ToHijriDate(ByVal GregorianDate As String) As String
Dim HijriDate As String, DateFormat As String
' DateFormat = "long date"
DateFormat = "dd/mm/yyyy"
HijriDate = ConvertDate(GregorianDate, vbCalGreg, vbCalHijri, DateFormat)
ToHijriDate = HijriDate
End Function
Public Function ToGregorianDate(ByVal HijriDate As String) As String
Dim GregorianDate As String, DateFormat As String
DateFormat = "dd/mm/yyyy"
GregorianDate = ConvertDate(HijriDate, vbCalHijri, vbCalGreg, DateFormat)
ToGregorianDate = GregorianDate
End Function
---------------------
أظن الفكرة واضحة
و هي ممتاز - من وجهة نظري - لعقدة التاريخ الهجري
[COLOR=red]
و أرجو من المشرفين نقل المقالة لأهم المواضيع لأنها حل مباشر و سيفيد كل الي يتعاملو من الفيجول بيسك مع أي نوع من أنواع قواعد البيانات
لا تنسونا من الدعاء
و سلامتكم