اخواني...
السلام عليكم ورحمة الله وبركاته..
هذا المقال منقول عن موقع Database Journal وكاتب المقال هو Danny Lesandrini
واليكم شرح للمقال ....
- يهدف الكاتب من هذا المقال الى عرض طريقة لتحسين اداء تطبيقات الاكسيس من خلال الاقتصار على استدعاء البيانات فقط وقت احتياج المستخدم لها.
- بدأ الكاتب بالاشارة الى سهولة انشاء النماذج الفرعية وذلك بسحب النموذج الفرعي ثم افلاته في النموذج الرئيسي Drag And Drop
ثم ضبط خواص الربط لحقول الاباء والابناء (الرئيسية والفرعية) 0000الى هنا والكلام جميل جداً
ولكن اذا كان الامر يتعلق بالعديد من النماذج الفرعية المرتبطة بالعديد من الجداول مع الاف السجلات ، فلنا ان نتصور حجم الصعوبة. - هنا تأتي فكرة المقال والتي تقوم عل مبدأ عدم استدعاء اية بيانات الا وقت الحاجة اليها فقط.
- وقد ارفق بالمقال مثال عبارة عن قاعدة بيانات بها نموذج رئيسي مقسم الى صفحات (السنة تبويب) كما بالصورة..

بالضغط على الصفحة (لسان التبويب) يظهر النموذج الفرعي الذي يعرض محتوياتها - تقوم فكرة المثال على عدم ربط النموذج الرئيسي باية نماذج فرعية الا من خلال الكود المرتبط بحدث "عند التغيير" .فلو قمت بفتح النموذج على طريقة العرض : تصميم لفوجئت بعدم وجود اية نماذج فرعية سوى كائن غير منضم وخاصية "مرئي" مضبوطة على الوضع "لا" ومكانه باعلى يمين النموذج كما بالصورة..

وباجراء الحدث (تغيير الصفحة) يعمل الكود على تغيير حجم وموقع هذا الكائن غير المنضم وربطه بالنموذج الفرعي الملائم.
اضغط هنا لتحميل المثال - لا يتبقى لنا سوى الحديث عن الكود ....ها هو الكود.
Private Sub tabPublisher_Change() On Error Resume Next Dim strSubformName As String Select Case Me.tabPublisher Case 0: strSubformName = "" Case 1: strSubformName = "sfrmAdditionalInfo" Case 2: strSubformName = "sfrmEmployeeInfo" Case 3: strSubformName = "sfrmPublisherTitles" Case Else: strSubformName = "" End Select If strSubformName = "" Then Me.objSubform.Visible = False Else Me.objSubform.SourceObject = strSubformName Me.objSubform.LinkMasterFields = "pub_id" Me.objSubform.LinkChildFields = "pub_id" Me.objSubform.Top = Me.lblAnchor.Top Me.objSubform.Left = Me.lblAnchor.Left Me.objSubform.Width = 0.95 * Me.tabPublisher.Width Me.objSubform.Height = 0.75 * Me.tabPublisher.Height Me.objSubform.Visible = True End If End Sub
- وكما نرى فان الكود مرتبط بالحدث "عند التغيير" للكائن المسمى tabPublisher وهو مجموعة الصفحات/السنة التبويب.
- يبدأ الكود بالعبارة الشهيرة On Error Resume Next اي عند حدوث خطأ انتقل للسطر التالي من الكود.
- وبعدها يتم تحديد المتغير الاساسي للكود عن طريق العبارة ...Dim strSubformName As String
حيث strSubformName هو اسم المتغير ، ونوعه سلسلة حرفية String - وبعده يأتي دور العبارة الشرطية Select Case المسئولة عن تحديد وتخزين اسم النموذج الفرعي الذي سيتم تخصيصه على الكائن objSubform
وعبارة الشرط هنا مرتبطه برقم الصفحة /لسان التبويب الذي سيتم التغيير اليه ... وللمزيد من الشرح للعبارة Select Case راجع المشاركة رقم 12 من هذا الموضوع
ونلاحظ ان العبارة Select Case هي الانسب والاسهل في حالتنا هذه.وخلاصة عملها هو تعيين اسم النموذج الفرعى الملائم للصفحة التي سيتم التغيير اليها / او عدم تعيين نموذج فرعي في حالة الصفحة الاولى (Case 0). - ناتج العبارة الشرطية السابقة اما عدم تعيين نموذج فرعي أو تعيين نموذج فرعي (ايا كان اسمه) .
- في حالة عدم التعيين سيظل الكائن objSubform مخفيا وسوف نستخدم لاجراء ذلك العبارة الشرطية "if"
If strSubformName = "" Then
Me.objSubform.Visible = False - في الحالة الاخرى (حالة تعيين نموذج فرعي) يتم تغيير حجم وموقع الكائن ليتناسب مع ابعاد الصفحة المشار اليها كما يتم تعيين حقول الربط الخاصة به
وهذا هو المكتوب بعد عبارة Else حتى نهاية الجملة الشرطية End If ثم نهاية الكود
- في حالة عدم التعيين سيظل الكائن objSubform مخفيا وسوف نستخدم لاجراء ذلك العبارة الشرطية "if"
تبقى لي ان ارفق لكم المقال الاصلي لمن اراد الاطلاع عليه.
هذا وما كان من توفيق فمن الله وما كان من خطأ او نسيان فمن نفسي ومن الشيطان.
والحمد لله رب العالمين.


