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

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

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

⭐ هدية ~ أداة حماية الجداول وتحصينها في آكسيس 2026 ⭐


cooltext486578456950156.png.aa369c4e607d447fe441425dd77d9298.png

أخواني وأساتذتي ومعلمينا ( دون استثناء ) ..

 

في الموضوع الذي سبق وتم طرحه في هذا الموضوع ، كانت المشاركات بناءة لفتح باب الإبتكار والتطوير وخلق بيئة حماية وحصانة للجداول من خلال ضبط حماية السجلات وتحصينها داخل الجداول عن طريق ماكرو البيانات . والشكر موصول لأخي الأستاذ موسى @Moosak وأخي منتصر @منتصر الانسي ، لمشاركتهما الحديث والأفكار بخصوص هذا الموضوع . وبناءً على الفكرة العامة فقد توصلت وبحمد الله وفضله لفكرة تمكن المستخدم ( المطور عادةً أو صمم قاعدة البيانات ) من حماية الجداول والسجلات من الحذف أو التعديل المباشر على السجلات داخل الجداول . وبالتالي تطبيق حصانة كاملة على الجداول التي يحددها المستخدم .

1.png.af746c9db3c7cf346a601a610170792b.png

 

Secure.png.b594fc2eb78fe843001bdfeaad9cb429.pngميزات الأداة :-

1️⃣ تأتي الأداة بمديول واحد يمكن نسخه إلى أي قاعدة بيانات ، وإستدعاء دالة الحماية ، أو حذفها على أي جدول / جداول يختارها المستخدم .

2️⃣ واجهة تفاعلية تسمح لك كمستخدم بتطبيق واختيار نوع الوظيفة بسهولة تامة ، بدلاً من كتابة الإستدعاءات ، تسهيلاً لتطبيق الحماية أو حذفها .

3️⃣ تتعامل الأداة مع الجداول المحلية و الجداول المرتبطة بشكل منظم وديناميكي صامت جداً .

4️⃣ للأداة القدرة على التعامل مع استدعاءات الإستعلامات ( الإضافة ، التحديث والحذف ) بشكل صارم ومحكم التنفيذ .

5️⃣ أيضاً القدرة حتى مع التعامل مع استعلامات الـ SQL بذكاء خاص .

6️⃣ قدرة الأداة على تطبيق الحماية على جدول ( على سبيل المثال ) مع استثناء حقل أو حقول من الحماية . بحيث تستطيع من خلال أي نموذج التعديل على هذه الحقول داخل الجدول المحمي دون أي تعارض .

7️⃣ إمكانية تطبيق الحماية / حذفها لجداول محددة تختارها من خلال الإستدعاء مرة واحدة ، أو جميع الجداول في قاعدة بياناتك .

8️⃣ إتاحة الفرصة أيضاً لتطبيق الحماية أو حذفها على جداول قاعدة بيانات خارجية دون الحاجة إلى نقل المديول لقاعدة البيانات هذه ( التي اخترتها ) .

9️⃣ التعامل الذكي مع الجداول المرتبطة فقط بحمايتها أو إلغاء الحماية عنها ؛ وأن تستثني الجداول المحلية الغير مرتبطة .

🔟 التعامل مع مسار جداول قواعد البيانات المرتبطة دون الحاجة لإدخال المسار بشكل يدوي .

1️⃣1️⃣ التعامل بذكاء مع قواعد البيانات المرتبطة والمحمية بكلمة مرور . بحيث يتم التعرف واكتشاف كلمة المرور تلقائياً وتمريرها إلى الحماية أو الحذف دون الحاجة للتدخل اليدوي .

1️⃣2️⃣ قراءة جداول قاعدة البيانات الخارجية والتعامل معها مباشرة مع عرض جداولها داخل الأداة من داخل قاعدة بيانات مشروعك . وحتى حقول كل جدول في قاعدة البيانات تلك التي اخترتها .

1️⃣3️⃣ إمكانية تطبيق الحماية أو الحذف بشكل صامت أو إظهار رسالة تفاعلية بالنتيجة التوضيحية .

