-->

تقنية ، إنترنت ، برامج ، إسلامية ، إقتصادية ، إجتماعية ، تعليمية ، رياضية

سُبْحَانَ اللَّهِ وَبِحَمْدِهِ ... سُبْحَانَ اللَّهِ العَظَيم

الجمعة، 31 أكتوبر 2014

مقدمة للبرمجة باستخدام VBA في Access [ الأحداث وإجراءات الأحداث]

مقدمة للبرمجة باستخدام VBA في Access [الأحداث وإجراءات الأحداث]

الأحداث وإجراءات الأحداث
يتم كتابة التعليمات البرمجية لـ (Visual Basic for Applications (VBA في وحدات تسمى إجراءات. يحتوي الإجراء على سلسلة من عبارات Visual Basic التي تنفذ عملية أو تحسب قيمة. سنتعرف في الجزء الأول هذا الدرس على المصطلحات والمفاهيم العامة للإجراءات عموماً في الـAccess، وفي الجزء الثاني سنقوم سوياً عملياً ومرئياً بتنفيذ الإجراءات التي أستخدمت في شرح أمثلة الجزء الأول إن شاء الله :)
في البداية: ما هو إجراء الحدث؟
إجراء الحدث هو: إجراء يتم تشغيله استجابة لبدء تشغيل حدث من قبل المستخدم أومن قبل التعليمات البرمجية للبرنامج، أويتم تشغيله بواسطة النظام.
حسناً، وما هو الحدث؟
الحدث هو حدث محدد يقع في -أو مع- كائن معين. يمكن أن يستجيب Microsoft Access لأحداث مختلفة: نقرات الماوس وتغييرات في بيانات وفتح نماذج أو إغلاقها وأشياء أخرى كثيرة، يمكنك رؤيتها عند عرض تبويب Event من خصائص أي كائن في قاعدة البيانات، فمثلاً: عند عرض هذا التبويب في أحد نماذج Form قاعدة بياناتك، سيظهر لك كما في الصورة التالية:
نعم، من هذه القائمة الطويلة والمليئة بالأحداث يمكنك اختيار الحدث الذي تريد تنفيذ بعض الإجراءات (تعليمات برمجية) عند حدوثه. لابد من التنويه هنا إلى أن هذه القائمة تختلف من كائن إلى كائن في الـAccess.
تذكر أنك باستخدام إجراء حدث، يمكنك إضافة الاستجابة المخصصة (الأكواد البرمجية) الخاصة بك إلى حدث يقع في نموذج أو تقرير أو عنصر تحكم، عن طريق اختيار [Event Procedure] ثم الضغط على النقاط الثلاث كما توضح الصورة التالية:


هنا، قررنا إضافة إجراء وحددنا أن الحدث الذي يجرى الإجراء مصاحباً معه هو On Load. بعد الضغط على مربع النقاط الثلاث ستُفتح لك نافذة Microsoft Visual Basic يمكنك فيها كتابة التعليمات البرمجية التي تناسبك كما سنوضحها في الجزء الثاني يلي إن شاء الله.

إذن ما هو الإجراء؟
الإجراء عبارة عن وحدة من التعليمات البرمجية لـ Microsoft Visual Basic أو يمكننا القول (Visual Basic for Applications (VBA ما دمنا نتحدث عن الـAccess، فكلاهما في حديثنا وجهان لعملة واحدة :)
يحتوي الإجراء على سلسلة من العبارات التي تنجز عملية أو تحسب قيمة. على سبيل المثال، يستخدم إجراء الحدث التالي أسلوب OpenForm لفتح نموذج (الموظفين):

Private Sub Form_Load( )
DoCmd.OpenForm "بيانات الأعضاء"
End Sub

يوجد نوعان من الإجراءات: الإجراءات الفرعية وإجراءات الدالة (الإجراء دالة)، يأتي توضيحهما في ما يلي:
  • الإجراءات الفرعية Sub Procedure:
الإجراءات الفرعية التي تنجز عملية أو سلاسل من العمليات لكنها لا ترجع قيمة. يمكنك إنشاء الإجراءات الفرعية الخاصة بك أو استخدام قوالب إجراء الحدث الذي ينشئه Microsoft Access. يبدأ الإجراء الفرعي بالعبارة Sub وينتهي بالعبارة End Sub.
يوجد لكل نموذج أو تقرير في قاعدة البيانات وحدة نمطية للنموذج أو وحدة نمطية للتقرير مضمنة وهي تحتوي على قوالب جاهزة لإجراء الحدث يمكنك فيها إضافة التعليمات البرمجية التي تعمل استجابة للأحداث التي تقع في النموذج أو التقرير أو عناصر التحكم (كما وضحت الصورة الأولى والصورة الثانية في هذا الدرس، وكما سيوضح الجزء الثاني من الدرس إن شاء الله).
عندما يتعرف Microsoft Access على حدث تم وضع إجراء له في نموذج أو تقرير أو عنصر تحكم، يتم تشغيل إجراء الحدث المطلوب تلقائياً للكائن فور حدوث الحدث فيه.


  • إجراءات الدالة Function Procedure:
الإجراءات دالة (غالباً ما تسمى دالة) تُرجع قيمة، مثل نتيجة حساب. تتضمن Microsoft Visual Basic العديد من الدالات المضمنة يمكنك إنشاء دالة باستخدام العبارة Function وإنهاؤها بالعبارة End Function. كما يمكنك استخدام الدوال المبنية مسبقاً في اللغة، على سبيل المثال، ترجع الدالة Now التاريخ والوقت الحالي.
نتيجة لأن الدالة تقوم بإرجاع قيم، يمكنك استخدامها في أي تعبيرات برمجية في العديد من الأماكن في Microsoft Access أو في Module البرمجة لـ Visual Basic أو في العديد من إعدادات الخصائص أو في تعبير المعايير في عامل تصفية أو استعلام.
مثال:
يُرجع المثال التالي لإجراء دالة FirstOfNextMonth تاريخ اليوم الأول من الشهر التالي للتاريخ الحالي:


Function FirstOfNextMonth( )FirstOfNextMonth = DateSerial(Year(Now), Month(Now) + 1, 1)
End Function
تحسب هذه الدالة النتيجة باستخدام الدالات DateSerial وYear وNow وMonth الـمبنية مسبقاً فيVBA.
بعد إنشاء هذه الدالة، يمكنك استخدامها في التعبير في أي مكان في Microsoft Access. على سبيل المثال، يمكنك تحديد أن يعرض مربع النص اليوم الأول من الشهر بعد التاريخ الحالي كقيمة الافتراضية للمربع بإعداد الخاصية قيمة افتراضية الخاصة بعنصر تحكم مربع نص للتعبير التالي في صفحة الخاصية:

=FirstOfNextMonth( )

ملاحظة:لاستخدام أي دالة في الإعداد لخاصية، يجب أن تكون الدالة موجودة ومعرفة في الوحدة النمطية للنموذج Form Module أو للتقرير Report Module أو في الوحدة النمطية القياسية Standard Module. لا يمكنك استخدام دالة عامة غير معرفة في فئة الوحدة النمطية Class Module كإعداد لخاصية نموذج أو تقرير.


أمثلة استخدام إجراء الحدث كإستجابة لحدوث هذا الحدث
بعد أن تعرفنا على أنواع الإجراءات في الـAccess في الجزء الأول من هذا الدرس، نطبق معاً في الجزء الثاني جميع الأمثلة التي شرحناها في الجزء الأول :)
في البداية لابد أن تعلم إنك عندما تنشئ إجراء حدث لأحد الكائنات، يضيف Microsoft Access قالب إجراء حدث باسم الحدث والكائن إلى الوحدة النمطية الخاصة بالنموذج أو التقرير. كل ما تحتاج فعله هو إضافة تعليمة برمجية تستجيب بالطريقة التي تريدها إلى الإجراء الذي تريده عندما يقع الحدث في هذا النموذج أو التقرير.
والآن إلى التطبيق العملي :)
المثال الأول: الإجراء الفرعي Sub Procedure:
والآن، لنطبق المثال الأول الذي شرحناه بالصور في الجزء الأول، ولنطبقه على قاعدة البيانات Member التي أنشأتموها في الدروس السابقة في هذا القسم:
افترض أننا نريد فتح نموذج "بيانات الأعضاء" عندما يُفتح موذج "إجمالي الأعضاء من كل دولة" - حيث أن كلا النموذجين قمنا ببناءهما في قاعدة بياناتنا في الدروس السابقة-، لعمل ذلك اتبع الخطوات التالية:

  1. من خصائص نموذج "إجمالي الأعضاء من كل دولة" اختر تبويب Event.
  2. عند الحدث On Load قف بالماوس، ستظهر لك قائمة منسدلة بها خيار واحد فقط ألا وهو: Event Procedure، قم بتحديده.
  3. اضغط المربع الذي يحوي على ثلاث نقاط، كما توضح الصورة:
  4. ستفتح لك نافذة VBA وهي نافذة الوحدة النمطية التي يخصصها الـAccess لكل نموذج، وستجد أنها تحوي على تعريف لبداية الحدث ونهايته على النحو التالي:
    Private Sub Form_Load( )

    End Sub
  5. قم بإضافة السطر الذي يحوي على أمر فتح نموذج بيانات الأعضاء كما توضح الصورة التالية:
  6. الآن، اغلق نافذة VBA وقن بحفظ التغييرات التي أجريناها على نموذج "إجمالي الأعضاء من كل دولة" ثم جرب عمل الإجراء الذي كتبناه، افتح النموذج، ستجد أنه بمجرد حدوث Load له سيتم تنفيذ إجراءنا وسيظهر لك نموذج "بيانات الأعضاء"، كما توضح الصورة:


