اذهب الي المحتوي
أوفيسنا

الردود الموصى بها

قام بنشر

cooltext486578456950156.png.aa369c4e607d447fe441425dd77d9298.png

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

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

 

 

📖 قصة التحدي :-

طلب منك عزيزي المشارك ( مصنع تقني ) بناء نظام لإدارة شؤون الموظفين ، ولكن لديهم شروط صارمة جداً لمنع أي موظف مُدخِل بيانات من ارتكاب أخطاء . حيث أن الإدارة ترفض تماماً استخدام أكواد ( VBA ) ، وتريد أن تكون الحماية مزروعة ومتأصلة في قلب الجداول مباشرة ، لضمان أقصى درجات الأمان .

 

🛠️ المطلوب :- إنشاء جدول باسم tbl_Managers ، يحتوي على الحقول التالية :-

  • اسم الموظف ( EmpName )
  • تاريخ الميلاد ( DOB )
  • تاريخ التعيين ( HireDate )
  • الدرجة الوظيفية ( JobGrade ) = (A أو B أو C)
  • الراتب الأساسي ( Salary )

 

🚫 شروط التحدي :-

يجب عليك ضبط إعدادات الجدول (Property Sheet) ليقوم بالمهام التالية تلقائياً :-

  • يُمنع الحفظ في حال مخالفة القوانين والأحكام ، حيث يُمنع تسجيل أي موظف عمره أقل من 18 عاماً ( بناءً على تاريخ ميلاده مقارنة بتاريخ اليوم ) .
  • حماية التسلسل الزمني ، حيث يُمنع أن يكون تاريخ التعيين قبل تاريخ تأسيس المصنع ( 01/01/2020 ) .
  • يُمنع أن يكون تاريخ التعيين في ( المستقبل ، أي بعد تاريخ اليوم الحالي ) .
  • حماية هيكل الرواتب : يجب ربط الراتب بالدرجة الوظيفية كالتالي :-
  1. إذا كانت الدرجة A : الحد الأقصى للراتب هو 10,000 .
  2. إذا كانت الدرجة B : الحد الأقصى للراتب هو 7,000 .
  3. إذا كانت الدرجة C : الحد الأقصى للراتب هو 5,000 .

الرسائل المخصصة ، بحيث عند وقوع أي خطأ ، يجب أن يظهر للمستخدم رسالة تنبيه واضحة باللغة العربية تشرح له سبب الرفض بالضبط .

 

