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

العلاقة بين حقلين تاريخ ورقم

مغلق
بدأه AZIZ1389 في 14 سبتمبر 2003 · 40 رد · 2,198 مشاهدة · في مراجعة المواضيع
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

اجمل التحيات والشكر الكثير للمساهمين في انجاح هذا المنتدي الكبير

الاخوة اعضاء المنتدي :

اذا كان لدي جدول رئيس اسمه ( W ) ومن ضمن حقولة تاريخ الدخول اسمة (Z )

وجدول اخر مرتبط بالجدول الاول برقم المشارك اسمه ( MM) وبه حقل لعدد المشاركات

وفي نظام المشاركات يحق لكل مشارك ( 5 ) مشاركات لكل سنة من تاريخ دخولة ( Z )

لدي نموذج اسمة ( N ) لحقول الجدول الثاني ( MM) لتسجيل المشاركات فية

مدة المشاركة و تاريخها ونهايتها . وهذا المشاركة عن السنة كذا

المطلوب :

اريد ان اعمل حقل في الجدول الثاني ( MM) اسمه (MD) واجعله ضمن النموذج N

يقوم هذا الحقل باضافة ( 5 ) في بداية كل سنة ابتداءً من تاريخ الدخول ( Z ) بحث اذا كان دخول شخص في عام 1420 مثلا يصبح له في الحقل (25 )

وفي حال حصل على مشاركة في سنة 1421 يتم الحسم من ( MD) ليصبح (20 ) واذا عاد وحصل على مشاركة اخر في السنة القادمه وشارك بــ( 3 ) يتم الحسم من الحقل ( MD)

الاخلاصة حقل يتم اضافة العدد المطلوب مع بداية كل عام ويتم الاحسم منه حال الاخذ منه

اي ( كرصيد )

ارجوا ان وفقت في الشرح

وارجوا ان لا اكون قد اثقلت عليكم حفظكم الله

اللهم احفظ ووفق جميع المشاركين في هذا المنتدي وجميع المسلمين

#2

أخي الكريم

إقتباس

اقتباس
المطلوب :

اريد ان اعمل حقل في الجدول الثاني ( MM) اسمه (MD) واجعله ضمن النموذج N

يقوم هذا الحقل باضافة ( 5 ) في بداية كل سنة ابتداءً من تاريخ الدخول ( Z ) بحث اذا كان دخول شخص في عام 1420 مثلا يصبح له في الحقل (25 )

أرجو شرح هذه العبارة ( يقوم هذا الحقل باضافة ( 5 ) في بداية كل سنة ابتداءً من تاريخ الدخول ( Z ) بحيث اذا كان دخول شخص في عام 1420 مثلا يصبح له في الحقل (25 ) )

كيف يصبح الحقل قيمته ( 25 ) ؟؟؟؟ بمعنى: على أي أساس ؟؟؟

أنا أرى أنك قمت بمضاعفة الرقم ( 5 ) مضروبا في نفسه حتى أصبح قيمته ( 25 )

ثم في كل سنة تخصم منه ( 5 ) وهكذا ,,,,,,,,,,

شاكر

المسلم من سلم الناس من لسانه ويده

#4

السلام عليكم

ابعث اجمل باقات الورد للاخوة الكرام حفظكم الله

ارجوا ان لا اكون ثقيل الشرح

لنفرض ان شخصاً اسمه احمد دخل ضمن البرنامج كاعضو وتم التسجيل في بياناته تاريخ دخول 1/1/1424 مثلاً

هذا الشخص في نظام المشاركات يصبح له حق 5 مشاركات عن كل سنة اي 5 عن السنة الاولى من دخوله

واذا حالت السنة الثانية وهو ضمن الاعضاء المشاركين في البرنامج يتم التسجيل له 5 مشاركات وهكذا كل سنة نمنحه 5 مشاركات تكون مدونه له كحق في رصيدة

في حال حصل على 5 مشاركات كل سنة يتم الحسم من رصيد مشاركاته المتوفر

او حصل على 3 مشاركات يتم الحسم منها ايضا وهكذا

وايضا في بداية كل عام يتم اضافة 5 في الحقل المقصود

===============================

اما عن ( 25 ) كيف اصبحت هكذا

نعم لان احمد هذا دخل البرنامج في عام 1420 ولم يحصل على اي مشاركة خلال السنوات الماضية اي يصبح مجموع ما له 5 سنوات * 5 = 25

واذا حصل على اي مشاركة يتم الحسم من رصيدة

مع اضافة 5 لكل عام جديد

افضل التحيات لكم

#5

بسم الله الرحمن الرحيم

Dim x as byte

X= datediff("yyyy",date1,date)

X=x*5

Txt1=x

#6

أرجو المعذرة لم أستطع تفعيل إستخدام نافذة الكود علماً أنني حاولت مراراً

#7

أخي الكريم ،،، لقد عملت مثالا ، بما طلبته ، وقد عمل معي بالشكل المطلوب

سوف أمشي معك خطوة خطوة كي أشرح لك كيفية علم هذا المثال

أولا : الجدوال

تحتاج إلى عمل ثلاثة جداول :

الجدول الاول : وهو جدول السنة المقبلة

اسم الجدول ( y ) ويوجد به حقل واحد فقط وهو حقل رقمي واسمه ( y ) .

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

