دليل دوال الاستعلامات في Microsoft Access

مرجع شامل وتفاعلي لأهم الدوال المستخدمة في استعلامات آكسس مع أمثلة عملية

1. دوال النصوص (Text Functions)

دوال الأساسية للنصوص

Left(string, length)

الوظيفة: استخراج عدد محدد من الأحرف من بداية النص.

SELECT Left("محمد أحمد", 3) AS النتيجة
-- النتيجة: "محم"

Right(string, length)

الوظيفة: استخراج عدد محدد من الأحرف من نهاية النص.

SELECT Right("محمد أحمد", 4) AS النتيجة
-- النتيجة: "أحمد"

Mid(string, start, length)

الوظيفة: استخراج جزء من النص بدءاً من موضع محدد.

SELECT Mid("قاعدة البيانات", 6, 8) AS النتيجة
-- النتيجة: "البيانات"

Len(string)

الوظيفة: حساب طول النص (عدد الأحرف).

SELECT Len("قاعدة البيانات") AS الطول
-- النتيجة: 12

Trim(string)

الوظيفة: إزالة المسافات من بداية ونهاية النص.

SELECT Trim("  مرحبا  ") AS النتيجة
-- النتيجة: "مرحبا"

دوال البحث والاستبدال

InStr(string, substring)

الوظيفة: البحث عن موضع أول ظهور لنص فرعي داخل النص.

SELECT InStr("قاعدة البيانات", "البيانات") AS الموضع
-- النتيجة: 6

Replace(string, find, replace)

الوظيفة: استبدال جزء من النص بجزء آخر.

SELECT Replace("قاعدة البيانات", "البيانات", "المعلومات") AS النتيجة
-- النتيجة: "قاعدة المعلومات"

2. دوال الأرقام (Numeric Functions)

دوال الحساب الأساسية

Abs(number)

الوظيفة: إرجاع القيمة المطلقة للرقم (بدون إشارة سالبة).

SELECT Abs(-15) AS النتيجة
-- النتيجة: 15

Round(number, decimals)

الوظيفة: تقريب الرقم إلى عدد محدد من الخانات العشرية.

SELECT Round(15.456, 2) AS النتيجة
-- النتيجة: 15.46

Int(number)

الوظيفة: إزالة الجزء العشري والتقريب للأسفل لأقرب عدد صحيح.

SELECT Int(15.89) AS النتيجة
-- النتيجة: 15

3. دوال التواريخ والوقت (Date/Time Functions)

دوال الحصول على التاريخ والوقت

Date()

الوظيفة: الحصول على التاريخ الحالي للنظام.

SELECT Date() AS التاريخ_الحالي
-- النتيجة: (مثال) 09/07/2025

Time()

الوظيفة: الحصول على الوقت الحالي للنظام.

SELECT Time() AS الوقت_الحالي
-- النتيجة: (مثال) 14:30:25

Now()

الوظيفة: الحصول على التاريخ والوقت الحاليين معاً.

SELECT Now() AS التاريخ_والوقت
-- النتيجة: (مثال) 09/07/2025 14:30:25

دوال الحساب بالتواريخ

DateAdd(interval, number, date)

الوظيفة: إضافة فترة زمنية (يوم, شهر, سنة) إلى تاريخ محدد.

SELECT DateAdd("d", 30, Date()) AS بعد_30_يوم
-- يضيف 30 يوماً للتاريخ الحالي

DateDiff(interval, date1, date2)

الوظيفة: حساب الفرق الزمني بين تاريخين.

SELECT DateDiff("yyyy", [تاريخ_الميلاد], Date()) AS العمر
-- يحسب العمر بالسنوات

4. دوال التحويل (Conversion Functions)

CStr(expression)

الوظيفة: تحويل أي قيمة إلى نوع بيانات نصي (String).

SELECT CStr(125) & " ريال" AS السعر_كنص
-- النتيجة: "125 ريال"

CInt(expression)

الوظيفة: تحويل قيمة إلى نوع بيانات رقم صحيح (Integer).

SELECT CInt("125.5") AS رقم_صحيح
-- النتيجة: 126 (يتم التقريب)

CDate(expression)

الوظيفة: تحويل نص أو رقم إلى نوع بيانات تاريخ (Date).

SELECT CDate("2025-07-09") AS تاريخ
-- النتيجة: 09/07/2025

5. دوال الشروط والمنطق (Conditional Functions)

IIf(condition, true_value, false_value)

الوظيفة: إرجاع قيمة إذا كان الشرط صحيحاً، وقيمة أخرى إذا كان خاطئاً.

SELECT IIf([الكمية] > 0, "متوفر", "غير متوفر") AS الحالة
-- يرجع "متوفر" لو الكمية أكبر من صفر

Switch(expr1, val1, expr2, val2, ...)

الوظيفة: تقييم سلسلة من الشروط وإرجاع القيمة المرتبطة بأول شرط صحيح.