1️⃣4️⃣ رسائل أخطاء معربة بالكامل لجميع احتمالات رسائل الخطأ التي يمكن أن تظهر للمستخدم .

1️⃣5️⃣ تمكين المستخدم من نسخ سطر الإستدعاء ولصقه في أي وظيفة أو حدث يحتاجها لها .

1️⃣6️⃣ في المديول ، يوجد شرح مبسط لآلية الإستدعاءات التي يمكن للأداة تطبيقها وتقديمها لك من خلال واجهة النموذج المخصص للإستدعاءات .

1️⃣7️⃣ إتاحة الفرصة بتطبيق الحماية أو حذفها عن كافة الجداول ، مع استثناء جداول محددة .

1️⃣8️⃣ عرض حالة الجدول إن كان محمياً مسبقاً أو لا ، وحالة الحماية عند وجود حقول تم استثناؤها .

1️⃣9️⃣ تضمين التحقق من وجود الكائنات التي يتم استدعاء الحماية عليها من خلال كود VBA . كمثال :-

' التحقق من وجود الكائن قبل التنفيذ
If DCount("*", "MSysObjects", "Name In ('Tbl_1', 'Tbl_2') And Type In (1, 4, 6)") = 2 Then
    
Else
    MsgBox "أحد الكائنات المحددة [Tbl_1, Tbl_2] غير موجود في قاعدة البيانات!", vbExclamation
End If

 

1.png.af746c9db3c7cf346a601a610170792b.png

 

Secure.png.b594fc2eb78fe843001bdfeaad9cb429.pngصورة من واجهة الأداة :-

image.png.d044f7a911b6d7e2746103b4833f84a7.png

image.png.97d32a69c982fe2d57b30d5d85cc54bc.png

image.png.ac9d893143bf20499fffb6e03d3b208f.png

1.png.af746c9db3c7cf346a601a610170792b.png

 

Secure.png.b594fc2eb78fe843001bdfeaad9cb429.pngملف الأداة مفتوح المصدر Secure.png.b594fc2eb78fe843001bdfeaad9cb429.png


 

تم تعديل بواسطه Foksh
إضافة نقاط التحديث .
  • Like 2
قام بنشر (معدل)

تم تعديل الملف بإضافتين بسيطتين ، وتصحيح وظيفة موجودة مسبقاً :-

  • إضافة ميزة الكشف عن حالة الجدول عن اختياره من قائمة الجداول .
  • إضافة ميزة تطبيق الحماية أو حذفها عن جميع الجداول مع استثناء جداول محددة في سطر الإستدعاء .
  • تصحيح وظيفة "تضمين التحقق من وجود الكائن" ، والتي تم تعديلها لتعمل فقط عند اختيار جداول محددة من القائمة المنسدلة .
تم تعديل بواسطه Foksh
  • Thanks 1
قام بنشر

على رأي المعلق الرياضي رؤوف خليف شنو هاااااذااااا :clapping:منتهى الروعة والجمال

الأداة بوضعها الحالي لاتشوبها شائبة ولكن لدي ملاحظة وإقتراح 

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

Animation.thumb.gif.02153ae835185d6d5937541908f615ab.gif

أدري أن الماكرو يقوم برفع خطأ برقم ونص مخصصين ولكن لاحظ رقم الخطأ في أول رسالة (عند النقر على زر الحفظ) سنجد أن رقمه 3939 رغم أن الماكرو يرفع خطأ بالرقم 9991 والرقم 9992 فهل بالإمكان أن يتم رفع رقم الخطأ من الماكرو وإعتراضه عن طريق الكود ليتم معالجته بإستخدام VBA ؟

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

Untitled.jpg.52e5a1cebac7eff00a401cd6f4a6cc3b.jpg

في الأخير وكما أسلفت فإن الملاحظة والمقترح هما من باب مشاركة الأفكار ولا ينقصا من روعة الأداة بوضعها الحالي بشيئ

تحياتي

 

  • Like 1
  • Moosak pinned this topic