لكل المشاركين ، سوف يأتي شرح كيفية عمل ذلك .

الجدول الثاني : وهو جدول معلومات المشاركين وكما أسلفت أنت أن إسمه ( w )

حقوله هي :

رقم المشارك : وهو حقل رقمي ، ومفتاح

الاسم : وهو حقل نصي

تاريخ الدخول : وهو حقل تاريخ/وقت

الرصيد : وهو حقل رقمي

بإمكانك إضافة حقول غير هذه الحقول ،،،، ما هذا إلا مثال فقط كي أوصلك للطريقة التي

إتبعتها كي تصل لما تريد .

الجدول الثالث : وهو جدول إضافة المشاركات للمشتركين حتى يتم حسمها من الرصيد

من الجدول الاول

حقوله هي :

رقم المشارك : وهو حقل رقمي

تاريخ المشاركة : وهو حقل تاريخ / وقت

بعد أن تنتهي من عمل الجداول كما شرحت لك سوف أشرح لك كيفية عمل النماذج ،،

أما عن نموذج الجدول الاول فهو سهل جدا لأنه لا يحتوي على أي كودات فقط أكتب في

هذا الحقل السنة المقبلة ( 1425 ) .

أما عن نموذج الجدول الثاني ، ونموذج الجدول الثالث فسوف أشرح لك كيفية عملهما

إن شاء الله تعالى بعد أن تنتهي من ما شرحته لك ,,,,,

في إنتظار الرد

شاكر

المسلم من سلم الناس من لسانه ويده

#8

السلام عليكم

الف تحية

لقد عمت ما ذكرت

اما عن اسم الحقل بالنموذج الاول فقمت بادراج الحقل من خلال قائمة الجدول في النموذج والكن ان اضع ( 1425 ) افي الحقل نفسة الذي في النموذج ؟

ام في خصائصة ؟

والسلام

#9

لا يا أخي ،،، تخزن هذه القيمة ( 1425 ) في الجدول ( y ) عن طريق النموذج ، أو عن طريق الجدول مباشرة ،،، حيث أنني سوف أعتمد عليها في تحديث أرصدة المشاركين في الجدول الثاني ,,,,

عزيزي / عزيز ،،،،،،،، تأكد من أسماء الحقول التي ذكرتها لك وأسماء الجداول بشكل صحيح ،، كي يعمل لك المثال بالشكل الصحيح .........

أخي الكريم

إليك الآن طريقة عمل نموذج معلومات المشاركين

نموذح معلومات المشاركين: وليكن اسمه ( f1 ) مثلا عند كتابتك رقم المشارك ، واسمه ، وتاريخ الدخول ، يبقى حقل الرصيد

ضع هذا الكود في حقل ( تاريخ الدخول ) في حدث بعد التحديث :

Dim sh As Byte
If Me![الرصيد] = 0 Then
sh = DateDiff("yyyy", [تاريخ الدخول], Date) + 1
sh = sh * 5
Me![الرصيد] = sh
If sh = 0 Then
Me![الرصيد] = 5
End If
End If

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

سوف يكون الرصيد ( 5 ) مشاركات .

في حال بدء سنة جديدة أي نحن الآن في سنة ( 1424 ) عندما تأتي السنة الجديدة ( 1425 ) ، وكما أشرت لك من السابق في جدول السنة المقبلة وقلت لك أكتب في هذا الحقل ( 1425 ) هنا تساوت السنة الحالية مع السنة المدخلة في الجدول ( y ) المفروض هنا سوف يتم تحديث جميع أرصدة المشاركين في الجدول الثاني ( w ) وسيكون بوضع هذا الكود في النموذج ( f1 ) في حدث ( عند الفتح ) للنموذج

Dim x, d, i, n, f
x = Year(Date)
d = DLookup("[y]", "y")
n = DCount("[رقم المشارك]", "w")
DoCmd.GoToRecord , , acFirst
If x = d Then
For i = 1 To n
[الرصيد] = [الرصيد] + 5
DoCmd.GoToRecord , , acNext
Next i
f = d + 1
DoCmd.RunSQL "UPDATE y SET y.y = " & f & ";"
End If

هذا الكود سوف يبدأ بالمشاركين بدأ من المشارك الاول حتى ينتهي بالمشارك الاخير ويقوم بإضافة ( 5 ) على الرصيد السابق للمشاركين جميعا ، ويقوم بعد ذلك بتحديث السنة المقبلة في جدول ( y ) إلى السنة القادمة ,,,,

في إنتظار النتيجة

شاكر

المسلم من سلم الناس من لسانه ويده

#10

السلام عليكم

في البدء تحية طيبة وكثيرا من الشكر

بنظرة الاولى لشرحك تخوفت باني لن استطيع تطبيق ما ذكرت مما سوف يضعي في حرج

نعم لقد قمت بما ذكرت تماماً ولكن ............. ‍

1- هل سيبقى الحقل Y مكتوباً فية 1425 على طول وهل لى علاقة بالتعديل فية او الادخال علية ؟

2 - وكيف سيتم اضافة سنة جديدة ثم اضافة ( 5 )

3- وكيف سيتم الحسم من الرصيد في كل مرة يتم اخذ مشاركة علماً بانك لم تذكر لى اي شي عن نموذج اخد المشاركات الذي من ضمن حقولة تاريخ اخذ المشاركة

