الانتقال إلى المحتوى

مشكلة ادخال التاريخ 30/صفر في قاعدة البيانات وتجربة بعض الحلول


moh_bin

Recommended Posts

السلام عليكم ورحمه الله وبركاته

شرح المشكلة :
أنه لا يمكن إدخال التاريخ الهجري 29-02-1430 و 30-02-1430 في أي حقل من نوع تاريخ في قاعدة البيانات
-----------------------------------------------------------------------------------------------------------------
** الحلول والتجارب التي تم عملها :
أولا :
1- الاعتماد على جداول تم إعدادها مسبقا ، ومن خلال هذه الجداول يستطيع الشخص التحويل ،
وهنا في مثالنا تم عمل جدول ويضم بداية التاريخ الهجري وما يقابله من ميلادي ، وكذلك نهاية التاريخ الهجري وما
يقابله من ميلادي على سبيل المثال كالتالي :

الشهر الهجري------------------ 1
اسم الشهر الهجري------------ محرم
بداية التاريخ الهجري------------- 01-01-1430
بداية التاريخ الميلادي------------ 29-12-2008
نهاية التاريخ الهجري------------- 29-01-1430
نهاية التاريخ الميلادي------------ 26-01-2009
**************************************************************************
الشهر الهجري------------------ 2
اسم الشهر الهجري------------ صفر
بداية التاريخ الهجري------------- 01-02-1430
بداية التاريخ الميلادي------------ 27-01-2009
نهاية التاريخ الهجري------------- 30-02-1430
نهاية التاريخ الميلادي------------ 25-02-2009
**************************************************************************
2- جعل نوع الحقل(التاريخ) الموجود في كل الفورم DATA TYPE=CHAR
3- ويتم تخزين التاريخ في قاعدة البيانات في حقل نوعه أيضاً DATA TYPE=CHAR
عيوبها :
الحقل التاريخ نوعه DATA TYPE=DATE موجود في جداول وشاشات النظام كاملة وعليه فإنه
من الصعب التعديل على كل النظام كامل .

-----------------------------------------------------------------------------------------------------------------

ثانياً :
جعل التاريخ الهجري هو التاريخ الافتراضي للـ DEVELOPER و لقاعدة البيانات وذلك من خلال التالي :
- التعديل في REGEDIT في الــ HOME الخاص بالــ DEVELOPER وكذلك الخاص بالــ D.B
بإضافة NLS_CALENDAR=ARABIC_HIJRAH
أو عن طريق تنفيذ الأمر :
لتحويل التاريخ من ميلادي الى هجري :
SQL>ALTER SESSION SET NLS_CALENDAR = 'ARABIC HIJRAH' ;
اذا تم تنفيذ هذا الامر بنجاح فسوف تظهر لك هذه الرساله .Session altered
وللتاكد من صحه ذلك يتم تنفيذ جمله select التاليه قبل وبعد تحويل التاريخ .
SQL>SELECT TO_CHAR(SYSDATE,'DD/MM/YYYY') FROM DUAL;
ولتحويل التاريخ من هجري الى ميلادي :
SQL>ALTER SESSION SET NLS_CALENDAR = 'GREGORIAN' ;
اذا تم تنفيذ هذا الامر بنجاح فسوف تظهر لك هذه الرساله .Session altered

* عيوبها :
أن التقويم الهجري الخاص بأوراكل قيمة مثبته لكل السنوات كالتالي :
شهر محرم عدد الأيام 30
شهر صفر عدد الأيام 29
شهر ربيع الأول عدد الأيام 30
شهر ربيع الثاني عدد الأيام 29
.................. إلى آخره .
وهــــــــكــــــــذا

- عند عمل التغيير في الريجستري ، تم الذهاب إلى شاشة المشتريات كمثال للتطبيق وتم كتابة التاريخ 30-02-1430 في
حقل تاريخ الفاتورة ، ولكن لم يقبل وقام النظام بتعديل التاريخ أوتوماتيكيا إلى 01-03-1430 هـ مع العلم أن شهر صفر
بناءا على تقويم ام القرى نهايته 30-02-1430هـ .
بمعنى شركة أوراكل عندها شهر صفر 29 يوم وإذا أدخلنا 30 صفر سيتم تحويله مباشرة إلى 1 ربيع الأول .

- بعد تخزين الحقل التاريخ بالهجري في الشاشة يتم تخزينه في قاعدة البيانات على أنه ميلادي .

-----------------------------------------------------------------------------------------------------------------
ثالثاً :
استخدام دوال أوراكل للتحويل التاريخ الميلادي إلى التاريخ الهجري كالتالي :
SELECT TO_CHAR(:rec_date+1,'DD-MM-YYYY','NLS_CALENDAR = ''ENGLISH HIJRAH''')
FROM DUAL ;
OR
SELECT TO_CHAR(:rec_date+1,'DD-MM-YYYY','NLS_CALENDAR = ''ARABIC HIJRAH''')
FROM DUAL ;

عند تنفيذ أمر الاستعلام السابق فإن نتيجة تحويل التاريخ الميلادي التالي 25-02-2009 ستصبح 01-03-1430 ولكن في تقوم أم القرى التاريخ المقابل للميلادي الصحيح هو 30-02-1430

إذن هناك انحراف (الاختلاف) بين تقويم أوراكل الهجري وبين دورة القمر الفعلية والتي نستخدمها لتحديد عدد أيام الشهر الهجري ، وهذا يعني وجود يوم فارق بين التقويم الهجري الفعلي وبين تقويم أوراكل .


ونرجو منكم إفادتنا في حل هذه المشكلة .

وجزاكم الله خير

رابط هذا التعليق
شارك

السلام عليكم
انظر هذا الحل قد يفيدك بحسب كلام بعض الإخوان انه يعمل 100% ويحل مشكلة التاريخ الهجري ..
مشاركة للأخ Amateur
http://www.araboug.org/ib/index.php?showtopic=17914

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية