1. دوال المجاميع المجالّية (Domain Aggregate Functions)
تعتبر دوال المجاميع المجالّية من أقوى الأدوات في أكسس لجلب قيمة مفردة أو احتساب مجاميع من جدول أو استعلام دون الحاجة لربطه مباشرة بنموذجك. تتبع جميع هذه الدوال صياغة موحدة:
=DFunction("FieldName", "TableNameOrQueryName", "[OptionalCriteria]")
DLookup()
البحث عن قيمة محددة وإرجاعها (مثل جلب سعر بيع صنف، أو اسم العميل عبر رقمه التعريفي ID).
DSum()
حساب مجموع عمود محدد بشرط (مثل إجمالي مبيعات مندوب محدد أو إجمالي حركات الصنف الواردة).
DCount()
عد السجلات التي تحقق شرطاً (مثل معرفة عدد الفواتير غير المسددة لعميل معين).
DMax() & DMin()
استخراج أعلى أو أقل قيمة (مثل جلب أعلى رقم فاتورة مسجل لتوليد الرقم التالي تلقائياً).
2. السر الذهبي: صياغة معايير DLookup بدون أخطاء Syntax Error
أكثر من 80% من أخطاء المطورين المبتدئين في أكسس تنشأ من عدم الهروب الصحيح للنصوص وعلامات الاقتباس في معيار الدالة. القاعدة الأساسية:
1. الأرقام: لا تحتاج لأي علامات اقتباس:
"CustomerID = " & Me.cboCustID2. النصوص: تحتاج إلى علامات اقتباس مفردة أو مزدوجة:
"ItemCode = '" & Me.txtCode & "'"3. التواريخ: تحتاج إلى علامتي الهاشتاج:
"TransDate = #" & Format(Me.txtDate, "yyyy-mm-dd") & "#"
3. الدوال المنطقية والشرطية: Nz, Switch, IIf
دالة Nz() منقذة الحسابات
تحول القيم الفارغة (Null) فوراً إلى صفر أو نص فارغ: =Nz([SubTotal], 0) - Nz([Discount], 0)
دالة Switch() الذكية
بديل أنيق للـ IIf المتداخلة: =Switch([Score]>=90, "ممتاز", [Score]>=75, "جيد جداً", [Score]>=50, "مقبول")
دالة IIf() الشرطية
الفحص الشرطي الثنائي السريع: =IIf([RemainingBalance]<=0, "مسدد بالكامل", "عليه مستحقات")
4. دوال التواريخ الحسابية: DateDiff و DateAdd
في برامج الفواتير والديون وشؤون الموظفين، لا غنى عن احتساب الفروق الزمنية بالشهور أو الأيام:
' حساب عمر الفاتورة بالأيام منذ إصدارها
InvoiceAgeDays = DateDiff("d", [InvoiceDate], Date())
' حساب تاريخ استحقاق الفاتورة بعد 45 يوماً
DueDate = DateAdd("d", 45, [InvoiceDate])
' حساب مدة خدمة الموظف بالسنوات
YearsOfService = DateDiff("yyyy", [HireDate], Date())
مختبر ومُنشئ صيغ دوال أكسس التفاعلي (Access Functions Formula Lab)
حدد نوع الدالة والحقول ومصدر المعيار، وسيقوم المختبر بإنشاء صيغة أكسس المحكمة والمهربة برمجياً بشكل سليم 100% لتضعها مباشرة في خاصية مصدر عنصر التحكم (Control Source) أو كود VBA.
5. الأسئلة الشائعة حول دوال أكسس المدمجة
DLookup قيمة فارغة (Null). لذلك من أفضل الممارسات تغليفها دائماً بدالة Nz() لتجنب ظهور خطأ أو فراغ غير مرغوب: =Nz(DLookup("Price", "tbl_Items", "ID=" & [cboID]), 0).
=Nz(DMax("InvoiceNumber", "tbl_Invoices"), 0) + 1. تضمن هذه المعادلة أنه إذا كان الجدول فارغاً تماماً سيبدأ من الرقم 1، وكل فاتورة جديدة ستحصل تلقائياً على الرقم التالي دون فجوات.