علما ايضاً باني اريد الفرز بين مشاركة رسمية او مشاركة استثنائية والمطلوب فقط الحسم من المشاركات الرسمية

حيث يوجد لدي في نموذج المشاركات انوع المشاركة يتم اختيارة من حقل اختيار

رسمية/ استثنائية

افضل التحيات للجميع وتحية افضل للاخ شاكر

#11

السلام عليكم

في البدء تحية طيبة وكثيرا من الشكر

بانظرة الاولى لشرحك تخوفت باني لن استطيع تطبيق ما ذكرت مما سوف يضعني في حرج

نعم لقد قمت بما ذكرت تماماً ولكن ............. ‍

1- هل سيبقى الحقل Y مكتوباً فية 1425 على طول وهل لى علاقة بالتعديل فية او الادخال علية ؟

2 - وكيف سيتم اضافة سنة جديدة ثم اضافة ( 5 )

3- وكيف سيتم الحسم من الرصيد في كل مرة يتم اخذ مشاركة علماً بانك لم تذكر لى اي شي عن نموذج اخد المشاركات الذي من ضمن حقولة تاريخ اخذ المشاركة

علما ايضاً باني اريد الفرز بين مشاركة رسمية او مشاركة استثنائية والمطلوب فقط الحسم من المشاركات الرسمية

حيث يوجد لدي في نموذج المشاركات انوع المشاركة يتم اختيارة من حقل اختيار

رسمية/ استثنائية

افضل التحيات للجميع وتحية افضل للاخ شاكر

#12

أخي الكريم ،،، بالنسبة للحقل ( y ) سوف يتحدث تلقائيا عند دخول السنة الجديدة ليس لك علاقة في التعديل فيه ، في حال أنك تستخدم التاريخ الهجري ضع فيه السنة القادمة ( 1425 ) ، وفي حال أنك تستخدم حقل ميلادي ضع فيه السنة القادمة ( 2004 )

أولا : قل لي هل عمل معك النموذج بشكل سليم ؟؟؟

دعنا نقوم بتجربة على هذا النموذج :

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

رقم المشارك : 1

الاسم : عزيز

تاريخ الدخول : 25/1/1420

الآن في حقل الرصيد : سوف يقوم الحدث الذي تم وضعه في حقل ( تاريخ الدخول )

في حدث بعد التحديث ، بتعبئة حقل ( الرصيد ) تلقائيا بالعدد ( 25 ) وهو كما طلبت

هل حدث ذلك فعلا ؟؟؟؟

بالنسبة لاضافة سنة جديدة !!!! لاتكون إضافة يا أخي بل يكون تحديث السنة في جدول

( y ) إلى السنة المقبلة وكي نختبر أيضا النموذج

غير ما كتبته في الحقل ( y ) من ( 1425 ) إلى ( 1424 )

ثم قم بتشغيل النموذج ، حيث وضعت فيه حدث عند الفتح للنموذج كود ، هذا الكود

يختبر السنة المدخلة في جدول السنة المقبلة ( y ) ، إذا تساوى مع السنة الحالية

يقوم تلقائيا بإضافة ( 5 ) مشاركات لكل المشاركين دفعة واحدة ويحدث أرصدتهم

مثلا إذا كان رصيد المشارك : 1 وهو عزيز رصيده ( 25 ) سوف يتحدث تلقائيا إلى ( 30 )

ومعه باقي المشاركين في حال وجود عدة مشاركين ، وفي نفس الوقت سوف تتحدث

السنة المقبلة إلى ( 1425 ) ،،، وهذا الاختلاف سوف يعطل عمل الكود الموضوع في

حدث عند الفتح للنموذج ، لأنه لا يعمل إلا في حال تساوي السنة الحالية مع السنة

المدخلة في الجدول ( y ) ، إلى أن تأتي السنة المقبلة ( 1425 ) سوف ينشط ويعمل

أيضا إضافة ( 5 ) مشاركات لكل المشاركين ، ويحدث أرصدتهم ,,,

وصلت الفكرة أم لا ؟؟؟؟

هل حدث ذلك فعلا بعد تطبيق ما ذكرته لك أم لا ؟؟؟؟

أخي بالنسبة للحسم ، لم أتطرق إليه حتى الآن ، سوف يأتي شرحه ، فقط أخبرني أولا عند النموذج هذا هل عمل معك كما هو مطلوب أم لا ؟؟؟

هذا أهم شيء أما الحسم فهو في غاية البساطة ،،، أي لا يوجد فيه أي تعقيدات أو كودات يجب شرحها

في إنتظار الرد ،،، لا تتخوف من طول الشرح ،،، فقط إقرأه بتمعن وسوف تتمكن من الوصول إلى ما تريد إن شاء الله تعالى !!!!!!!

شاكر

المسلم من سلم الناس من لسانه ويده

#13

السلام عليكم

اخي شاكر الف تحية :

بالنسبة للنماذج في تعمل كما شرحت بالفعل

وقد قمت بعدت ادخالات مثل ماذكرت وهي تعمل بالشكل المطلوب

اقتياس

وهذا الاختلاف سوف يعطل عمل الكود الموضوع في

