شرح برامج » لغات البرمجة » لغة الإستفسارات Sql في فيجوال بيسك

 لغة الإستفسارات Sql في فيجوال بيسك  أضيف في: 6-12-1426هـ
الشيء الذي لن تستطيع تجاهله عند تعلم قواعد البيانات هو لغة الاستفسار او الاستعلام و التي يعبر عنها بـ SQL ، لكن ما هي فائدة هذه اللغة؟ لنفرض ان لديك موظفين بالمئات و تريد ان تحدد جنسية معينه منهم و تحصرهم لن تستطيع فعل ذلك الا بلغة الاستعلام حيث يقوم بجمع الحقول التي تساوي الشرط الذي شرطته و هو جنسيتهم ، سنأخذ شرحا مفصلا في هذا الدرس عن الاساسيات و تطبيقات عليها.

ولا مافائدة هذه اللغة ؟ كما ذكرنا في المقدمة ان فائدتها في حصر القيم التي تطابق القيم المعطاه من قبل المستخدم و تتميز بالسهولة و الدقة و السرعة ايضا كما يمكنك التحكم بها بصوره كبيره ويمكنك ادخال اكثر من شرط في الاستعلام الواحد، لنفرض ان لدينا جدول اسمه Tb وفيه حقلين باسم name و number و تحتوي هذه الحقول على قيم مدخلة كما في الجدول التالي:

http://up.c-ar.net/200ee.bmp

و نريد ان نستخرج الاسماء التي ارقامها 444 فسنحتاج الى جملة استعلام بسيطة على الشكل التالي :


SQL = "select name from Tb where number = 444"


في الجملة السابقة امرنا البرنامج ان يقوم بتحديد قيم الحقل nameمن الجدول Tb عندما تكون قيم الحقل number تساوي 444 ، و وضعنا ذلك في متغير اسمه SQL

دعونا نلقي نظره على طرق الاستعلام

اذا اردت أن تستعلم عن جميع الحقول في جدول بدون شرط استخدم النجمة لتعبر عن جميع الحقول و لا تضع شرطا مثل هذا الاستعلام

SQL = "select * from Tb "



اذا ارت ان تستفسر عن قيم حقلين بدون شرط اكتب اسم الحقلين بينهما فاصلة و لا تضع شرطا كالتالي:

SQL = "select name,number from Tb "



اذا اردت ان تستفسر عن حقل معين بشرط ما استخدم الصيغة التالية:

SQL = "select name from Tb where number = 444 "



!+أحمر!يمكنك استخدام صيغ المقارنة > او < او <= او >= او <> بدلا من = !-أحمر!

عندما تريد الاستعلام و استخدام اكثر من شرط ضع بين الشرطين عبارة And او OR حسب حاجتك كالتالي:

SQL = "select name from Tb where number = 444 or number = 555 "


في هذا الدرس سوف نتعلم استخدام لغة الاستفسار في تطبيق فيجوال بيسك ، من حيث كيفية الاستفسار عن قيمة مدخلة من قبل المستخدم و كيفية وضع نتائج البحث في listbox و combo box





كيف نتعامل مع جملة SQL في البرنامج ؟ هذا هو السؤال الذي سوف نقوم بالإجابة عليه الان


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

http://up.c-ar.net/1dd5b.bmp

لكي نستعلم عن الاسماء التي ارقامها 1442 نكتب الجملة التالية :





SQL = "select name from Tb where num = 1442 "





هكذا نكون قد قمنا بالاستعلام بعد ذلك تأتي الخطوة التالية و هي تخزين النتائج في الجدول المستعار و الذي نقوم بتعريفه ( لمزيد من التوضيح راجع الدروس السابقة) عادة في الموديول كما قمنا به في الدروس السابقة و لنفرض أن اسمه T و ان اسم المتغير الذي قمنا بتخزين قاعدة البيانات فيه D و التي كنا نطلق عليها القاعدة المستعارة سنكتب الامر التالي لكي نخزن نتائج الاستعلام في الجدول :




Set T=D.openrecordset(SQL,dbopendynaset)





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


و الان بعد أن قمنا بتخزين القيم في الجدول نريد ان نظهر البيانات و يمكنك اظهارها في عدة اشكال كما تريد فيمكنك و ضعها في مربعات نص او قوائم سواء LISt او COMBO ولكل واحد طريقة تختلف نوعا ما عن الاخر


