نموذج وصول MS حيث يتم تحديد اسم المستخدم من القائمة
-
20-12-2019 - |
سؤال
سأعيد صياغة سؤال سابق كنت قد نشرته:
لقد قمت ببناء نموذج في الوصول يسمح للمستخدمين بإدخال ساعات عملهم حسب النشاط (أي:معالجة المعاملات، وقت المشروع، الإجازة وما إلى ذلك).الحقول في النموذج هي:
1) اسم المستخدم 2) تاريخ البدء 3) تاريخ الانتهاء 4) النشاط 5) الساعات التي يقضيها
هل هناك طريقة للحصول على هذا النموذج بحيث تظهر مطالبة تلقائيًا عند فتحه من قبل المستخدم تجبرك على تحديد اسم المستخدم من قائمة المستخدمين؟بمجرد تحديد اسم المستخدم، فإن جميع السجلات التي تم إدخالها من خلال هذا النموذج تحتوي على حقل اسم المستخدم بالفعل (ما لم يتم إغلاق النموذج وإعادة فتحه مرة أخرى)؟
استنادًا إلى تحديد اسم المستخدم في الموجه، يجب أن يرتبط تبديل السجلات باستخدام أسهم "السجل السابق" و"السجل التالي" بدقة باسم المستخدم المحدد المحدد.
** هذا هو شكلي الحالي **
الخطوات المستخدمة لإنتاج الحل المذكور أدناه
1) احذف مربع التحرير والسرد المسمى "اسم المستخدم"
2) أضف مربع نص مخفي غير منضم وأطلق عليه اسم txUN
3) قم بإضافة كود VBA الذي تم تحميله أدناه ولكن قم بتغيير مرجع txtusername إلى user_full_name لأن هذا هو اسم العمود في الجدول الذي يجب أن يخزن هذه السجلات
4) أنشأ النموذج أدناه باستخدام مربع التحرير والسرد لأسماء المستخدمين وأطلق عليه اسم cbouusername
5) قم بتغيير مرجع frm_sample إلى [متخصص - إدخال الجدول الزمني]
المحلول
الخيار، افتح نموذج اسم المستخدم أولاً:
أنشئ نموذجًا كما هو موضح أدناه باستخدام مربع نص مخفي باسم txtUN
.:
مع الكود التالي خلف:
Private Sub Form_Current()
If VBA.Strings.Len(txtUN & "") = 0 Then DoCmd.OpenForm "frm_UserName", acNormal, , , , acDialog
If VBA.Strings.Len(txtUsername & "") = 0 Then txtUsername = txtUN
End Sub
ثم قم بإنشاء نموذج مثل أدناه.قم بتسمية القائمة المنسدلة cboUserName
.
مع الكود التالي خلف:
Private Sub cboUserName_AfterUpdate()
Forms!frm_Sample.txtUN = cboUserName
End Sub
Private Sub Form_Unload(Cancel As Integer)
If (VBA.Strings.Len(cboUserName & "") = 0) Then
MsgBox "You must supply a user name before proceeding.", , "ERROR: Missing Info."
Cancel = True
End If
End Sub
عندما تفتح frm_Sample
وسوف تحقق لمعرفة ما إذا كان txtUN
لديه قيمة.إذا لم يكن الأمر كذلك فسيتم فتحه frm_UserName
كحوار.يجب على المستخدم تحديد اسم مستخدم وإغلاق النموذج.عند الانتقال إلى سجل آخر إذا txtUsername
فارغ ثم يتم تعيينه أيا كان txtUN
يتضمن.
نصائح أخرى
يمكنك تمرير اسم مستخدم Windows الفعلي تلقائيًا إلى النموذج الخاص بك ومن خلال البحث في الجدول، يمكنك الحصول على اسم المستخدم المتعلق بالتطبيق الخاص بك.
ربما لديك بالفعل جدول (دعنا نقول table tblUsers
مع حقل يحتوي على اسم المستخدم الخاص بك، على سبيل المثال fldUsername
) في قاعدة بياناتك التي تخزن جميع أسماء المستخدمين الصالحة.ما عليك سوى إضافة عمود إلى هذا الجدول (يسمى fldDomainUser
) الذي يحتوي على المجال و/أو اسم المستخدم الخاص بالمستخدم الذي قام بتسجيل الدخول.
Environ$("userdomain") + "\" + Environ$("username")
سيُرجع سلسلة تحتوي على المجال الخاص بك، و"\" واسم المستخدم الفعلي الخاص بك.
الوظيفة
dlookup ("[fldUsername]","[tblUsers]","[fldDomainUser]='"+cstr(Environ$("userdomain") + "\" + Environ$("username"))+"'")
سيعود اسم المستخدم.
قم بتعيين اسم المستخدم الفعلي الخاص بك في النموذج before_insert
حدث
Private Sub Form_BeforeInsert(Cancel As Integer)
[ctrlUsername] = Environ$("userdomain") + "\" + Environ$("username")
End Sub
بحيث تحتوي جميع السجلات الجديدة التي تم إنشاؤها تلقائيًا على اسم المستخدم الخاص بك.
لا تنس تصفية النموذج الخاص بك أو الخاص به Recordsource
وفقاً لذلك .