حدث عند الفتح للنموذج ، لأنه لا يعمل إلا في حال تساوي السنة الحالية مع السنة

المدخلة في الجدول ( y ) ، إلى أن تأتي السنة المقبلة ( 1425 ) سوف ينشط ويعمل

أيضا إضافة ( 5 ) مشاركات لكل المشاركين ، ويحدث أرصدتهم ,,,

لم اقم بتغيير 1425 بسبب العبارة التالية كي لا يتعطل العمل او تشرح اكثر في هذه العبارة

اخي شاكر :

انا في انتظار طريقة الحسم ...... ولكن

في حال تم ادخال تاريخ عن طريق الخطا ويريد المستخدم تعديل تاريخ الدخول كيف يتم تعديل الرصيد علما باني ادخلت خطاً عمدا ثم عدلت التاريخ في نفس الوقت ولم يتعدل الرصيد ....

مع اجمل التحيات والشكر الجزيل

#14

مرحبا أخي الكريم

لقد أردتك أن تغير التاريخ إلى ( 1424 ) لتجربة الكود الموضوع في النموذج عند الفتح هل يعمل بالشكل الصحيح أم لا ،،، أنا جربته في المثال وقد عمل معي تماما ,,,

قم بتغيير التاريخ إلى ( 1424 ) حتى تتأكد من إضافة ( 5 ) مشاركات لكل مشارك من المشاركين الموجودين ,,, وفي نفس الوقت سوف يحدث لك السنة إلى ( 1425 )

للتجربة فقط ،،،، لا تخف من التجربة ،،،، كي يطمئن قلبك ,,,,

في حال تم ادخال تاريخ عن طريق الخطا ويريد المستخدم تعديل تاريخ الدخول

قم بوضع هذا الكود بدلا من الكود السابق في تاريخ الدخول في حدث بعد التحديث

Dim sh As Byte
Me![الرصيد] = 0
If Me![الرصيد] = 0 Then
sh = DateDiff("yyyy", [تاريخ الدخول], Date) + 1
sh = sh * 5
Me![الرصيد] = sh
If sh = 0 Then
Me![الرصيد] = 5
End If
End If

أما عند طريقة الحسم ، سوف أشرحها لك في أقرب فرصة إن شاء الله

شاكر

المسلم من سلم الناس من لسانه ويده

#15

السلام عليكم

الاخ شاكر اكرمك الله بتوفيقه :

لقد قمت بما ذكرت ولكن................

1- عندما قمت بتعديل السنة الى 1424 في جدول y قام النموذج بتنفيذ ماذكرت بالفعل بالزيادة لكل مشارك في السنة الجديدة .. .

2- كانت تظهر لي رسالة عند فتح النموذج من الاكسس ( انت على وشك تحديث صفوف ...... ) نعم / لا اختار نعم

3 - بالعودة للجدول y لا حظت بان الحقل السنة قد عاد كما هو 1425 ثم قمت باعادته مرة اخرى الى 1424 وثم فتحت النموذج وايضا تظهر لى الرسالة من الاكسس مرة اخر ثم ( نعم ) ولاحظت بان الرصيد للمشاركين قد زاد مرة اخرى عندما قمت بتعديل السنة في الجدول y وايضا مرة اخر رجعت للجدول ورايت السنة قد عادت 1425 وهكذا ....؟

4- اما في مايخص الكود الجديد للسماح بتعديل في حقل التاريخ كي يتم التعديل التلقائي في الرصيد فهو يعمل بشكل جيد

5- من خلال الدخول لعدت مرات في حقل الدخول اصبحت بحاجة لكود لا يسمح فية للمستخدم بادخال تاريخ اكبر من السنة الحالية مع رسالة توضح ذلك للمستخدم ؟

المزيد من الشكر لك يا شاكر

انت من قوما ان بنوا احسنوا البنا

وان وعدو زاد في العهد والوفاء

#16

سوف نتأخر على شرح نموذج الحسم حتى ننتهي من جميع العقبات والملاحظات على هذا النموذج ( تحمل يا أخي )

اقتباس

اقتباس
2- كانت تظهر لي رسالة عند فتح النموذج من الاكسس ( انت على وشك تحديث صفوف ...... ) نعم / لا اختار نعم

لحل هذه المشكلة قم بتغيير الكود الذي تم وضعه في النموذج في حدث ( عند الفتح ) إلى هذا الكود :

Dim x, d, i, n, f
x = Year(Date)
d = DLookup("[y]", "y")
n = DCount("[رقم المشارك]", "w")
DoCmd.GoToRecord , , acFirst
If x = d Then
For i = 1 To n
[الرصيد] = [الرصيد] + 5
DoCmd.GoToRecord , , acNext
Next i
f = d + 1
DoCmd.SetWarnings False
DoCmd.RunSQL "UPDATE y SET y.y = " & f & ";"
DoCmd.SetWarnings True
DoCmd.GoToRecord , , acNewRec
End If

اقتباس

اقتباس
3 - بالعودة للجدول y لا حظت بان الحقل السنة قد عاد كما هو 1425 ثم قمت باعادته مرة اخرى الى 1424 وثم فتحت النموذج وايضا تظهر لى الرسالة من الاكسس مرة اخر ثم ( نعم ) ولاحظت بان الرصيد للمشاركين قد زاد مرة اخرى عندما قمت بتعديل السنة في الجدول y وايضا مرة اخر رجعت للجدول ورايت السنة قد عادت 1425 وهكذا ....؟

