فؤاد الدلوي قام بنشر الثلاثاء at 09:06 قام بنشر الثلاثاء at 09:06 السلام عليكم ورحمة الله وبركاته. اساتذتي الاعزاء: نموذج form فيه حقول NAM ومربع سرد اسم الصنف فيه قيم (a-b-c) ممكن مساعدتي عندما اختار احد هذه القيم من مربع السرد في السجل المحدد يفتح نموذج باسم هذه القيمة على السجل المحدد من nam بمعنى عندما اختار قيمة (a) من السجل رقم (3) يفتح نموذج a على السجل 3 فقط شكرا test.accdb
تمت الإجابة ابو عارف قام بنشر الثلاثاء at 11:09 تمت الإجابة قام بنشر الثلاثاء at 11:09 و عليكم السلام و رحمة الله و بركاته 2 ساعات مضت, فؤاد الدلوي said: ممكن مساعدتي عندما اختار احد هذه القيم من مربع السرد في السجل المحدد يفتح نموذج باسم هذه القيمة على السجل المحدد من nam تفضل اليك التعيل إن شاء الله يكن حسب المطلوب test (5).accdb 1
Foksh قام بنشر الثلاثاء at 11:54 قام بنشر الثلاثاء at 11:54 (معدل) وعليكم السلام ورحمة الله وبركاته .. وكالعادة ننوه ونذكر وننصح أخواننا في طلباتهم ومشاركاتهم أن يبتعدوا عن المسميات التي باللغة العربية والتي تحتوي مسافات ( أكثر من كلمة ) ولكن بلا جدوى ، و والله أن النصيحة ليست لي أو لأي شخص يقوم بتقديم حل لأي مشكلة بقدر ما هي ستعود بالفائدة التعليمية وصحة ودقة النتائج العملية لصاحب المشاركة والملف .. على العموم ، قد أعجبتني فكرة الأستاذ @ابو عارف ، فهي بسيطة و تلبي الحاجة المطلوبة بشكل جيد ، ولي رغبة في مشاركته أفكاره بعدة حلول ، أذكر منها حلين في مرفقين اثنين . الأول في الملف المرفق (test (1)) ، في حدث بعد التحديث للكومبوبوكس :- Private Sub اسم_الصنف_AfterUpdate() Dim selectedForm As String Dim currentID As Long selectedForm = Me.اسم_الصنف.Value currentID = Me.ID.Value If Not IsNull(selectedForm) Then DoCmd.OpenForm selectedForm, acNormal, , , , , currentID Else MsgBox "يرجى اختيار قيمة صحيحة!", vbExclamation End If End Sub بحيث يتم تطبيق الفلترة في حدث عند التحميل للنماذج الـ 3 = A,B,C التي ذكرها أخونا الكريم في طلبه :- Private Sub Form_Load() Dim recordID As Long If Not IsNull(Me.OpenArgs) Then recordID = CLng(Me.OpenArgs) Me.Filter = "[ID] = " & recordID Me.FilterOn = True If Not IsNull(Me!نموذج_فرعي_qa) Then Me!نموذج_فرعي_qa.Form.Filter = "[ID] = " & recordID Me!نموذج_فرعي_qa.Form.FilterOn = True End If Else MsgBox "لم يتم تمرير رقم السجل بشكل صحيح", vbExclamation End If End Sub الثاني في الملف المرفق (test (2)) ، في حدث بعد التحديث للكومبوبوكس :- Private Sub اسم_الصنف_AfterUpdate() Dim selectedForm As String Dim currentID As Long selectedForm = Me.اسم_الصنف.Value currentID = Me.ID.Value If Not IsNull(selectedForm) Then DoCmd.OpenForm selectedForm, acNormal, , , , , currentID Else MsgBox "يرجى اختيار قيمة صحيحة", vbExclamation + vbMsgBoxRight End If End Sub وتم نقل الكود لضمان عدم تكراره في النماذج الى وحدة نمطية مع إجراء بعض التعديلات ، بحيث يصبح الكود منفصلاً كالتالي :- Public Sub ApplyRecordFilter(frm As Form, Optional subFormName As String = "", Optional recordID As Variant) If IsNull(recordID) Or recordID = "" Then MsgBox "لم يتم تمرير رقم السجل بشكل صحيح", vbExclamation + vbMsgBoxRight Exit Sub End If frm.Filter = "[ID] = " & recordID frm.FilterOn = True If subFormName <> "" Then On Error Resume Next If Not IsNull(frm.Controls(subFormName)) Then frm.Controls(subFormName).Form.Filter = "[ID] = " & recordID frm.Controls(subFormName).Form.FilterOn = True Else MsgBox "لم يتم العثور على النموذج الفرعي " & subFormName, vbExclamation + vbMsgBoxRight End If On Error GoTo 0 End If End Sub والإستدعاء يكفينا في النماذج الفرعية كالتالي :- Private Sub Form_Load() ApplyRecordFilter Me, "نموذج_فرعي_qa", Me.OpenArgs End Sub قمنا بتمرير قيمة الـ ID إلى النموذج الرئيسي باستخدام OpenArgs لأنها طريقة آمنة وموثوقة بالنسبة لي ، ثم سنطبق الفلتر داخل حدث تحميل النموذج ( On Load ) مباشرة بعد أن يفتح بالكامل وفي الفكرتين لن نحتاج أي روابط بين الحقول ( Link Master Fields & Link Child Fields ) لأننا سنعتمد على الفلتر يدوياً . المرفقات للطريقتين :- test (1).accdb test (2).accdb تم تعديل الثلاثاء at 11:58 بواسطه Foksh تنسيق المشاركة 1
فؤاد الدلوي قام بنشر الأربعاء at 08:15 الكاتب قام بنشر الأربعاء at 08:15 شكراً للاساتذة @Foksh و @ابو عارف بما قدماه من معلومات قيمة
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.