إستعلامات المتغيرات (القيم المعلمة)    Paramater  Queries

إعداد : محمد طاهر

 

إستعلامات المتغيرات (القيم المعلمة)    Paramater  Queries

 

تكلمنا سابقا عن استعلامات الاختيار و التصفية فيها و كيف يمكننا تصفية السجلات ( عمل فلتر ) بشروط معينة ، مثل أن يكون العمر أقل من 40 مثلا.

فماذا لو أردنا أن تكون قيمة الشرط متغيرة ، أي أننا  مرة نريد السجلات المناظرة لأقل من 40 و أخري أقل من 30 و ثالثة أقل من 23 ... و هكذا

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

 

ففي الحالة السابقة عند تشغيل الاستعلام ستظهر رسالة " ادخل العمر " فيكتب المستخدم في مربع الحوار أي قيمة يريد مثل 25 مثلا ، فيتم عرض السجلات التي يكون العمر فيها أقل من 25 فقط

 

و الآن لنستعرض كيف يمكن تنفيذ ذلك

 

لننشئ استعلام يعرض البيانات من جدول الطلبيات orders  و لنختار اظهار رقم الطلب  OrderID و قيمة الشحن Freight

 و نحفظ الاستعلام باسم Q1 .

و سيعرض هذا الاستعلام 830 سجل

و جملة ال SQL  به هي

SELECT Orders.OrderID, Orders.Freight
FROM Orders;
 

 

ثم لنفتح الاستعلام فى وضع التصميم ، و في خانة المعايير  Criteria    لحقل Freight  نكتب الجملة التالية

<[ادخل الحد الاقصي للقيمة]

أو أي جملة إرشادية نريد ، المهم هو  وضعها بين []

و لنشغل الاستعلام و نكتب 20 عند ظهور مبع الحوار

 

سيعرض الاستعلام  267  سجلا فقط و هي التي تحقق الشرط

و لنحفظ الاستعلام   بنفس الاسم  Q1 .

و جملة ال SQL  به هي

 

SELECT Orders.OrderID, Orders.Freight
FROM Orders
WHERE (((Orders.Freight)<[ادخل الحد الاقصي للقيمة]));
 

أو أن نختار أن نعرض القيم الواقعة بين حد أقصي و حد أدني و ذلك باستخدام تعبير Between  And

فنكتب المعيار كما يلي

Between [الحد الأدني] And [الحد الأقصي]

 و نحفظ الاستعلام باسم Q2

ثم نعرضه و نكتب الحدين 20 و 22 عند السؤال ، فيكون الناتج عبارة عن خمسة عشر سجلا ، و هي السجلات التي تقع فيها القيمة بين 20 و 22 بما فى ذلك قيمتي ال 20 و ال 22 نفسهما

 

و تصبح جملة الاس كيو ال هي

 

SELECT Orders.OrderID, Orders.Freight
FROM Orders
WHERE
(((Orders.Freight) Between [الحد الأدني] And [الحد الأقصي]));
 

 

و الان ماذا سيحدث لو كتبنا فى مربع الجوار الذي سيظهر قيمة نصية ، الاجابة : سيغيب الرد لفترة ثم تأتي رسالة خطأ غير مفهومة بأن التعبير صعب او ما شابه ذلك . و للتجربة شغل الاستعلام q2 او q1 ثم عند السؤال علي القيمة اكتب نص و راقب ما سيحدث

 

و الآن لكي تكون هذه المتغيرات معرفة تعريفا كاملا وواضحا ، لابد من تعريف نوع كل منها

و يتم ذلك بفتح الاستعلام فى وضع التصميم ، ثم اختيار  Query , Paramaters

و نكتب كل من الرسائل التي حددناها ، و يمكن كتابتها بدون ال [] ، و سيقوم الأكسس باضافتها

و امام كل منها نحدد النوع

و لنقم بعمل نسخة من Q2  و نسميها Q3 و نقوم بتعريف نوع المتغيرات كما فى الصورة

 

 

و قد اخترنا نوع المتغير "عملة" لان هذا هو نوع الحقل المناظر فى جدول الطلبات

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

 

و تكون جملة الاس كيو الي فى الاستعلام هي

 