طبيعي يا أخي سوف يحدث ذلك ،،،، أي أن المثال قد طبقته تمام التمام ،،، سوف أشرح لك مرة أخرى ،،، قلت لك سابقا أنه في حال تساوي السنة الحالية مع السنة المدخلة في جدول ( y ) سوف ينشط الكود الذي موجود في النموذج في حدث ( عند الفتح ) وهو إضافة ( 5 ) مشاركات لكل مشارك من المشاركين ,,,, ثم يحدث السنة في جدول ( y ) إلى السنة القادمة ، أي إذا كانت ( 1424 ) سوف يحدثها إلى ( 1425 ) حتى لا يضيف ( 5 ) مشاركات كل مرة تفتح فيها هذا النموذج فقط عندما تتساوى السنة الحالية مع السنة في الجدول ( y ) ،،،، عندما تأتي سنة ( 1425 ) سوف يقوم تلقائيا بإضافة ( 5 ) مشاركات مرة أخرى إلى كل مشارك من المشاركين ،،، وبعدها يحدث الحقل ( Y ) إلى السنة المقبلة أيضا ( 1426 ) ،،،،، وهكــــذا ،،،،،، هل وصلت الفكرة ؟؟؟؟؟

اقتباس

اقتباس
5- من خلال الدخول لعدت مرات في حقل الدخول اصبحت بحاجة لكود لا يسمح فية للمستخدم بادخال تاريخ اكبر من السنة الحالية مع رسالة توضح ذلك للمستخدم ؟

تفضل يا أخي هذا هو الكود ،،،، قم بتغيير الكود المدخل في حقل ( تاريخ الدخول ) في حدث بعد التحديث إلى هذا الكود :

Dim sh As Byte
Me![الرصيد] = 0
If Me![الرصيد] = 0 Then
sh = DateDiff("yyyy", [تاريخ الدخول], Date) + 1
sh = sh * 5
Me![الرصيد] = sh
If sh = 0 Then
Me![الرصيد] = 5
End If
End If
If Me![تاريخ الدخول] > Date Then
MsgBox "عفواً،،،، التاريخ المدخل أكبر من تاريخ النظام ، تأكد من تاريخ الدخول !!!!", vbOKOnly, "تنبيه"
Me![الرصيد].SetFocus
Me![تاريخ الدخول].SetFocus
Me![الرصيد] = 0
End If

في إنتظار ملاحظات أخرى على هذا النموذج ،،،،، عندما ننتهي من هذا النموذج بالشكل المطلوب ،،، سوف أشرح لك نموذج الحسم ،،، إن شاء الله تعالى ،،،

شاكر

المسلم من سلم الناس من لسانه ويده

#17

السلام عليكم

لقد استخدمت ما ذكرت لي ....

1- الكود الاول الخاص بنموذج يعمل بالشكل المطلوب بعد ان تم التعديل على الجدول Y

من جديد مرة اخر اصبح النموذج جيد

2- اما عن الكود الثاني الذي علية الزيادة ف ي ان يكون تاريخ الدخول اقل من العام القادم

اي ان لا تجاوز المستخدم السنة الحالية ...

قمت بوضع الكود الذي ذكرت ولكن .....

( أ) عند ادخال تاريخ اقل من تاريخ اليوم يعمل جيداً

( ب) عند ادخال تاريخ اكبر من اليوم مثلاً 1/8/1424 تظهر لي الرسالة الموجود في الكود

وهكذا اذا وضعت تاريخ مثلاً 1/8/1425 نفس الشي

( ج ) عند وضع تاريخ به السنة ( 1426 ) فاكثر تظهر لى رسالة من الاكسس

Microsft visual Basis

Run - time error "6

وذلك عند ادخال سنة اكبر من 1425 فقط اي 1426 -1427 -1430

وهل هذه العبارة هي التي تعمل لذلك :

If Me![تاريخ الدخول] > Date Then

MsgBox "عفواً،،،، التاريخ المدخل أكبر من تاريخ النظام ، تأكد من تاريخ الدخول !!!!", vbOKOnly, "تنبيه"

Me![الرصيد].SetFocus

Me![تاريخ الدخول].SetFocus

Me![الرصيد] = 0

End

انا في الانتظار والسلام

#18

عزيزي / لقد حاولت في الكود ، في حالة كتابتك لسنة ( 1425 ) ونجحت فيها ولكن في حال تسجيلك لسنة ( 1426 ) لا تزال تأتي رسالة الاكسس ،،،، سوف أدرس الكود مرة أخرى .

تفضل هذا الكود الذي توصلت إليه ،،، وهو يعمل بالشكل السليم فقط في حال كتابتك لسنة ( 1425 ) ،،،، تأتي لك رسالة ( عفواً ،،،، السنة المدخلة أكبر من السنة الحالية )

Dim sh As Byte
Dim d, x
x = Year(Date)
d = Year([تاريخ الدخول])
Me![الرصيد] = 0
If Me![الرصيد] = 0 Then
sh = DateDiff("yyyy", [تاريخ الدخول], Date) + 1
sh = sh * 5
Me![الرصيد] = sh
If sh = 0 Then
Me![الرصيد] = 5
If d > x Then
MsgBox "عفواً ،،،،  السنة المدخلة أكبر من السنة الحالية !!!!", vbOKOnly, "تنبيه"
Me![الرصيد].SetFocus
Me![رقم المشارك].SetFocus
Me![الرصيد] = 0
Me.Undo
End If
End If
End If