المثال الثاني: إجراء الدالة Function Procedure:
هذا المثال يمكنك تطبيقه على أي قاعدة بيانات موجودة لديك، أو حتى قاعدة بيانات جديدة لأننا هنا سنعرف دالة في الـAccess ومن ثم سنستخدمها في نموذج.
نعم بالضبط، سنستخدم الدالة
FirstOfNextMonth التي تطرقنا لها في الجزء الأول كي تقوم بكتابة تاريخ اليوم الأول من الشهر التالي للتاريخ الحالي كقيمة في مربع نص داخل فورم جديد سننشأه سوياً. النتيجة النهائية ستظهر لنا كما توضح الصورة:


سؤال: أين يتم تعريف أو كتابة الدالة؟
أجبنا على هذا السؤال في آخر الجزء الأول، وسنعيد الإجابة هنا: يمكنك تعريف الدالة بصورة عامة في
في الوحدة النمطية القياسية العامة Standard Module، أو يمكنك تعريفها في الوحدة النمطية الخاصة للنموذج Form Module أو للتقرير Report Module. تذكر أنه لا يمكنك استخدام دالة عامة غير معرفة في فئة الوحدة النمطية Class Module كإعداد لخاصية في نموذج أو تقرير.

سنستخدم الطريقة العامة لتعريف هذه الدالة وسنستخدم أبسط طريقة لإسناد القيمة التي ترجعها إلى نموذجنا، كما يلي:
أولا: تعريف الدالة:
  1. افتح أي قاعدة بيانات موجودة لديك، ثم حدد أي Form موجود فيها، ثم إذهب إلى قائمة عرض View ثم إلى code كما توضح الصورة:
    أو يمكنك أن تقوم مباشرة بالضغط على رمز code على شريط الأدوات Database كما توضح الصورة:
    ملاحظة: لا تقلق حول اختيار أي Form للوقوف عليه، لأن الدالة ستعرف بشكل عام.
  2. ستفتح لك نافذة VBA قم بكتابة الدالة التالية فيها:
    Function FirstOfNextMonth( )
    FirstOfNextMonth = DateSerial(Year(Now), Month(Now) + 1, 1)
    End Function
  3. أغلق نافذة VBA.
