شرح مبسط لما تم تعديله :-
1. قمت بتعديل الكود لتعيين TempVars!UserLevelTemp بشكل ديناميكي بناءً على UserLevel الخاص بالمستخدم الحالي
2. تعديل الاستعلام في النموذج الفرعي frmq1 ليتعامل مع القيم المتغيرة في TempVars!UserLevelTemp
الخطوة 1 : في النموذج الرئيسي frmSearch ، قمت بتعديل الكود لتعيين TempVars!UserLevelTemp بشكل ديناميكي كما في الكود التالي بعد التعديل :-
Private Sub أمر1_Click()
Dim UserLevelTemp As Variant
UserLevelTemp = DLookup("[UserLevel]", "tbluser", "[UserNam]='" & Me.txtuser & "'")
TempVars!UserLevelTemp = UserLevelTemp
DoCmd.OpenForm "frmSearch"
End Sub
هنا يتم تعيين TempVars!UserLevelTemp مباشرة من قيمة UserLevel الخاصة بالمستخدم الحالي ، سواء كانت تحتوي على قيمة واحدة (مثل 2) أو قيم متعددة (مثل 1, 2) .
الخطوة 2 : تعديل الاستعلام في النموذج الفرعي frmq1 ليصبح :-
SELECT tblEmp.*, tblEmp.EmpLevel
FROM tblEmp
WHERE
InStr(TempVars!UserLevelTemp, tblEmp.EmpLevel) > 0;
شرح الاستعلام :-
الدالة InStr : تبحث عن وجود EmpLevel داخل TempVars!UserLevelTemp
إذا كانت النتيجة أكبر من 0 ، فهذا يعني أن EmpLevel موجود ضمن TempVars!UserLevelTemp
على سبيل المثال:
إذا كان TempVars!UserLevelTemp = "1, 2" و EmpLevel = 1 ، فإن InStr ستعيد 1 (لأن 1 موجود في "1, 2")
إذا كان TempVars!UserLevelTemp = "2" و EmpLevel = 1 ، فإن InStr ستعيد 0 (لأن 1 غير موجود في "2") ... وهكذا
اتمنى ان يكون الشرح وافي لما تم تعديله وتطبيقه .