عندما أتوصل للحل عند كتابة أي سنة أكبر من السنة الحالية سوف أضع الكود ،،، ولو درست الكود جيدا سوف تجده صحيحا 100 % ،،، ولكن عند تجربته لا يعمل بالشكل الصحيح ،،،

علمت متغيرا اسمه ( d ) ومتغيرا آخر اسمه ( x )

d يأتي لي بالسنة من ( تاريخ الدخول ) .

x يأتي لي بالسنة من ( تاريخ النظام ) . أي التاريخ الحالي للجهاز .

ثم وضعت شرطا في حال أن d > x يأتي بالرسالة ،،،، وهو فعلا يأتي بالرسالة ولكن

في حال أن الفرق بين السنة الحالية ( x ) والسنة في ( تاريخ الدخول ) فقط سنة واحدة

أي نحن الان في سنة ( 1424 ) ،،،، عندما تضع سنة ( 1425 ) يعمل الكود بالشكل

الصحيح ،،،، ولكن عندما يكون الفرق بينهما أكبر من ( 1 ) مثلا ( 2 ) أي تكون السنة

( 1426 ) لا يعمل الكود بالشكل الصحيح ،،، وتأتي رسالة الاكسس التي ذكرتها ,,,

شاكر

المسلم من سلم الناس من لسانه ويده

#19

السلام عليكم

لقد فهمت ......ولكن

ان في انتظار الاخير بما يكون افضل

ولن اتعدى الى سؤال اخر في نفس الموضوع ان احببت ذلك

رعاك الله

والسلام

#20

أخي العزيز / عزيز ،،،، حيث أننا شبه إنتهينا من النموذج الاول ،،،، سوف أبدأ معك النموذج الثاني : ( نموذج الحسم )

اقتباس

اقتباس
علما ايضاً باني اريد الفرز بين مشاركة رسمية او مشاركة استثنائية والمطلوب فقط الحسم من المشاركات الرسمية

حيث يوجد لدي في نموذج المشاركات انوع المشاركة يتم اختيارة من حقل اختيار

رسمية/ استثنائية

سوف نضيف إلى هذا الجدول حقلا يحدد ما إذا كانت هذه المشاركة ( رسمية/استثنائية )

وليكن اسم الحقل : ( نوع المشاركة )

سوف أشرح لك كيفية إضافة هذا الحقل في الجدول

نوع الحقل ( نص )

من خصائص الحقل أنقر على ( بحث ) ،،،، إنظر إلى أسفل سوف ترى هذا الخيار .

خاصية : ( عرض عناصر التحكم ) ،،، غيرها إلى ( مربع تحرير وسرد )

خاصية : ( نوع مصدر الصف ) ،،،، غيرها إلى ( قائمة القيم )

خاصية : ( مصدر الصف ) ،،،، أكتب فيه : ( 1;رسمية;2;إستثنائية )

خاصية : ( عمود منضم ) : أكتب فيه الرقم : ( 1 )

خاصية : ( عدد الأعمدة ) : أكتب فيه الرقم : ( 2 )

خاصية : ( عرض الاعمدة ) : أكتب فيه ( 0سم;2سم )

خاصية : ( صفوف القائمة ) : أكتب فيه الرقم : ( 2 )

خاصية : ( إلتزام بالقائمة ) : تكون : ( نعم )

طريقة الشرح هذه تعتمد على ( أكسس 97 )

بهذه الطريقة استغنينا عن عمل جدول كي نضع فيه نوع المشاركة ،،، ثم بعد ذلك الاشارة إليه عن طريق إستعلام ،،،، أي وضعت لك هذه الطريقة كي لا نضيف جدولا آخر لـ ( نوع المشاركة ) ،،،،

ملاحظة : يجب أن يكون الحقل ( رقم المشارك ) في جدول ( w ) وهو جدول ( معلومات المشاركين ) ،،،،،، مفتاح أساسي ,,,, أي لا يقبل التكرار

والحقل ( رقم المشارك ) ،،، في جدول ( mm ) وهو جدول ( الحسم ) ،،، حقل عادي

أي يقبل التكرار ،،،،،

ثم عمل علاقة بينهما من شريط القوائم ( أدوات ) ثم ( علاقات ) ,,,,, إلـــــخ ,,,

عندما تنتهي من عمل الحقل والعلاقة بين الجدولين بالشكل المطلوب ،،، سوف أتطرق لشرح النموذج ،،،، حيث أن تطبيق هذا مهم جدا للمرحلة القادمة ،،،،

في الانتظار

شاكر

المسلم من سلم الناس من لسانه ويده

#21

السلام عليكم

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

اقوم بالاختيار من هذا الحقل في النموذج الخاص بمنح المشاركات اي ان لدي حقل جاهز

واسم هذا الحقل ( tab-mshrkh)

اما اذا كان من الافضل عمل ماذكرت ؟

اما عن رقم المشارك في جدول MM ورقم المشارك في الجدول الرئيس فهو مرتبط بالعلاقة المطلوبة مسبقاً