ثانياً: ربط الدالة بالنموذج:
  1. قم بإنشاء نموذج جديد في عرض التصميم Design View.
  2. قم بإضافة أداة مربع نص Text Box إليه.
  3. غيّر عنوان مربع النص إلى "التاريخ المفترض للتخرج من الجامعة" أو أي عنوان آخر كما يحلو لك.
  4. من خصائص مربع النص إذهب إلى تبويب Data ثم أضف الكود التالي إلى خاصية "قيمة افتراضية Default Value" كما توضح الصورة:
    =FirstOfNextMonth( )
    ملاحظة: يمكنك وضع الكود في خاصية Control Source كذلك.
  5. احفظ النموذج بأي اسم وليكن Form1 مثلاً.
  6. اعرض النموذج، ستجد أنه يضيف القيمة المرجعة من الدالة إلى الـText Box تلقائياً كقيمة افتراضية :)
ملاحظات:
  • صحيح أننا لم نتحدث بالتفصيل عن الدوال المبنية مسبقاً في الـVBA والتي استخدمناها في مثالنا مثل DateSerial وYear وNow وMonthولكن لا تقلق يمكنك تعلمها بسهولة.
  • لاختبار التعبيرات البرمجية التي تكتبها في أي إجراء مباشرة في نافذة Microsoft Visual Basic أو VBA، يمكنك إظهار نافذة الترجمة الفورية Immediate window من قائمة عرض View أو بالضغط على Ctrl+G. وإليك طريقة التعامل معها:
    1- اكتب فيها علامة الاستفهام (؟) ثم اكتب التعبير الذي تريد اختبار صحته، ثم اضغط Enter.
    2- ستعيد لك قيمة التعبير أو الدوال التي استخدمتها، انظر للصورة التالية كي تشاهد كيف تعاملنا معها في مثالنا الحالي:

-=-=-=-=-=-=-=-=-=-
المصدر: سوالم للكمبيوتر
جزى الله خيرا كل من ساهم فيه

ليست هناك تعليقات:

إرسال تعليق