🚫 قوانين المشاركة :-

  • يُمنع منعاً باتاً استخدام أكواد VBA أو الـ Macros - الماكرو .
  • الحل يجب أن يكمن في خصائص الجدول ( Table Properties فقط .

 

 كيف تشارك ؟

  • قم برفع ملف مرفق فقط . وتذكر أنك عزيزي المشارك تملك الحق في 3 محاولات لإجاباتك خلال التحدي الواحد فقط .

 

 

394333727_.png.15ebe9f59492f69ce1fe42844a2c6327.png

  • Like 2
  • Haha 1
قام بنشر

السلام عليكم

 

في 1‏/2‏/2026 at 18:24, Foksh said:

وتريد أن تكون الحماية مزروعة ومتأصلة في قلب الجداول مباشرة

وتماشيا مع روح الشروط (وليس تماشيا مع الشروط 🙂 ) ، وهي ثغرة قانونية استندت عليها في المرفق 🙂

 

في 1‏/2‏/2026 at 18:24, Foksh said:

يجب عليك ضبط إعدادات الجدول (Property Sheet) ليقوم بالمهام

هممم ، اعتقد هذه العبارة ذو اكثر من تأويل ، فإذا استعملناها بحذافيرها ، فيمكن ان نعمل المطلوب ولكن الكود سيكون غير واضح بسبب إستعمال عدد كبير من iif في بعضها البعض !!
ولذلك من مرفقات الشباب اعلاه ، ارى انهم لم يلتزموا بالعمل على مستوى إعدادات الجدول فقط ، وانما انتقلوا الى إعدادات الحقول ايضا 🙂
 

Challange_01_02.zip

  • Like 1
  • Thanks 1
قام بنشر
4 ساعات مضت, jjafferr said:

وتماشيا مع روح الشروط (وليس تماشيا مع الشروط 🙂 ) ، وهي ثغرة قانونية استندت عليها في المرفق 🙂

فكرة جميلة جداً تجميع بين عدم ظهور الشروط في خصائص الحقول + القوة والمتانة + دعمها للرسائل العربية  :clapping:

  • Thanks 1
قام بنشر

انا اميل الى اشعار المستخدم بالخطأ على مستوى الحقل وليس على مستوى السجل ، حتى يتمكن من التعديل مباشرة ،

لهذا السبب طرق @Debug Ace و @Moosak اعلاه هي افضل من طريقتي ،

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

ولما يسمح لنا اخوي @Foksh ، بنتكلم عن الطريقة ان شاء الله 🙂

قام بنشر
37 دقائق مضت, jjafferr said:

انا اميل الى اشعار المستخدم بالخطأ على مستوى الحقل وليس على مستوى السجل ، حتى يتمكن من التعديل مباشرة ،

كلامك سليم وجميل أخي جعفر .. لكن الميزةفي فكرتك هي بمثابة خط الدفاع الأخير . يعني حتى لو تم إدخال البيانات عبر استعلام إلحاق مثلاً أو من مصدر خارجي ، سيأتي الحارس الشخصي للجدول وهو هنا الماكرو لإيقافها . 

38 دقائق مضت, jjafferr said:

ولما يسمح لنا اخوي @Foksh ، بنتكلم عن الطريقة ان شاء الله 🙂

سامحك الله أخي جعفر .. من أنا لأسمح أو أمنع :smile: ..

 

لاحظ أن الشرط حماية هيكل الرواتب ( ربط الراتب بالدرجة ) ، فهذا الشرط لا يمكن عمله على مستوى الحقل أبداً :biggrin: ، لأننا هنا سنقارن حقلين ببعضهما . لذا ومن رأيي الشخصي ، لا بد من وجود قاعدة تعمل على مستوى السجل .

قام بنشر

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

قام بنشر
اقتباس

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

1. انت دخلت في جدول محظور الدخول فيه ، ولم اقرأ اي محترف ان تجرأ وقام بالتعديل عليه ،

2. رسائل الخطأ غير واضحة ، حيث انها جزء من رسالة خطأ الاكسس ،

3. يجب ان تكون المعادلات ورسائل الخطأ سهل الوصول اليها ، وسهل تغييرها ،

3. وحتى اذا تم قبول المشاركة ، فالشرط الاساس لا ينطبق عليها: ان الجدول يتضمن جميع الشروط . فقد نقلت الجدول الى قاعدة بيانات اخرى ، ولم تعمل الشروط عليه (للعلم ، فقد قمت بهذا العمل لبقة المرفقات ، وعمل الجدول بطريقة صحيحة 🙂 ) .
 

 

1 ساعه مضت, Foksh said:

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

اعتقد التحدي القادم يجب ان يكون ساحة مفتوحة لإستعمال اي طريقة ، سواء بالبرنامج نفسه او حتى الاستعانة ببرامج خارجية :biggrin:

قام بنشر

بسيطة بدون خصائص الحقول ولو من الجدول فقط
يكون Table Validation Rule كالتالى :

(DateDiff("yyyy",[DOB],Date())>=18 Or [DOB] Is Null)
And ([HireDate]>=#1/1/2020# And [HireDate]<=Date() Or [HireDate] Is Null)
And ([JobGrade] In ("A","B","C") Or [JobGrade] Is Null)
And ([JobGrade]="A" And [Salary]<=10000
Or [JobGrade]="B" And [Salary]<=7000
Or [JobGrade]="C" And [Salary]<=5000
Or [Salary] Is Null)


يكون Table Validation Text كالتالى :
 

خطأ في الحفظ:
- العمر <18 سنة
- HireDate قبل 1/1/2020 أو مستقبلي
- Salary > حد الدرجة (A:10000 B:7000 C:5000)

 

  • Confused 1
قام بنشر
48 دقائق مضت, Debug Ace said:

لا اعرف سبب تعجب حضرتك على المشاركة السابقة

المعذرة اخي الفاضل ، كان لازم اكتب توضيح لتعجبي 🙏

 

برمجيا ، مرفقك يؤدي الغرض من هذا التحدي ، بإستثناء :

في 1‏/2‏/2026 at 18:24, Foksh said:

الرسائل المخصصة ، بحيث عند وقوع أي خطأ ، يجب أن يظهر للمستخدم رسالة تنبيه واضحة باللغة العربية تشرح له سبب الرفض بالضبط

 

اين الخطأ في هذا السجل :

image.png.2a9ec171e7517754b816042da9d5e10c.png

.

غير معروف مكان الخطأ ، مما يضطر المستخدم الى البحث يدويا في كل حقل !!

 

 

 

 

 

في 10‏/2‏/2026 at 11:42, jjafferr said:

انا اميل الى اشعار المستخدم بالخطأ على مستوى الحقل وليس على مستوى السجل ، حتى يتمكن من التعديل مباشرة ،

لهذا السبب طرق @Debug Ace و @Moosak اعلاه هي افضل من طريقتي ،

 

قام بنشر
في 10‏/2‏/2026 at 10:42, jjafferr said:

انا اميل الى اشعار المستخدم بالخطأ على مستوى الحقل وليس على مستوى السجل ، حتى يتمكن من التعديل مباشرة ،

لهذا السبب طرق @Debug Ace و @Moosak اعلاه هي افضل من طريقتي

ولماذا لا نجمع بين مزايا كل حل كما بالمرفق هنا؟

ولكن لاأدري إذا ما كان ماكرو البيانات يندرج ضمن المحضورات المذكورة في التحدي

في 1‏/2‏/2026 at 17:24, Foksh said:
  • يُمنع منعاً باتاً استخدام أكواد VBA أو الـ Macros - الماكرو .

 

Challange_01_03.accdb

  • Like 2
قام بنشر
7 ساعات مضت, jjafferr said:

1. انت دخلت في جدول محظور الدخول فيه ، ولم اقرأ اي محترف ان تجرأ وقام بالتعديل عليه

:biggrin: بالفعل ، وأعلم هذا .. ولكن كنوع من الجرأة كما سميتها تطرقت لهذه الفكرة من باب التجربة ليس إلا 😉
وبالفعل رسائل الخطأ غير واضحة ، لأن الرسالة الإنجليزية متأصلة في آكسيس ولم أتمكن من ضبطها وتعديلها داخلياً إلا من خلال استعمال حدث النموذج عند الخطأ .. ولم أقم بإدراج إجابتي لأنها خارجة عن الشروط 😜

1.png.af746c9db3c7cf346a601a610170792b.png

7 ساعات مضت, jjafferr said:

اعتقد التحدي القادم يجب ان يكون ساحة مفتوحة لإستعمال اي طريقة ، سواء بالبرنامج نفسه او حتى الاستعانة ببرامج خارجية :biggrin:

هذا سيكون عليك في الشهر القادم إن شاء المولى عز وجل .. ( ما رأيك؟ 👀 )

1.png.af746c9db3c7cf346a601a610170792b.png

5 ساعات مضت, Debug Ace said:

بسيطة بدون خصائص الحقول ولو من الجدول فقط
يكون Table Validation Rule كالتالى :

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

1.png.af746c9db3c7cf346a601a610170792b.png

23 دقائق مضت, منتصر الانسي said:

ولماذا لا نجمع بين مزايا كل حل كما بالمرفق هنا؟

ولكن لاأدري إذا ما كان ماكرو البيانات يندرج ضمن المحضورات المذكورة في التحدي

الدمج بين الطريقتين فكرة جميلة أيضاً .. :clapping:

1.png.af746c9db3c7cf346a601a610170792b.png

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

قام بنشر
52 دقائق مضت, منتصر الانسي said:

ولكن لاأدري إذا ما كان ماكرو البيانات يندرج ضمن المحضورات المذكورة في التحدي

اعتقد الجواب موجود في اصل الموضوع :

في 1‏/2‏/2026 at 18:24, Foksh said:

أن تكون الحماية مزروعة ومتأصلة في قلب الجداول مباشرة

:biggrin:

قام بنشر
منذ ساعه, Foksh said:

هذا سيكون عليك في الشهر القادم إن شاء المولى عز وجل .. ( ما رأيك؟ 👀 )

مع الاعتذار ، فانا مسافر من يوم غد 🙂

قام بنشر
21 ساعات مضت, jjafferr said:

مع الاعتذار ، فانا مسافر من يوم غد 🙂

تعود سالماً لأهلك إن شاء الله .. :wub:

  • 2 weeks later...
قام بنشر

  باقي من الوقت 7 أيام حتى نهاية التحدى الأول

قام بنشر

  باقي من الوقت 5 أيام حتى نهاية التحدى الأول

 
  •  
قام بنشر

  باقي من الوقت 3 أيام حتى نهاية التحدى الأول

قام بنشر (معدل)

اعذرني عن الشرح لانك طلبت المرفق فقط:

الفكرة اننا نستخدم لل DOB:

Validation Rule: DateDiff("yyyy";[DOB];Date())>=18

Validation Text: لا يمكن تسجيل موظف عمره أقل من 18 سنة.

بالنسبة الى HireDate:

[HireDate]>=#01/01/2020# And [HireDate]<=Date()Validation Rule:

 Validation Text: تاريخ التعيين يجب أن يكون بعد 1/1/2020 وليس في المستقبل.

وهكذا بالنسبة الى JobGrade

اما بالنسبة الى BasicSalary فالامر مختلف

نضع: VR = ([JobGrade]="A" And [BasicSalary]<=10000) Or ([JobGrade]="B" And [BasicSalary]<=7000) Or ([JobGrade]="C" And [BasicSalary]<=5000)

  =VT الراتب غير مطابق للدرجة الوظيفية.

A = 10000

B = 7000

C = 5000

ليس في حقل BasicSalary وانما من خلال Table Properties

من خلال أي حقل فارغ والضغط على property sheet

التعامل مع الجداول وخصائصها .rar

تم تعديل بواسطه Eng.Qassim
  • Like 1
  • Foksh locked this topic
قام بنشر

انتهت المدة المحددة للتحدي الأول ، ونشكر جميع من قام على هذا الدعم والمشاركة ..

وسيتم إختيار الإجابة التي نالت الإعجاب بالتقييم قريباً.

وسيتم الإعلان أيضاً عن التحدي الثاني قريباً جداً بإذن الله تعالى ، وذلك بالتصويت لنوع وموضوع التحدي الذي تفضلونه من بين مجموعة مواضيع.

 

شكراً لكم  💐

زائر
هذا الموضوع مغلق.
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information