المقال الخامس من السلسلة التفاعلية

الدليل الشامل لدوال أكسس المدمجة (Built-in Functions) مع مرجع الدوال التفاعلي 2026

الدليل التشغيلي الميداني لأهم دوال أكسس: دوال المجاميع (DLookup, DSum, DCount)، دوال معالجة القيم الفارغة Nz، الدوال المنطقية Switch و IIf، حساب أعمار الفواتير DateDiff، ومختبر تفاعلي لتوليد وتجهيز صيغ الدوال بدون أخطاء الاقتباس.

1. دوال المجاميع المجالّية (Domain Aggregate Functions)

تعتبر دوال المجاميع المجالّية من أقوى الأدوات في أكسس لجلب قيمة مفردة أو احتساب مجاميع من جدول أو استعلام دون الحاجة لربطه مباشرة بنموذجك. تتبع جميع هذه الدوال صياغة موحدة:

Syntax: Domain Aggregate Function
=DFunction("FieldName", "TableNameOrQueryName", "[OptionalCriteria]")

DLookup()

البحث عن قيمة محددة وإرجاعها (مثل جلب سعر بيع صنف، أو اسم العميل عبر رقمه التعريفي ID).

DSum()

حساب مجموع عمود محدد بشرط (مثل إجمالي مبيعات مندوب محدد أو إجمالي حركات الصنف الواردة).

DCount()

عد السجلات التي تحقق شرطاً (مثل معرفة عدد الفواتير غير المسددة لعميل معين).

DMax() & DMin()

استخراج أعلى أو أقل قيمة (مثل جلب أعلى رقم فاتورة مسجل لتوليد الرقم التالي تلقائياً).

2. السر الذهبي: صياغة معايير DLookup بدون أخطاء Syntax Error

أكثر من 80% من أخطاء المطورين المبتدئين في أكسس تنشأ من عدم الهروب الصحيح للنصوص وعلامات الاقتباس في معيار الدالة. القاعدة الأساسية:

قواعد علامات الاقتباس في المعايير (Criteria):
1. الأرقام: لا تحتاج لأي علامات اقتباس: "CustomerID = " & Me.cboCustID
2. النصوص: تحتاج إلى علامات اقتباس مفردة أو مزدوجة: "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

في برامج الفواتير والديون وشؤون الموظفين، لا غنى عن احتساب الفروق الزمنية بالشهور أو الأيام:

VBA & Expression: Invoice Aging and Service Years
' حساب عمر الفاتورة بالأيام منذ إصدارها
InvoiceAgeDays = DateDiff("d", [InvoiceDate], Date())

' حساب تاريخ استحقاق الفاتورة بعد 45 يوماً
DueDate = DateAdd("d", 45, [InvoiceDate])

' حساب مدة خدمة الموظف بالسنوات
YearsOfService = DateDiff("yyyy", [HireDate], Date())
مختبر تفاعلي حي

مختبر ومُنشئ صيغ دوال أكسس التفاعلي (Access Functions Formula Lab)

حدد نوع الدالة والحقول ومصدر المعيار، وسيقوم المختبر بإنشاء صيغة أكسس المحكمة والمهربة برمجياً بشكل سليم 100% لتضعها مباشرة في خاصية مصدر عنصر التحكم (Control Source) أو كود VBA.

الصيغة البرمجية الناتجة (جاهزة للنسخ):
=DLookup("SellingPrice", "tbl_Items", "ItemID = " & [cbo_ItemID])
تم تطبيق التنسيق الرقمي المباشر بدون علامات اقتباس مفردة لأن المفتاح رقمي (Long Integer).

5. الأسئلة الشائعة حول دوال أكسس المدمجة

ماذا يحدث إذا لم تجد دالة DLookup أي سجل يطابق الشرط؟
إذا لم يتحقق الشرط، ترجع دالة DLookup قيمة فارغة (Null). لذلك من أفضل الممارسات تغليفها دائماً بدالة Nz() لتجنب ظهور خطأ أو فراغ غير مرغوب: =Nz(DLookup("Price", "tbl_Items", "ID=" & [cboID]), 0).
كيف أحصل على الرقم التالي للفاتورة تلقائياً باستخدام DMax؟
يتم ذلك بكتابة المعادلة التالية في القيمة الافتراضية لحقل رقم الفاتورة: =Nz(DMax("InvoiceNumber", "tbl_Invoices"), 0) + 1. تضمن هذه المعادلة أنه إذا كان الجدول فارغاً تماماً سيبدأ من الرقم 1، وكل فاتورة جديدة ستحصل تلقائياً على الرقم التالي دون فجوات.
أحمد الشيمي

م. أحمد الشيمي

مطور برمجيات واستشاري حلول قواعد البيانات

أساعد المطورين والمؤسسات في تحسين صيغ ومعادلات أكسس، والتخلص من أخطاء الحسابات وبطء الشاشات، وتحويل النماذج اليدوية إلى برمجيات آلية فائقة السرعة.

تواصل لطلب استشارة أو حل برمجي متخصص

هل تواجه مشاكل في معادلات النماذج أو حسابات التقارير في برنامجك؟

نوفر لك دعماً فنياً وبرمجياً متخصصاً لمراجعة كافة دوال ومعادلات نظامك وضمان دقة الحسابات المالية والتنفيذ اللحظي بدون أي توقف.

تم النسخ بنجاح!