منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
مشكلة غريبة في عرض التاريخ - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : مشكلة غريبة في عرض التاريخ (/showthread.php?tid=45833)



مشكلة غريبة في عرض التاريخ - assuhimi - 06-04-23

احبتي الكرام اسعد الله اوقاتكم بكل خير
لدي مشكلة غريبة وهي ان التاريخ يعرض للمرة الاولى فقط بشكل صحيح
وعند الفلترة في الداتاقريد من خلال كومبو بوكس يحصل خلل في عرض التاريخ
مع ان الكود نفسه ولم يتغير فيه شي ،، جهازي عربي على اعدادات السعودية
التقويم ام القرى

المرة الأولى يكون بهذا الشكل


 
وكما تلاحظون التاريخ صحيح وموافق لليوم المقابل له

بعد اختبار رقم اخر وفلترة البحث ينقص التاريخ يوم كما في الصورة التالية



ايضا وضعت زر تحديث ولكنه لايعطي نتائح صحيحة بعد الفلترة اما قبل الفلترة فهو يعطي نتائح صحيحة
ارجو منكم اخوتي مساعدتي في هذه المشكلة حيث اني مبتدى نوعا 
مرفق لكم مشروعي شاكر سلفا كل من تعاون معي..


RE: مشكلة غريبة في عرض التاريخ - عبدالله الدوسري - 06-04-23

هذة المشكلة واجهت الكثييييييير من المبرمجين

لأن الـ provider الخاص بقواعد أكسس OleDb لا يدعم إلا التقويم الميلادي , والمصيبة أنه حتى له اسلوب خاص في التعامل مع التاريخ بغض النظر عن التاريخ المعد في النظام، والطامة الأكبر أن مايكروسوفت لم تشرح طريقة عمل قواعد اكسس بشكل كامل في ما يخص الـ OleDb وكيف يتعامل مع التواريخ ( أحجية لا يعرفها أحد )


عند تنفيذ الإستعلام
SELECT * from gyabt
النتيجة طبيعية


لكن الغريب والذي يجعلك فعلاً ترفع حاجبيك إلى الأعلى من الدهشة الغموض الذي يحدث عند تنفيذ الإستعلام بهذا الشكل
SELECT * from gyabt where XXX=YYY
بغض النظر عن ماذا يأتي بعد الكلمة where المهم أنك إستخدمة الكلمة where
لا تعلم مالذي يحدث في التطبيق
تتغير إعدادت التقويم بشكل لا يمت بصلة لأي شي
لماذا لا تعلم
ما الذي تغير لا تعلم
المهم ان التطبيق بعد تنفيذ جملة إستعلام تحتوي على الكلمة where يحدث شيء غريب

جميع البيانات تأتي بشكل طبيعي ، إلا إذا حاولت التحويل بين التواريخ من ميلادي إلى هجري والعكس، الكلمة where لك بالمرصاد.


قبل إستخدام الكلمة where تحويل التاريخ صحيح
بعد الكلمة where النتيجة غير مضمونة إما ناقص أو زائد أو يساوي بعض المرات


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


RE: مشكلة غريبة في عرض التاريخ - assuhimi - 06-04-23

الف شكر على ردودكم اخوتي الخبراء ،، افهم من هذا انه لو تم تعديل قاعدة البيانات الى اصدار اقدم فلا مشكلة؟
ايضا لو تم الاستغناء عن الاكسس واستخدام قواعد sql او حتى صفحة اكسل هل ستختفي المشكلة ؟
شاكر للجميع وكتب الله اجركم


RE: مشكلة غريبة في عرض التاريخ - Taha Okla - 07-04-23

المشكلة تحدث لما تدخل تعديلات على جملة الاستعلام 
فلما تضع شرط التحديد تختل التعديلات وتعطيك التاريخ بحسب معادلة التحويل بين التاريخين ضمن السستم 
(ربما معادلة قديمة في آكسس لم تنتبه لها مايكروسوفت حتى الان)

لاحظ جملة الاستعلام  ("Select  * From gyabt")

لاحظ استخدام الـ (*)  وهنا الحل والمشكلة : 
هنا يتم التعويض بحسب ما طلبت من البرنامج أن يعطيك التاريخ بإعدادات المملكة السعودية بحسب محاكي الفيجول استديو
بينما لو عينت أسماء الحقول (الأعمدة) بعد (Select) أو (Where) ستحدث المشكلة لأنها ستترك أمر التعديل لمعادلة الأكسس القديمة

لما تكون بدون تحديد بيشتغل طبيعي(لما تستخدم *)، 
ولما تحدد عرض حقول محددة  أو بشرط حقل ما تحدث المشكلة.
--

لكن .. 


لكن يمكن تجاوز هذه المشكلة باستخدام لغة الاستعلام Linq  وكذلك ضمن الـ  Limpda

يعني بتخلي جملة الاستعلام ثابتة والتي هي ("Select  * From gyabt")

 
ولكن البحث سيتم في الجدول الناتج والذي هو (dt)
بالتالي يصبح الكود :
كود :
Dim ci As CultureInfo
       ci = New CultureInfo("ar-sa")
       CultureInfo.DefaultThreadCurrentCulture = ci

       Dim conn As New OleDbConnection("provider=microsoft.ace.oledb.12.0; data source=FprintDB.accdb")

       Dim da As New OleDbDataAdapter("Select  * From gyabt", conn)

       Dim dt As New DataTable

       da.Fill(dt)

       Dim TA = From dd In dt.AsEnumerable()
                Where dd(0) = ComboBox1.SelectedItem

       DataGridView1.DataSource = TA.CopyToDataTable()
       DataGridView1.Columns(1).DefaultCellStyle.Format = ("yyyy/MM/dd")