SELECT Switch(
    [الدرجة] >= 90, "ممتاز",
    [الدرجة] >= 80, "جيد جداً"
) AS التقدير

IsNull(expression)

الوظيفة: التحقق إذا كانت القيمة فارغة (Null).

SELECT * FROM العملاء WHERE IsNull([الهاتف])
-- يرجع العملاء الذين ليس لديهم رقم هاتف

6. دوال الإجمالات (Aggregate Functions)

تستخدم هذه الدوال مع عبارة GROUP BY لحساب إجماليات على مجموعة من السجلات.

Sum(expression)

الوظيفة: حساب مجموع القيم في حقل رقمي.

SELECT Sum([الراتب]) FROM الموظفين
-- يرجع مجموع كل الرواتب

Count(expression)

الوظيفة: حساب عدد السجلات.

SELECT Count(*) FROM الموظفين
-- يرجع العدد الإجمالي للموظفين

Avg(expression)

الوظيفة: حساب المتوسط الحسابي للقيم.

SELECT Avg([الراتب]) FROM الموظفين
-- يرجع متوسط الرواتب

Max(expression) / Min(expression)

الوظيفة: إيجاد القيمة الأعلى أو الأدنى.

SELECT Max([الراتب]) AS اعلى_راتب FROM الموظفين
-- يرجع أعلى راتب في الجدول

7. دوال النطاق (Domain Functions)

تستخدم للبحث عن قيم أو حساب إجماليات في جدول أو استعلام آخر دون الحاجة لعمل ربط (Join).

DLookup(field, domain, criteria)

الوظيفة: البحث عن قيمة حقل معين في جدول بناءً على شرط.

DLookup("اسم_المنتج", "المنتجات", "ProductID = 5")
-- يرجع اسم المنتج الذي رقمه 5

DCount(field, domain, criteria)

الوظيفة: حساب عدد السجلات في جدول بناءً على شرط.

DCount("*", "الطلبات", "CustomerID = 'ALFKI'")
-- يرجع عدد طلبات العميل 'ALFKI'

DSum(field, domain, criteria)

الوظيفة: حساب مجموع قيم حقل في جدول بناءً على شرط.

DSum("المبلغ", "الفواتير", "تاريخ_الفاتورة >= #1/1/2024#")
-- يرجع مجموع الفواتير لعام 2024

8. دوال متقدمة أخرى

Nz(expression, value_if_null)

الوظيفة: استبدال القيم الفارغة (Null) بقيمة افتراضية تحددها.

SELECT [الاسم], Nz([الملاحظات], "لا يوجد")
-- إذا كان حقل الملاحظات فارغاً، يعرض "لا يوجد"

Format(expression, format_string)

الوظيفة: تنسيق عرض الأرقام، التواريخ، والنصوص بشكل محدد.

SELECT Format(Now(), "dddd, d mmmm, yyyy")
-- النتيجة: "الأربعاء, 9 يوليو, 2025"

9. أمثلة عملية متقدمة

استعلام شامل لبيانات الموظفين

هذا المثال يدمج دوالاً متعددة لعرض معلومات الموظفين بشكل منسق ومحسوب.

SELECT 
    [الاسم_الأول] & " " & [الاسم_الأخير] AS الاسم_الكامل,
    DateDiff("yyyy", [تاريخ_الميلاد], Date()) AS العمر,
    IIf([الراتب] > 5000, "راتب مرتفع", "راتب عادي") AS تقييم_الراتب,
    Format([تاريخ_التوظيف], "yyyy-mm-dd") AS تاريخ_توظيف_منسق,
    DLookup("اسم_القسم", "الأقسام", "رمز_القسم = " & [ID_القسم]) AS القسم
FROM 
    الموظفون
WHERE 
    IsNull([تاريخ_الاستقالة]);

10. نصائح وأفضل الممارسات

استخدم الفهرسة (Indexing): تأكد من وجود فهارس على الحقول التي تستخدمها بكثرة في شروط `WHERE` أو في دوال النطاق (مثل `DLookup`) لتسريع الاستعلامات بشكل كبير.

تعامل مع القيم الفارغة (Null): استخدم دوال `IsNull()` للتحقق من الفراغ أو `Nz()` لاستبدال القيم الفارغة بقيمة افتراضية (مثل صفر أو نص فارغ) لتجنب الأخطاء في العمليات الحسابية أو السلاسل النصية.

تجنب الدوال في `WHERE` على الحقول المفهرسة: تطبيق دالة على حقل في جملة `WHERE` (مثال: `WHERE Year([OrderDate]) = 2024`) يمنع قاعدة البيانات من استخدام الفهرس الخاص بهذا الحقل. الأفضل هو: `WHERE [OrderDate] >= #1/1/2024# AND [OrderDate] < #1/1/2025#`.

احذر من أنواع البيانات: تأكد من أنك تستخدم دالة التحويل المناسبة (مثل `CInt`, `CDate`) وأن البيانات متوافقة معها لتجنب أخطاء عدم تطابق الأنواع (Type Mismatch).