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

مشكلة في التاريخ

مغلق
بدأه ابوحمود في 4 سبتمبر 2001 · 3 رد · 528 مشاهدة · في مراجعة المواضيع
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الأخوة الكرام

واجهتني مشكلة غريبة أول مرة تحصل معي وهي أنني كنت مركب أوفس اكس بي في جهازي واحتجت لتركيب أوفس 2000 لتطبيق بعض الأمثلة فقمت بتركيب الـ 2000 مع التعريب و2002 موجود ومركب قبل ذلك فلخبط علي بعض الخطوط في بعض القواعد وليست هذه المشكلة فقد غيرت الخط وسار كل شي على مايرام ، المشكلة أنه عند حدوث خطأ في الكود يتحول التاريخ في القاعدة الى ميلادي في كلا الإصدارين 2000 و2002 كيف ؟ مثال إذا كان لدي مربع نص به تاريخ هجري وقد وضعت رسالة Msgbox تظهر التاريخ من هذا الحقل أجد بعد الخطأ تحول التاريخ إلى ميلادي مثال 1/1/1422 يتحول إلى 5/4/2000 في الرسالة فقط دون مربع النص فرجعت إلى بدء التشغيل في 2000 فوجدت الاختيار هجري ورجعت الى اعدادات دولية في 2002 فوجدت الاختيار هجري فقلت المشكلة أكيد بسبب تركيب 2000 فحذفته ولم تحل المشكلة فحذف 2002 واعدت تركيبه فلم تحل المشكلة فحذفته مره أخرى وركبت 2000 ونفس النتيجة ففرمت الجهاز كله وركبت 2000 ونفس النتيجة فركبت فوقه 2002 ولم يتغير شيئ ففرمت الجهاز مرة أخرى وركبت 2000 قبل تركيب أي برنامج ولم يتغير شيء .

للتأكد من هذه المشكلة اجعل في حدث النقر على زر الأمر التالي :

Msgbox Date()

ستجد التاريخ يظهر بالهجري إذا كان اختيارك لتاريخ القاعدة هجري ، أضف بعد السطر السابق أي حرف ليكون كالتالي :

Msgbox Date()

e

سيعطيك رسالة خطأ انقر Debug ثم أوقف الإجراء وأزل الحرف ثم شغل الإجراء مرة ثانية وانظر التاريخ .

المشكلة في هذا أنني عملت Recordest لعبارة استعلام والمعيار يستند على قيمه في النموذج ففي الاستعلام العبارة من أحسن ما يكون وعند فتحها بـ DAO تعطي نتيجة خاطئة ولأتاكد من ذلك قمت بجعل المعيار في استعلام تاريخ بين ## ونسخت العبارة وألصقتها في الوحدة النمطية للنموذج فتحول التاريخ الهجري السابق المكتوب بين ## إلى ميلادي وهذا الذي فسر عدم الحصول على أي سجلات عند تشغيل العبارة بـ DAO .

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

وآسف على الإطالة ولكن أحببت أن أوضح المشكلة بالتفصيل .

ولكم تحياتي

إضافة :

جربت الكود الذي ذكره أحدهم نسيت من هو :

Calendar = vbCalHijri

ووجدت أنه يعطي التاريخ صح في مثل هذا المثال :

Msgbox Forms![اسم النموذج]![مربع نص]

وأما الـ DAO فنفس المشكلة .

ووضعت :

Msgbox Calendar

قبل وبعد الخطأ فرأيتها متغيرة .

آخر تجربة عملتها قمت بوضع التاريخ الميلادي في عبارة SQL كمعيار لحقل تاريخ هجري فأعطاني النتيجة صح !!!

ماهو رأيكم هل السبب في 2000 علما أن تحميلي الأخير كان من نسخة أخرى .

ولكم تحياتي

#2

اقول ايوحمود الله يعينك الصراحه مالي بمثل ذي المشاكل

#3

ما فيه أحد يعطيني حل .

هل الموضوع له علاقة بتنشيط الأوفس اكس بي .

ولك تحياتي

#4

الأخوة

لقد اتضح لي أن سبب المشكلة ليس من الأوفس اكس بي أو الأوفس 2000 أو الوندوز أو جهازي بل هذا الشيء موجود في كلا الإصدارين 2000 و2002 وقد تأكد من ذلك حيث عملت الفكرة في ثلاثة أجهزة أخرى جهازين عليهما أوفس اكس بي وجهاز عليه 2000 فقط واتضح أن الأمر موجود في كلا الاصدارين وللفائدة وأخذ رأي أهل الخبرة فسأعرض الكود الذي ظهر بسببه الخطأ وحلول مؤقته له وقد تركت عبارات SQL كاملة لغرض معاينة العمل الذي قمت به :

ملاحظة جميع العبارات أمامها فاصلة علوية حتى لايشغلها أحد سويا.

'Dim db As Database

'Dim rst As Recordset