RE: مشكلة غريبة في عرض التاريخ - assuhimi - 10-04-23

(07-04-23, 05:03 PM)Taha Okla كتب : لكن يمكن تجاوز هذه المشكلة باستخدام لغة الاستعلام Linq  وكذلك ضمن الـ  Limpda

يعني بتخلي جملة الاستعلام ثابتة والتي هي ("Select  * From gyabt")

 
ولكن البحث سيتم في الجدول الناتج والذي هو (dt)
بالتالي يصبح الكود :
كود :
Dim ci As CultureInfo
       ci = New CultureInfo("ar-sa")
       CultureInfo.DefaultThreadCurrentCulture = ci

       Dim conn As New OleDbConnection("provider=microsoft.ace.oledb.12.0; data source=FprintDB.accdb")

       Dim da As New OleDbDataAdapter("Select  * From gyabt", conn)

       Dim dt As New DataTable

       da.Fill(dt)

       Dim TA = From dd In dt.AsEnumerable()
                Where dd(0) = ComboBox1.SelectedItem

       DataGridView1.DataSource = TA.CopyToDataTable()
       DataGridView1.Columns(1).DefaultCellStyle.Format = ("yyyy/MM/dd")


شاكر لك اخي الكريم على الافادة والشكر موصول للاخوة اللي ردوا علي موضوعي اعلاه..
المشكلة ماعندي خلفية عن Linq حاولت اجد مواضيع او دورات تتكلم عنها وللاسف كلها على لغة C# وانا مااعرف الا للفيجول
حاليا رجعت لقاعدة بيانات mdb مع اني ما ارتاح لها بمكن كسر حمايتها بسهولة وانا احتاج اقفل قاعدة البيانات بكلمة مرور بعد الانتهاء من المشروع


RE: مشكلة غريبة في عرض التاريخ - Taha Okla - 10-04-23

أوامر الـ Linq هي نفسها التي تعمل في السي شارب تعمل في الفيجول بيزك دوت نت بدون تغيير 
نفس الكود تقريبا ويوجد بعض الفروقات وهي : 
1 - نهاية كل كود فاصلة منقوطة في السي شارب.
2 - للتعريف عن متغير في السي شارب من أجل تخزين قيمة جملة الـ Linq نستخدم var
    في الفيجول بيزك نستخدم Dim
3 - أوامر الـ Limbda في السي شارب تعين بـ (r1 => r1)  بينما في الفيجول بيزك بـ (Function(r1) r1).
وفروقات آخر بسيطة ..

إن كنت تعلمت من قبل البرمجة كائنية التوجه (oop) فأدخل وتعلم اللـ Linq من أي دورة سي شارب وطبقها ضمن الفيجول بيزك ببساطة وستعرف كل شيء عنها خلال يومين وتتقنها عن آخرها.


وأي شيء قد يشكل عليك بعدها : أدخل على هذا الموقع وأطرح سؤالك وستجد الكثير من يفيدك بما تريد وأكثر بإذن الله.


RE: مشكلة غريبة في عرض التاريخ -  - 11-04-23

(06-04-23, 06:02 AM)assuhimi كتب : احبتي الكرام اسعد الله اوقاتكم بكل خير
لدي مشكلة غريبة وهي ان التاريخ يعرض للمرة الاولى فقط بشكل صحيح
وعند الفلترة في الداتاقريد من خلال كومبو بوكس يحصل خلل في عرض التاريخ
مع ان الكود نفسه ولم يتغير فيه شي ،، جهازي عربي على اعدادات السعودية
التقويم ام القرى

المرة الأولى يكون بهذا الشكل


 
وكما تلاحظون التاريخ صحيح وموافق لليوم المقابل له

بعد اختبار رقم اخر وفلترة البحث ينقص التاريخ يوم كما في الصورة التالية



ايضا وضعت زر تحديث ولكنه لايعطي نتائح صحيحة بعد الفلترة اما قبل الفلترة فهو يعطي نتائح صحيحة
ارجو منكم اخوتي مساعدتي في هذه المشكلة حيث اني مبتدى نوعا 
مرفق لكم مشروعي شاكر سلفا كل من تعاون معي..

(06-04-23, 01:51 PM)assuhimi كتب : الف شكر على ردودكم اخوتي الخبراء ،، افهم من هذا انه لو تم تعديل قاعدة البيانات الى اصدار اقدم فلا مشكلة؟
ايضا لو تم الاستغناء عن الاكسس واستخدام قواعد sql او حتى صفحة اكسل هل ستختفي المشكلة ؟
شاكر للجميع وكتب الله اجركم

استخدام SQLServer ليس فيه هذه المشكلة وهو أفضل بكثير بالإضافة لمسألة الأمان العالية


RE: مشكلة غريبة في عرض التاريخ - أبووسم - 11-04-23

جرب تعديل نوع البيانات في قاعدة البيانات من تاريخ إلى نص أو (نص مختصر)

و في الفورم ادخل التاريخ عن طريق اداة DateTimePicker

و بإذن الله راح تضبط معك