سؤال

سأعيد صياغة سؤال سابق كنت قد نشرته:

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

1) اسم المستخدم 2) تاريخ البدء 3) تاريخ الانتهاء 4) النشاط 5) الساعات التي يقضيها

هل هناك طريقة للحصول على هذا النموذج بحيث تظهر مطالبة تلقائيًا عند فتحه من قبل المستخدم تجبرك على تحديد اسم المستخدم من قائمة المستخدمين؟بمجرد تحديد اسم المستخدم، فإن جميع السجلات التي تم إدخالها من خلال هذا النموذج تحتوي على حقل اسم المستخدم بالفعل (ما لم يتم إغلاق النموذج وإعادة فتحه مرة أخرى)؟

استنادًا إلى تحديد اسم المستخدم في الموجه، يجب أن يرتبط تبديل السجلات باستخدام أسهم "السجل السابق" و"السجل التالي" بدقة باسم المستخدم المحدد المحدد.

** هذا هو شكلي الحالي **

enter image description here

الخطوات المستخدمة لإنتاج الحل المذكور أدناه

1) احذف مربع التحرير والسرد المسمى "اسم المستخدم"
2) أضف مربع نص مخفي غير منضم وأطلق عليه اسم txUN
3) قم بإضافة كود VBA الذي تم تحميله أدناه ولكن قم بتغيير مرجع txtusername إلى user_full_name لأن هذا هو اسم العمود في الجدول الذي يجب أن يخزن هذه السجلات
4) أنشأ النموذج أدناه باستخدام مربع التحرير والسرد لأسماء المستخدمين وأطلق عليه اسم cbouusername
5) قم بتغيير مرجع frm_sample إلى [متخصص - إدخال الجدول الزمني]

هل كانت مفيدة؟

المحلول

الخيار، افتح نموذج اسم المستخدم أولاً:

أنشئ نموذجًا كما هو موضح أدناه باستخدام مربع نص مخفي باسم txtUN.:

enter image description here

مع الكود التالي خلف:

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.

enter image description here

مع الكود التالي خلف:

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 وفقاً لذلك .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top