مربع النص Text Box :

لكي تظهر النتائج في مربع النص فلن تحتاج الا لإجراء الاظهار كما تعلمنا في السابق و تقوم بكتابته بعد امر تخزين نتائج الاستعلام في الجدول

List Box :

لتضع النتائج في قائمة ListBox لن تحتاج لكثير من الخطوات فالأمر ربما أسهل مما تتصور ، فقط تحتاج لهذا الكود :




For i = 1 To n

List1.AddItem TB!name

TB.MoveNext

Next i






قمنا بعمل تكرار بعدد الحقول لكي يتم عبئة جميع البيانات في الجدول و لقد عرفنا كيفية معرفة عدد الحقول في دروس الربط بالكود السابقة


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



ComboBox

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




استقبال المدخلات من المستخدم :



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


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




SQL = "select num from tb where name = text1.text "








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




' " & text1.text & " '





لقد قمنا بوضع علامتي تنصيص مزدوجة عليها يفصل بينها علامة الجمع & ثم قمنا بحصرهم جميعا بعلامة تنصيص مفردة ، الخطوة الاخيرة و هي وضع علامة التنصيص المفردة تكون للحقول الحرفية و لا نحتاجها في الحقول الرقمية ، قم بتجربة ذلك الان لكي تستوعبها جيدا


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




SQL = "select num from tb where name = '" & text1.text & "' "





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




SQL = "select name from tb where num = " & text1.text & " "





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

http://up.c-ar.net/7c96c.bmp

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


قبل أن نبدأ افرض أن لدينا الجدولين التاليين

الجدول الاول Tb1

http://up.c-ar.net/1a421.bmp

و الجدول الثاني Tb2

http://up.c-ar.net/d61e5.bmp

نريد الاستعلام عن أسماء الموظين الذين ينتمون لقسم ما و لنفرض اننا نريد من ينتمي لقسم الهندسة، ستكون صيغة الاستعلام على الشكل التالي " حدد حقل الاسم منالجدول tb1 عندما يكون اسم القسم الهندسة " ، لكن هناك مشكلة حيث لا يوجد حقل باسم القسم في نفس الجدول لكن يوجد اسم القسم في جدول اخر، ويوجد في الجدول الذي لدينا رقم القسم لكننا نريد البحث على اساس اسم القسم و ليس رقمه ، اذا يجب ان نحصل على اسم القسم من الجدول الاخر ، وللحصول على معلومات من جدول اخر يجب تحقق شرط مهم و هو وجود حقل مشترك بين الجدولين و هذا ينطبق في حالتنا ، اذا ستكون صيغة الاستعلام على الشكل التالي : " حدد حقل الاسم من الجدول tb1 عندما يكون اسم القسم يساوي (حدد رقم القسم من الجدول tb2 عندما يكون اسم القسم القسم الهندسة ) "


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





SQL = "select name from Tb1 where deptno = (select deptn form tb2 where deptname ='الهندسة') "




قد تتسائل لماذا نقوم بهذه العملية الطويلة مع أنه بإمكاننا ان نشترط شرط على اساس رقم القسم الذي يتوفر لدينا حيث نعرف ان قسم الهندية يحمل الرقم 1 ؟ الجواب و بكل بساطة أنه ليس في كل مرة ستعرف ذلك حيث يوجد استعلامات معقدة لايمكنك بأن تقوم بحساب الشرط بنفسك لكي تضع استعلام واحد ، حيث ان بعض التطبيقات يجب عليك فيها استخدام الاستعلام المركب و قد يصل لأكثر من استعلام لحل و ايجاد قيمة استعلام واحد

في الاستعلام المتفرع من استعلام لانضع علامتي تنصيص مزدوجة على الشرط النصي بل نضع علامة تنصيص مفردة مثل هذه '


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




الكاتب: LaSer_26 انقر هنا لمراسلة LaSer_26 أنقر هنا للإنتقال إلى موقع LaSer_26 إضافة للمفضلة إضافة لمفضلة Google إضافة لمفضلة Delicious إضافة لمفضلة Digg إضافة لمفضلة Facebook
 



 

المنتديات

الأذكار

ألعاب الأدعية الصحيحة
راديو وصفات طبخ
مواقع تسوق مكتبة القصص