قام بنشر (معدل)
6 ساعات مضت, منتصر الانسي said:

على رأي المعلق الرياضي رؤوف خليف شنو هاااااذااااا :clapping:منتهى الروعة والجمال

الأداة بوضعها الحالي لاتشوبها شائبة ولكن لدي ملاحظة وإقتراح

شكراً لك شهادتك التي أعتبرها وسام كبير بالنسبة لي .:fff:.

 

6 ساعات مضت, منتصر الانسي said:

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

هذه اعتقد باختلاف التعامل مع كل وظيفة . فمثلاً ازرار التنقل بين السجلات تعتمد العرض المباشر من الجدول .

وأما من خلال زر الحفظ بهذه أمرها سهل واعتقد أنها لم تمر من تحتك . فهنا سيكون دور المطور استخدام صائد الأخطاء فقط لا غير . كمثال للنموذج مباشرةً :-

Private Sub Form_Error(DataErr As Integer, Response As Integer)
    If DataErr = 3939 Then
        MsgBox "عذراً، هذا الجدول محمي ويمنع تعديل بياناته!", vbCritical + vbMsgBoxRight + vbMsgBoxRtlReading, "منظومة الحصانة"
        Response = acDataErrContinue
    End If
End Sub

 

أو من خلال الزر مباشرة عند إجراء الحفظ ، على سبيل المثال :-

Private Sub Btn_Save_Click()
    On Error GoTo ErrHandler
    DoCmd.RunCommand acCmdSaveRecord
    Exit Sub
ErrHandler:
    If Err.Number = 3939 Or InStr(Err.Description, "9992") > 0 Then
        MsgBox "عذراً، هذا السجل محمي ضد التعديل!", vbExclamation + vbMsgBoxRight + vbMsgBoxRtlReading
    Else
        MsgBox "خطأ: " & Err.Description, vbCritical
    End If
End Sub

 

6 ساعات مضت, منتصر الانسي said:

أدري أن الماكرو يقوم برفع خطأ برقم ونص مخصصين ولكن لاحظ رقم الخطأ في أول رسالة (عند النقر على زر الحفظ) سنجد أن رقمه 3939 رغم أن الماكرو يرفع خطأ بالرقم 9991 والرقم 9992 فهل بالإمكان أن يتم رفع رقم الخطأ من الماكرو وإعتراضه عن طريق الكود ليتم معالجته بإستخدام VBA ؟

فعلاً الماكرو له أخطاء محددة بأرقام معينة يتعامل معها ، ويتعرف عليها .. لذا فالخطأ 3939 ليس من ضمن أرقام الأخطاء التي يتعامل معها ماكرو البيانات أو يفهمها . بل هي من ضمن خصائص ومستوى فهم الـ VBA نفسه ، وبالتالي سنعود إلى الأفكار التي تتعامل مع اصطياد رقم الخطأ وترجمته من خلال رسالة مباشرة .

 

6 ساعات مضت, منتصر الانسي said:

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

أما بخصوص مقترح الـ ListBoxes لنقل الحقول أو اختيار الجداول المتعدد ، فالفكرة استثنائية وبصرية غاية في الروعة والجمال ، وتسهل على من يفضل استخدام الماوس بدلاً من كتابة أسماء الجداول والحقول مفصولة بفواصل . وقد يكون لها نصيب في تحديث لاحق إن شاء الله . ولكن كان لتصميم النموذج بوضعه الحالي سلوك خاص ومميز عندي ولم أرغب في زيادة التعقيد في الأكواد 😅 .

كل الشكر والتقدير لإثرائك الراقي ومشاركتك القيمة :wub:

تم تعديل بواسطه Foksh

انشئ حساب جديد او قم بتسجيل دخولك لتتمكن من اضافه تعليق جديد

يجب ان تكون عضوا لدينا لتتمكن من التعليق

انشئ حساب جديد

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

سجل حساب جديد

تسجيل دخول

هل تمتلك حساب بالفعل ؟ سجل دخولك من هنا.

سجل دخولك الان
×
×
  • اضف...

Important Information