'Set db = CurrentDb

'Set rst = db.OpenRecordset("SELECT [جدول المحصلة الشهرية].[رقم الطالب], [جدول المحصلة الشهرية].التاريخ FROM [جدول المحصلة الشهرية] WHERE ((([جدول المحصلة الشهرية].التاريخ)=" & [Forms]![نموذج1]![تاريخ] & "));")

' السطر التالي يظهر فيه الخطأ لعدم وجود سجلات

rst.MoveLast

' السطر التالي يعطيني صفر إذا جعلت السطر السابق تعليق

'MsgBox rst.RecordCount

'db.Close

والأسطر التالية عبارة عن استخدام QueryDef كحل مؤقت بدلاً من Recordest في عدة طرق :

1- بواسطة استعلام موجود :

'Dim db As Database

'Dim qdf As QueryDef

'Set db = CurrentDb ' لجعل القاعدة الحالية هي القاعدة الافتراضية

'Set qdf = db.QueryDefs("اسم استعلام موجود في قاعدة البيانات")

'qdf.SQL = "SELECT [جدول المحصلة الشهرية].[رقم الطالب], [جدول المحصلة الشهرية].التاريخ FROM [جدول المحصلة الشهرية] WHERE ((([جدول المحصلة الشهرية].التاريخ)=[Forms]![نموذج1]![تاريخ] ))"

' السطر التالي يفتح الاستعلام في الشاشة وهو غير ضروري

'DoCmd.OpenQuery qdf.Name

'MsgBox DCount("[رقم الطالب]", "اسم الاستعلام السابق")

'qdf.Close

'db.Close

' لاحظ أن الاستعلام الذي تجعله في العبارة السابقة تتغير عبارته SQL ويتم حفظ العبارة الجديدة تلقائيافإذا كان الاستعلام لغرض آخر فلا تستعمله واستعمل بدلا عنه استعلام جديد فارغ .

2-إنشاء استعلام جديد في قاعدة البيانات الحالية :

'Dim db As Database

'Dim qdf As QueryDef

'Set db = CurrentDb ' لجعل القاعدة الحالية هي القاعدة الافتراضية

'Set qdf = db.CreateQueryDef("اسم الاستعلام", "SELECT [جدول المحصلة الشهرية].[رقم الطالب], [جدول المحصلة الشهرية].التاريخ FROM [جدول المحصلة الشهرية] WHERE ((([جدول المحصلة الشهرية].التاريخ)=[Forms]![نموذج1]![تاريخ] ))")

'DoCmd.OpenQuery qdf.Name ' فتح الاستعلام

'qdf.Close

'db.Close

'=========================

3-إنشاء استعلام في الذاكرة

' إذا وجد معيار لا يشتغل

Dim db As Database

Dim rst As Recordset

Dim qdf As QueryDef

Set db = CurrentDb

' لجعل القاعدة الحالية هي القاعدة الافتراضية

Set qdf = db.CreateQueryDef("", "SELECT [سندات القبض].التاريخ, Sum([سندات القبض].المبلغ) AS [مجموع المقبوضات] FROM [سندات القبض] GROUP BY [سندات القبض].التاريخ; ")

Set rst = qdf.OpenRecordset(dbOpenDynaset)

MsgBox rst.RecordCount

qdf.Close

rst.Close

db.Close

عبارة SQL في CreateQueryDef السابقة إذا استبدلت بالتالي تظهر رسالة معلمات قليلة جدا متوقع واحد ولم أجد لها حلاً :

Set qdf = db.CreateQueryDef("", "SELECT [سندات القبض].التاريخ, Sum([سندات القبض].المبلغ) AS [مجموع المقبوضات] FROM [سندات القبض] GROUP BY [سندات القبض].التاريخ HAVING ((([سندات القبض].التاريخ)=" & [Forms]![نموذج كشف الحركة الجديد]![التاريخ] & "));")

محاولات سابقة :

لقد عملت Recordst ثم جعلت له Filter للتاريخ فأعطى نتيجة صفر للسجلات كالتالي :

Set rst = db.OpenRecordset("SELECT [سندات القبض].التاريخ, Sum([سندات القبض].المبلغ) AS المبلغ FROM [سندات القبض] GROUP BY [سندات القبض].التاريخ;")

rst.Filter = "[سندات القبض].التاريخ=" & Forms![نموذج كشف الحركة الجديد]![التاريخ]

Set rst2 = rst.OpenRecordset(dbOpenDynaset) ' فتح لتطبيق الفلتر

MsgBox rst2![المبلغ]

بواسطة دالة Dsum كالتالي :

DSum("[المبلغ]", "سندات القبض", "[التاريخ]=" & [Forms]![نموذج كشف الحركة الجديد]![التاريخ])

آمل من الأخوة ممن لديهم خبرة في DAO المشاركة وتباد الآراء .

آسف على الاطالة ولكم تحياتي

هذا الموضوع مغلق.

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