انافي انتظار الرد :

اجمل التحيات

================

قد شغل الناس كثرة الامل

وانت بالمكرمات في شغل

تمثلوا حاتماً ولو عقلوا

لكنت في الجود غاية المثلٍ

#22

السلام عليكم ،،،، أسعد الله صباحك بكل خير ،،،،

حسنا ,,,, بما أنك عملت المطلوب من السابق ،،،، سوف أشرح لك هذا النموذج سوف نعتمد على أن الحقل المضاف اسمه ( نوع المشاركة ) ,,,

أولاً : سوف نعمل استعلام تحديد مبني على الجدولين جدول ( w ) وهو جدول ( معلومات المشاركين ) و جدول ( mm ) وهو جدول ( الحسم ) ،،، ثم نعمل النموذج ( مصدر السجل )

له من هذا الاستعلام ,,,,

دعنا نحدد حقول هذا الاستعلام :

حقل ( رقم المشارك ) : من جدول ( mm )

حقل ( الاسم ) : من جدول ( w )

حقل ( تاريخ الدخول) : من جدول ( w )

حقل ( الرصيد ) : من جدول ( w )

حقل ( نوع المشاركة ) : من جدول ( mm )

حقل ( تاريخ المشاركة ) : من جدول ( mm )

ملاحظة هامة : لا تنسى أن حقل ( رقم المشارك ) في الجدول ( w ) هو مفتاح اساسي أي لا يقبل التكرار ,,, وحقل ( رقم المشارك ) في الجدول ( mm ) هو حقل عادي أي يقبل التكرار ...

إذا أنتهيت من عمل الاستعلام قم بتجربته :

شغل الاستعلام ثم أكتب أي رقم من ضمن المشاركين المدخلين بياناتهم ،،،، هل ظهرت لك معلوماته من الجدول ( w ) أم لا ؟؟؟؟ في حال الجواب بنعم فأنت قد نجحت في عمل

الاستعلام ،،، لأنه هذا هو المفروض أن يحصل !!!!

بعد عمل الاستعلام قم بإنشاء نموذج مبنياً على هذا الاستعلام أي مصدر السجل لهذا

النموذج هو هذا الاستعلام ,,,,

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

( بعد التحديث ) :

If Me![نوع المشاركة] = 1 Then
Me![الرصيد] = Me![الرصيد] - 1
End If

شرح الكود أنه في حال أن نوع المشاركة ( 1 ) أي ( رسمية ) يقوم بحسم ( 1 ) مشاركة واحدة من رصيد المشارك ،،،، أما إذا كانت نوع المشاركة ( 2 ) أي ( استثنائية ) لا يقوم بعملية الحسم ,,,,

تذكر مرة أخرى خصائص حقل ( نوع المشاركة ) مهم جداً :

نوع الحقل ( نص )

من خصائص الحقل أنقر على ( بحث ) ،،،، إنظر إلى أسفل سوف ترى هذا الخيار .

خاصية : ( عرض عناصر التحكم ) ،،، غيرها إلى ( مربع تحرير وسرد )

خاصية : ( نوع مصدر الصف ) ،،،، غيرها إلى ( قائمة القيم )

خاصية : ( مصدر الصف ) ،،،، أكتب فيه : ( 1;رسمية;2;إستثنائية )

خاصية : ( عمود منضم ) : أكتب فيه الرقم : ( 1 )

خاصية : ( عدد الأعمدة ) : أكتب فيه الرقم : ( 2 )

خاصية : ( عرض الاعمدة ) : أكتب فيه ( 0سم;2سم )

خاصية : ( صفوف القائمة ) : أكتب فيه الرقم : ( 2 )

خاصية : ( إلتزام بالقائمة ) : تكون : ( نعم )

طريقة الشرح لهذه الخصائص تعتمد على ( أكسس 97 )

مع خالص تحياتي

شاكر

المسلم من سلم الناس من لسانه ويده

#23

السلام عليكم

يبدو اني سوف اتعبك معي حفظك الله

عملت ما ذكرت ولكن لم يعمل معي ما شرحت يبدو اننى لم استطع الاستيعاب عذرا او ان هناك خطا

اخي : شاكر

كما ذكرت لك سلفاً بأن لدي جدول W وهو لبيانات المشتركين الرئيس ومن اهم حقوله

1- رقم المشترك وهو رقم لا يقبل التكرار ( رقمي )

2 - الاسم ( نصي )

3 - تاريخ الدخول ( تاريخ /وقت ) هجري

وكما ذكرت لك ايضا الجدول MM وهو لتسجيل المشاركات وبه نموذج ايضا واهم حقولة

1- رقم المشارك ( رقمي ) وهذا الحقل ليس من ضمن النموذج كما انه مرتبط بعلاقة مع رقم المشارك في جدول W من نوع :

( أ ) فرض التكامل المرجعي

( ب ) تتالي تحديث الحقول المرتبطة

ونوع الربط :

شمل "كافة" السجلات من 'W' وتلك السجلات فقط من 'MM' حيث تكون كافة الحقول المرتبطة متساوية.

2- وحقل مدة المشاركة ( 2 - 3 - 4 - 5 ) رقمي لتسجيل مدة المشاركة

