moh_bin بتاريخ: 22 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 22 أكتوبر 2009 السلام عليكم ورحمه الله وبركاته شرح المشكلة : أنه لا يمكن إدخال التاريخ الهجري 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 ;ORSELECT TO_CHAR(:rec_date+1,'DD-MM-YYYY','NLS_CALENDAR = ''ARABIC HIJRAH''') FROM DUAL ;عند تنفيذ أمر الاستعلام السابق فإن نتيجة تحويل التاريخ الميلادي التالي 25-02-2009 ستصبح 01-03-1430 ولكن في تقوم أم القرى التاريخ المقابل للميلادي الصحيح هو 30-02-1430 إذن هناك انحراف (الاختلاف) بين تقويم أوراكل الهجري وبين دورة القمر الفعلية والتي نستخدمها لتحديد عدد أيام الشهر الهجري ، وهذا يعني وجود يوم فارق بين التقويم الهجري الفعلي وبين تقويم أوراكل . ونرجو منكم إفادتنا في حل هذه المشكلة .وجزاكم الله خير اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
user1396 بتاريخ: 22 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 22 أكتوبر 2009 السلام عليكمانظر هذا الحل قد يفيدك بحسب كلام بعض الإخوان انه يعمل 100% ويحل مشكلة التاريخ الهجري .. مشاركة للأخ Amateur http://www.araboug.org/ib/index.php?showtopic=17914 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Ahmad.Hasan بتاريخ: 22 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 22 أكتوبر 2009 السلام عليكمكلام اخي USER صحيح ... حيث يجيب استخدام فنكشن لتغطية هذه العيوب... اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.