الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

بدأه moh_bin في 22 أكتوبر 2009 · 0 رد · 1,645 مشاهدة · في قسم لغة الاستفسارات SQL
مشاركة: واتساب X فيسبوك تيليجرام
#1

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

شرح المشكلة :

أنه لا يمكن إدخال التاريخ الهجري 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

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

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

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

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…