3- وحقل تاريخ بدء المشاركة / تاريخ

4- وحقل نهاية المشاركة

5- وحقل تاريخ المشاركة عن عام ( ..... كذا ) حتي تكون الاعوام متتالية

كون بعض المشاركين لا يذهب في مشاركة كل عام لذا يحسب مشاركتة عن اخر عام حصل مشاركة اي ليس في نفس العام يكون حقل رقم ( 5 ) وعلية فاني جعلت نموذج تسجيل المشاركات فرعي بالنموذج الرئيس ثم لم احتاج الى ادخال رقم المشارك كل مرة يحصل المشترك على مشاركته حيث يظهر رقمه في جدول MM تلقائياً

وايضاً :

يبدو لي اننا بحاجة لحقل رقم ( 2 ) مدة المشاركة في الاستعلام ليتم الحسم من خلاله حيث ان المشارك لا يحصل على ( 5 ) مشاركات دفعتا واحدة ربما تكون ( 2-3 4... )

وربما تكون ( 10 ) دفعتا واحدة عن عامين ‍‍‍‍مثلاً

وعن الاكسس لدي

مكروسوت 98

اوفس XP

عذار كثيرا ان كنت اطلت الشرح وامل ان استفيد من شرحكم الوافي تفضلوا بقبول شكري وتقدير

والسلام

#24

أخي الكريم ،،، لقد تمكنت من الوصول للكود الذي يعطيك رسالة في حال كتابتك لسنة أكبر من السنة الحالية سواءا ( 1425 ) أو ( 1426 ) أو ( 1427 ) ،،،، أي تاريخ تكتبه بسنة أكبر من السنة الحالية سوف يعطيك رسالة ،، ويتم التراجع عن الحفظ هذا هو الكود :

Dim sh As Byte
Dim d, x
x = Year(Date)
d = Year([تاريخ الدخول])
Me![الرصيد] = 0
If d > x Then
MsgBox "عفواً ،،،،  السنة المدخلة أكبر من السنة الحالية !!!!", vbOKOnly, "تنبيه"
Me![الرصيد].SetFocus
Me![رقم المشارك].SetFocus
Me![الرصيد] = 0
Me.Undo
Else
If Me![الرصيد] = 0 Then
sh = DateDiff("yyyy", [تاريخ الدخول], Date) + 1
sh = sh * 5
Me![الرصيد] = sh
If sh = 0 Then
Me![الرصيد] = 5
End If
End If
End If

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

عزيزي : نصيحة عندما تريد عمل أي برنامج ،،، لاتبدأ بعملية البرمجة إلا بعد أن تستوفي كافة الجداول وكافة حقولها ،،، وعمل علاقات في حال وجود ضرورة لذلك ,,, لأن ذلك مهم جدا في نجاح البرنامج ،،،، من عدمه

اقتباس

اقتباس
2- وحقل مدة المشاركة ( 2 - 3 - 4 - 5 ) رقمي لتسجيل مدة المشاركة

3- وحقل تاريخ بدء المشاركة / تاريخ

4- وحقل نهاية المشاركة

5- وحقل تاريخ المشاركة عن عام ( ..... كذا ) حتي تكون الاعوام متتالية

ماذا تعني بمدة المشاركة ( 2 - 3 - 4 - 5 ) ،،،، مدة تعني فترة أي ( يوم ، أو يومين ,,,,إلخ ) ،،،، أو أن قصدك ( مشاركة ، مشاركتين ، ثلاث مشاركات ،،،،، إلخ ) ؟؟؟

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

يوجد كثير من الاسئلة تحتاج لإجابة ،،، كي أوافيك بالمطلوب !!!!!

شاكر

المسلم من سلم الناس من لسانه ويده

#25

السلام عليكم

الاخ شاكر:

المزيد من الشكر ومزيداً من الاعتذار

لقد احسست وانا اكتب الرد السابق بانه سوف يأتيني هذا الرد ولقد اخجلتني بالفعل

اجوا منك ان تتحمل عدم الفهم تارتاً وتارتاً اخرى للتسرع في الطرح الاخ شاكر حفظكم الله :

اما عن مدة المشاركة فاقصد به ( 2-3 4-5 000) حيث ان المشارك اذا حصل على مشاركة ( 5 ) مثلاً تكون مدتها ( 5 ) ايام واذا حصل على ( 3 ) مشاركات تكون ( 3 ) ايام وهكذا

واعني بتاريخ البدء أي في أي تاريخ تبدا وتنتهي هذا المشاركة وذلك للتدوين في السجلات فقط !

سوف اكتفي بهذا الطرح فقط ولن اذكر الباقي لكونه سوف يفسد الشرح باعتقادي وأستطيع ان لا اذكره البتة

وفي الاخير ارجو ا فبول العذر مرة اخرى حفظكم الله ===============================================

قال الامام علي :لو كسرت لي الوسادة ثم جلست عليها لقضيت بين اهل التوراة بتوراتهم وبين اهل الإنجيل بإنجيلهم وبين أهل الزبور بزبور هم وبين أهل الفرقان بفرقانهم والله ما من آية نزلت في بحر ولا بر ولا سهل ولا جبل ولا ارض ولا سماء ولا ليل ولا نهار إلا وأنا أعلم فيمن نزلت وفي أي شيء نزلت .

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

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