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

مشكلة في عدد سنوات الخدمة

بدأه أبو عبير 2005 في 25 أغسطس 2011 · 34 رد · 3,839 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#26

أخى الكريم و بعد اذن الاخوة

للحصول على حسابات صحيحة

احذف هذا السطر من الكود

Calendar = vbCalHijri

و لكن

نصيحتى لك عند استخدام التاريخ الهجرى

الافضل هو استخدام حقل نصى لتسجيل التاريخ

حيث أنك ستواجه مشاكل فى التعامل مع التاريخ

و أشهر المشاكل التى قد تواجهك تاريخ 30/2

لانه كما تعرف غير موجود فى الميلادى

1

مدونتى:-

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

متغيب حاليا لانشغالى الشديد

#27
أبو عبير 2005 كتب:

أخي الكريم بارك الله فيك وفي ذريتك

أنا آسف أتعبتك معي وغلبتك .

لكن أخي شوف الصورة وشوف ناتج التاريخ التالي

25/10/1410 و تاريخ 26/10/1430

المنطق يقول إن الفرق بينهما هو 20 سنة و 0 شهر

لكن شوف الصورة المرفقة يبن لي أن الفرق بينهما هو 20 سنة و 7 شهور و 14 يوم .

كيف تم زيادة 7 شهور و 14 يوم . ( هنا تكمن المشكلة ) .

تقبل فائق تقديري واحترامي .

الله لا يحرمك الأجر .

اعتذر أنا لك لأني لم أنتبه لهذه المشكلة blush.gif

Abo_Yossof كتب:

أخى الكريم و بعد اذن الاخوة

للحصول على حسابات صحيحة

احذف هذا السطر من الكود

Calendar = vbCalHijri

و لكن

نصيحتى لك عند استخدام التاريخ الهجرى

الافضل هو استخدام حقل نصى لتسجيل التاريخ

حيث أنك ستواجه مشاكل فى التعامل مع التاريخ

و أشهر المشاكل التى قد تواجهك تاريخ 30/2

لانه كما تعرف غير موجود فى الميلادى

اعتذر يا أخوان وبعد إذنك يا أستاذنا الفاضل ابو يوسف ، افضل طريقة هي عدم حذف ذلك السطر حتى يقرأ التاريخ المدخل هجري كما هو. 001.gif

وقد عملت تعديل بسيط والشكر الجزيل لأبو يوسف استاذنا العظيم فقد ذكرني بهذه النقطة 044.gif فعلا يجب تحويل التاريخ المدخل إلى في الخانتين إلى نص.015.gif

وهذا التعديل المرفق وشرحه كالآتي: 044.gif

1. يتم عمل مربعي نص وتنسيقها نص لادخال التاريخين الهجري في كل منهما وستلاحظ ذلك في الجدول الذي يخزن فيه البيانات. happy.gif

2. في النموذج تكمن الخدعة 016.gif حيث يتم وضع الحقلين بنفس المواصفات السابقة مع وضع قناع الادخال المناسب thinking.gif ، وأنا استعملت القناع حيث يدخل التاريخ ابتداء من اليوم ثم الشهر ثم السنة. 006.gif

3. في الكود عملت تعديل بسيط لقراءة الحقلين بحيث يقرأ بالتاريخ الهجري بالكود الذي لم أحذفه ثم يحول النصين إلى تاريخين ويجري العملية الحسابية 044.gif ويعطي الناتج بدون مشاكل بإذن الله. 012.gif

وهكذا تكون مشكلة التاريخ قد تم تفاديها ومشكلة الهجري والميلادي قد تم تفاديها ومشكلة الخطأ الحسابي تم تقليلها إلى أدنى حد والحمد لله.wink.gif

53e35528a2.gif أستاذنا ومشرفنا أبو يوسف على التذكير وآسف إذ كانت وجهة نظري تختلف عن وجهة نظرك قليلا ولكن خطتى اعتمدت على هذا الكود. laugh.gif

الخدمة2.rar

تم تعديل هذه المشاركة بواسطة superhot3000 في 11 سبتمبر 2011 في 11:11

