أولا بالنسبه لكود القوائم يبدو أنني لم اشرح وجهة نظري بشكل واضح
اقصد كل قائمه لها ماكرو مستقل , و هذا الماكرو يتم استدعاؤه بالكود
الآن عند اختبار الصلاحيات يتم تشغيل الماكروات الخاصه بكل مجموعه فقط
مثال :
مجموعة الاداره , يتم تشغيل جميع أكواد القوائم
مجموعة مدخلي البيانات , يتم فقط تشغيل كود ماكرو قائمة جدول الرواتب مثلا و استعلام المدن , و بالتالي يفتح البرنامج على قائمتين فقط
مثلا ممكن استخدام هذا الكود :
Private Sub Form_Load()
Select Case ConGroupName
Case "Data Entry"
Ap_CodePermissionNoAccess
Ap_CodePermissionDataEntrey
DoCmd.AddMenu "&Test Tables", "MacOpenTbls", ""
Case "Accounting User"
Ap_CodePermissionNoAccess
Ap_CodePermissionAccountingUser
DoCmd.AddMenu "&Test Queries", "MacOpenQyrs", ""
Case "Supervisor User"
Ap_CodePermissionNoAccess
Ap_CodePermissionSupervisorUser
DoCmd.AddMenu "&Test Tables", "MacOpenTbls", ""
DoCmd.AddMenu "&Test Queries", "MacOpenQyrs", ""
Case "Programmer User"
Ap_CodePermissionNoAccess
Ap_CodePermissionProgrammingUser
End Select
DoCmd.AddMenu "&Log Off", "MacLogoff", ""
End Sub
ثانيا بالنسبه لحماية الجداول من خلال الاستعلام , اذا كان لابد من اضافة ااسماء الجداول و الاستعلامات الى جدول الجداول , هنا أعتقد لو كان عندنا خمسين جدول و مئة استعلام الأمر صعب , ممكن هنا استخدام الاستعلام التالي منقول عن الأستاذ رضا عقيل و هو يبين اسماء الجداول و الاستعلامات الموجوده في الملف
SELECT DISTINCT MSysObjects.Name, IIf([type]=1 Or [type]=6,"Table","Query") AS ObjectType, Left$([Name],1) AS Expr1, Left$([Name],4) AS Expr2, MSysObjects.Type, MSysObjects.Flags, MSysObjects.Connect, MSysObjects.Database, MSysObjects.DateCreate, MSysObjects.DateUpdate, MSysObjects.ForeignName
FROM MSysObjects WHERE (((Left$([Name],1)) Not Like "~" And (Left$([Name],1)) Not Like "{") AND ((Left$([Name],4)) Not Like "MSys") AND ((MSysObjects.Type)>-32000));
و للاشاره سيتم تثبيت برنامج الأستاذ رضا عقيل للاستفاده العامه
ثالثا :
نعم اقصد الحماية من نسخ من قاعدة بيانات الى أخرى
و الله يقويك على هذا الموضوع المهم و المفيد
تحياتي