1. دورة حياة أحداث النماذج (Form Event Life Cycle)
برمجة أكسس هي برمجة موجهة بالأحداث (Event-Driven Programming). لكي تكتب كوداً احترافياً وتمنع تضارب الشاشات، يجب أن تفهم الترتيب الزمني الصارم للأحداث:
1. Form_Open: أول حدث ينطلق (يقبل الإلغاء Cancel = True). يُستخدم للتحقق من صلاحية المستخدم؛ فإذا لم يمتلك الصلاحية يُلغى فتح النموذج فوراً.
2. Form_Load: ينطلق بعد اكتمال فتح النموذج وقراءة السجلات. يُستخدم لضبط إعدادات القوائم والألوان.
3. Form_Current: ينطلق في كل مرة ينتقل فيها المستخدم إلى سجل جديد أو ينقر على زر التالي/السابق.
4. Form_BeforeUpdate: صمام الأمان الوحيد للتحقق من اكتمال وصحة البيانات قبل كتابتها في الجدول. يقبل Cancel = True لمنع الحفظ.
5. Form_AfterUpdate: ينطلق بعد نجاح الحفظ في قاعدة البيانات. يُستخدم لتحديث الإجماليات أو تسجيل الحركة في سجل التدقيق.
2. المعالجة الفائقة لمجموعات السجلات عبر DAO Recordset
تعتبر مكتبة DAO الخيار الأسرع والأنسب لمحرك ACE في أكسس. فيما يلي كود احترافي لفتح سجلات وإضافة حركة جديدة مع التحكم في الأخطاء:
Public Sub AddInventoryLog(ByVal itemID As Long, ByVal qty As Double, ByVal transType As String)
On Error GoTo ErrorHandler
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("tbl_Stock_Transactions", dbOpenDynaset, dbAppendOnly)
rs.AddNew
rs!TransDate = Now()
rs!ItemID = itemID
rs!Quantity = qty
rs!TransType = transType
rs.Update
CleanExit:
On Error Resume Next
If Not rs Is Nothing Then rs.Close: Set rs = Nothing
Set db = Nothing
Exit Sub
ErrorHandler:
MsgBox "حدث خطأ أثناء تسجيل الحركة المخزنية: " & Err.Description, vbCritical, "خطأ بيانات"
Resume CleanExit
End Sub
3. بناء سجل التدقيق ومراقبة العمليات (Audit Trail)
في الأنظمة المالية والمخزنية، من غير المقبول أن يقوم موظف بتعديل سعر بيع أو حذف فاتورة دون أن يعرف المدير من قام بالتعديل، وفي أي وقت، وما هي القيمة السابقة والقيمة الجديدة. يتم بناء ذلك عبر دالة عامة تفحص خاصية OldValue لعناصر التحكم في حدث BeforeUpdate للنموذج.
4. إعادة ربط الجداول الشبكية تلقائياً عند التشغيل (Auto Relinking)
عند توزيع ملف الواجهة الأمامية (Front-End) على أجهزة الموظفين، قد يتغير مسار الخادم أو عنوان IP المشترك. بدلاً من ظهور رسالة فشل الربط، يتم وضع كود في شاشة البداية يفحص اتصال جدول اختباري، وفي حال انقطاعه يفتح نافذة لاختيار مسار ملف البيانات الخلفي ويحدث خاصية TableDef.Connect فوراً.
مُوَلّد ومُحاكي أكواد Access VBA التفاعلي (Access VBA Automation Studio)
اختر المهمة البرمجية التي تحتاجها في مشروعك، وستقوم الأداة بتوليد الكود البرمجي الكامل مع التعليقات التوضيحية ونقاط الربط بالأحداث الصحيحة.
كود سجل تدقيق وتتبع التعديلات (Audit Trail)
Form_BeforeUpdate لمراقبة أي حقل تم تغييره وتسجيل القيمة القديمة والجديدة واسم المستخدم في جدول التدقيق.
' كود VBA سيظهر هنا
5. الأسئلة الشائعة في برمجة أكسس وأكواد VBA
#If VBA7 Then مع إضافة الكلمة المفتاحية PtrSafe ونوع البيانات LongPtr للمقابض وعناوين الذاكرة، مما يضمن عمل نفس الكود البرمجي على كافة أجهزة الموظفين سواء كان نظامهم 32 أو 64 بت دون أي تعديل.
Set يجب إغلاقه صراحة بـ rs.Close ثم تفريغ مؤشره من الذاكرة بـ Set rs = Nothing و Set db = Nothing داخل مقطع تنظيف موحد (CleanExit) حتى لو حدث خطأ برمجي.