1
#28
أستاذنا ومشرفنا أبو يوسف على التذكير وآسف إذ كانت وجهة نظري تختلف عن وجهة نظرك قليلا ولكن خطتى اعتمدت على هذا الكود.

لا يوجد خلاف

هذا ما كنت أقصده بالضبط

الاختلاف الوحيد هو أن تصورى لا يحتاج الى التحويل الى تاريخ بحيث يتم التعامل مع النص كما هو

فيكون الجزء الاول من الكود بهذا الشكل

Dim Yr1, Mn1, Dy1 As Integer
Dim Xx, Yy As String
Xx = Me.[StDt]
Yy = Me.[TDt]

Yr1 = Mid(Yy, 5, 4) - Mid(Xx, 5, 4)
Mn1 = Val(Mid(Yy, 3, 2) - Mid(Xx, 3, 2))
Dy1 = Val(Mid(Yy, 1, 2) - Mid(Xx, 1, 2)) + 1

مدونتى:-

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

متغيب حاليا لانشغالى الشديد

#29

بارك الله فيك أخي الكريم وفي أهلك ومالك أنت والأخ أبو يوسف

ولكن هل بالإمكان أن أجعل مربع النص يقرأ بالشكل الصحيح 23/10/1410 في النموذج بحيث أننا نضع مربع نص تكون قيمته مساية لقيمة مربع

النص الذي أنت عملته وهو كما في مثالك ( StDt ) ولكن يقرأ بالشكل الصحيح .

أنا آسف أخي على كثرة استفساراتي

ولكن كان نفسي يطلع برنامجي منسق بمساعدتكم .

لكم مني أطيب تحية وتقدير .

#30

اعكس شكل فناع الادخال لمربع النص

مدونتى:-

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

متغيب حاليا لانشغالى الشديد

#31

بارك الله فيك أخي الغالي

لكن إذا عكسته يحسب عدد السنوات خطأ .

تقبل احترامي وتقديري .

#32

بالتأكيد ستحتاج الى تعديل الكود

مدونتى:-

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

متغيب حاليا لانشغالى الشديد

#33

أخي الكريم بارك الله فيك

ترى أخوك في الله عليمي مبتدء في الأكواد . على قد حالي ههههههههههه :haha:

أخي بارك الله فيك هل بإمكانك مساعدتي وتشرح لي وين بيكون التعديل .

الله لا يحرمك من الأجر لا إنت ولا أخي الغالي superhot3000

دمتم في حفظ الله .

#34

هذا هو الكود بعد التعديل

On Error Resume Next

Dim Yr1, Mn1, Dy1 As Integer
Dim Xx, Yy As String
Xx = Me.[StDt]
Yy = Me.[TDt]

'Yr1 = Mid(Yy, 5, 4) - Mid(Xx, 5, 4)
'Mn1 = Mid(Yy, 3, 2) - Mid(Xx, 3, 2)
'Dy1 = Mid(Yy, 1, 2) - Mid(Xx, 1, 2) + 1

Yr1 = Mid(Yy, 1, 4) - Mid(Xx, 1, 4)
Mn1 = Mid(Yy, 5, 2) - Mid(Xx, 5, 2)
Dy1 = Mid(Yy, 7, 2) - Mid(Xx, 7, 2) + 1

    If Dy1 > 29 Then
        Dy1 = Dy1 - 30
        Mn1 = Mn1 + 1
    ElseIf Dy1 < 0 Then
        Dy1 = Dy1 + 30
        Mn1 = Mn1 - 1
    End If

    If Mn1 > 11 Then
        Mn1 = Mn1 - 12
        Yr1 = Yr1 + 1
    ElseIf Mn1 < 0 Then
        Mn1 = Mn1 + 12
        Yr1 = Yr1 - 1
    End If

[Y1] = Yr1
[M1] = Mn1
[D1] = Dy1

اذا لم يكن مناسبا ضع مثال به التنسيق الذى تريده

1

مدونتى:-

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

متغيب حاليا لانشغالى الشديد

#35

بارك الله فيك وفي ذريتك وأصلح حالك .

ما قصرت أخي الغالي .

نعم هذا هو المطلوب .

تقبل تقديري واحترامي .

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

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

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

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

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