PARAMETERS [الحد الأدني] Currency, [الحد الأقصي] Currency;
SELECT Orders.OrderID, Orders.Freight
FROM Orders
WHERE (((Orders.Freight) Between [الحد الأدني] And [الحد الأقصي]));
 

  و نلاحظ أن ما زاد هو عملية تعريف نوع المتغيرات فقط ، و طبعا هذا مفيد جدا و لا يجب اهماله

 

و بالنسبة لباقي الأنواع ، و كيف نحدد نوع المتغير لها ، فالجدول التالي يوضح ذلك

 

نوع الحقل الذي سيتم وضع المتغير فيه النوع الذي نختاره للمتغير
Currency, Date/Time, Memo, OLE Object, Text, and Yes/No نفس نوع الحقل
Number

Byte, Single, Double, Integer, Long Integer, and Replication ID

 بحسب قيمة  خاصية Field Size للحقل الرقمي.

غير مطلوب تحديده

Value

و هذه تقبل أي نوع من البيانات

Binary

Binary

تستخدم فى حالة الجداول المرتبط الي برامج أخري غير الاكسس و تكون تدعم هذا النوع حيث ان أكسس لا يدعمه

 

 

استخدام جزء من القيمة النصية فى معيار المتغير

 

لنفرض ان لدينا حقل نصي به الأسماء فقط ، و نريد أن تكون القيمة التي سنكتبها عند السؤال عن قيمة المتغير هي جزء فقط من هذا الاسم سواء فى البداية أو التهاية أو أي جزء من الاسم

 

قيكون ذلك بكتابة المعيار بإحدي الطرق التالية

 

لكتابة أي جزء من الاسم

LIKE "*" & [الاسم] & "*"

لكتابة النهاية

LIKE "*" & [الاسم]

 

لكتابة البداية

LIKE [الاسم] & "*"

 

 و الفكرة ببساطة هي أن Like تعني الشبه أي أن الاسم يشبه ما يلي ، و ال &   تستخدم لتكوين تعبير نصي واحد من أكثر من جزء ( لوصل الجملة ) ، أما ال * فتعني ( كل شيء )

 

و بذلك تكون الجملة الأولي تعني أي اسم يحتوي علي ما سنكتب

و الثانية أي اسم يبدأ بأي شيء  وينتهي بما سنكتب

و الثالثة تعني أي اسم يبدأ بما سنكتب و ينتهي باي شيء

 

و سأترك لكم تجربة الحالات الثلاثة ، و لكن للنفذ أحدها كمثال و هي حالة كتابة بداية الاسم

 

لننشيء استعلام جديد به الاسم الاول للعاملين و نحفظه باسم q4

 ثم لنقوم بتعريف متغير فى المعيار الخاص بالاسم و الرسالة هي :   اكتب بداية الاسم   ثم لنعرف نوعها بانه نص

 

[ اكتب بداية الاسم ]

LIKE [اكتب بداية الاسم] & "*"

 

و لنشغل الاستعلام

و لنختار  حرف ال a  كبداية

فيظهر لنا سجلان من اجمالي التسعة سجلات الموجودة فى الجدول

 

و تكون جملة الاس كيو ال المناظرة للاستعلام هي :

 

PARAMETERS [اكتب بداية الاسم] Text ( 255 );
SELECT Employees.FirstName
FROM Employees
WHERE (((Employees.FirstName) Like [اكتب بداية الاسم] & "*"));
 

 

خطأ شائع

 

أحيانا عند تشغيل استعلام من هذا النوع ، تظهر الرسالة ( مربع الحوار الذي يسأل عن القيمة مرتين ) و السبب فى هذه الحالة هو اختلاف القيمة المسجلة فى خانة المعيار فى تصميم الاستعلام عن القيمة المسجلة فى تعريف نوع المعيار قى قائمة Query, parameters

 

PARAMETERS [اكتب بداية الاسم] Text ( 255 );
SELECT Employees.FirstName
FROM Employees
WHERE (((Employees.FirstName) Like [اكتب بداية الاسم] & "*"));

 

أي القيم الموضحة بلون مختلف فى جملة الاس كيو ال السابقة ، و قد يكون الاختلاف مجرد مسافة خالية

لذا عند تكرر الرسالة نقوم بالتأكد من تطابق تلك القيم و طبعا أقصر الطرق لذلك هو النسخ و اللصق

 

لذا ينصح من البداية بنسخ الجملة و ليس اعادة كتابتها

 

 

 

----------------

تم

----------------