هذا المقال سيناقش التعامل مع قواعد البيانات في الـ( Visual Basic.Net ) باستخدام الـ( SQL Server 2005 ) و الـ( Access ) وكل مايتعلق بهذين المحركين .
في بادىء الأمر عليّنا التعرف على الإستعلام وطبيعة عمله وكيفية استغلاله بالشكل المناسب :
الإستعلام هو عبارة عن عملية تقوم بقراءة بيانات محددة من جدول معين بشروط أوبدون شروط، يتولد عن طريق هذا الإستعلام جدول يحمل البيانات التي تحقق شروط الإستعلام إن وجدت .
الإستعلام :
عملية الإستعلام تتم باستخدام الكلمات المحجوزة التالية :
Select
From
Select ( اختيار ) والتي يتبعها إما رمز النجمة أي ( * ) والذي يمثل جميع أسماء الحقول بشكل وهمي، أو يتتبعها أسماء الحقول المراد الإستعلام عنها .
From ( من ) يجب أن يتتبع هذه الكلمة إسم الجدول المراد إستيراد البيانات منه .
أمثلة عن ماسبق :
لنعتبر أنه لدينا جدول ( People ) يحوي معلومات عامة عن أشخاص، ولهذا الجدول أربعة حقول ( المُعرف [iD]، الإسم [FirstName]، الكنية [LastName]، العنوان [Address] ) .
بالنسبة لحقل المٌعرف [iD]، إذا كنت مبتدء بقواعد البيانات ستفهم لاحقاً أن كل جدول يجب أن يحوي مفتاح أساسي يساعد الإستعلام على التمييز بين كل سجل أو صف وذلك لأن هذا المفتاح الأساسي يمثل بحقل اي ( Column ) لايتكرر بخلاياه أي قيمة .
الأن، لنأتي بجميع الحقول المذكورة، كما ذكرنا يمكننا استخدام رمز النجمة لتمثيل أسماء الحقول التابعة للجدول المستخدم في الإستعلام :
Select * From People
أو عن طريق ذكر أسماء الحقول :
Select ID, FirstName, LastName, Address From People
ليس بالضرورة أن نستورد جميع الحقول فإذا أردنا مثلاً أن نستورد الإسم والكنية من كل سجل ؟
Select FirstName, LastName From People
الشرط في الإستعلام :
الإستعلام لا يقف عند هذا الحد، فكما ذكرنا "أن أي إستعلام يولد جدول يحمل البيانات التي تحقق شروط معينة"
المقصود بالشروط المعينة هي شروط يجب على ( خلية أو مجموعة خلايا من جدول أو من عدة جدوال ) أن تحقق شرط مذكور في الإستعلام بعد الكلمة المحجوزة ( Where )، مثال عن هذه الفكرة :
لديك جدول يحوي خمسمائة وأربعين ألف سجل لأشخاص تعرفهم ومن هذه السجلات لديك مايعادل 40% لأشخاص يحملون إسم محمد ومهمتك هي أن تجد عنوان شخص إسمه محمد لكن الكنية غير معروفة وكل ماتذكره عن هذا الشخص أن اسمه محمد وكنيته تبدأ بحرف الميم ( م )، ستقول لي سأحضر الجدول ومن ثم أبحث عن الأسماء التي تبدأ بحرف الـ( م ) ومن ثم ادقق بالسجلات التي تحمل إسم محمد و أقوم بقراءة كل كنية تبدأ بحرف الـ( م ) تابعة لشخص يدعى محمد، سيساعدني ذلك على التذكر .
طيب ماذا ستفعل إن كانت الأسماء غير مرتبة وعشوائية ؟
هممممممممممممممم، يعني أعمل إيه ؟ سأدقق جميع السجلات.
كم ستحتاج من وقت لإتمام السجلات وإيجاد عنوان الشخص المطلوب ؟!!!!!
اعتقد أني قادر على إنهاء هذا الشيء بيوم واحد :)
ماذا إن اختصرت هذا الشيء بعشر دقائق ؟
لكن كيف ؟
Select FistName, LastName, Address From People Where FirstName = 'Mohammad' And LastName Like 'M%'
دقيقة لوسمحت !!
تذكرت أن مُعرفه الخاص ( 100321 ) !!
كم أحتاج من الوقت لمعرفة عنوانه ؟!!
الجواب ( أجزاء من جزء الثانية !! ) والإستعلام سيكون بسيط جداً :
ٍSelect Address From People Where ID = '100321'
هناك عدة طرق لإنشاء شرط أو شروط معينة للحصول على الإستعلام الأمثل :
مع استخدام الكلمة المحجوزة ( Like ) :
التأكد من وجود قيمة حقيقة بالخلية :
اختيارية :
وأخيراً نأتي إلى جمع الشروط ، والمقصود هنا هو التأكد من عدة شروط باستخدام العبارات المنطقية ( AND, OR, NOT ) :
الترتيب في الإستعلام :
حسناً، ماهو الترتيب ؟
الترتيب كما نعرف جميعاً أنه إعداد مجموعة من نصوص أو الأرقام أو تواريخ بشكل تصاعدي أو تنازلي منسق لكن هذا بالنسبة لحياتنا العملية فبالنسبة للحياة البرمجية هناك عدة طرق لتنسق جدول والمقصود ( بعدة طرق ) هنا هو أن كل حقل من جدول يخولك أن تقوم بترتيبه بطريقتان ( تصاعدي، تنازلي ) وعلى فرض أنه لدينا جدول بعشر حقول فمجموع طرق عرض تنسيق الجدول ستكون ( 10 ^ 2 )=( 100 ) طبعاً الإعتماد يتم على اختلاف محتويات الجدول لأنه وعلى فرض أن كل حقل من حقول الجدول تحمل عدد كبير من الخلايا المتشابهة ؟ كلما زادت الخلايا المتشابهة، قلت طرق عرض التنسيقات وليس بمعنى أنك غير قادر على كتابة أسماء الحقول وإنما ستكون الخلايا متشابهة الأماكن في العرض حسب الترتيب المذكور في الإستعلام .
نأتي الأن للكلمة المحجوزة ومايجب استخدامه مع هذه الكلمة :
Order By <ColumnName> ASC | DESC
Order By : هي الجلمة المحجوزة التي تخبر الإستعلام أننا نريد ترتيب الجدول .
<ColumnName> : يجب أن نعوض هذا النص بقيمة اسم الحقل .
ِASC : والتي تَختصر ( Ascending ) والمقصود ( ترتيب تصاعدي )=( من الصغير إلى الكبير )=( 1، 2، 3، 4، 5 )
DESC : والتي تَختصر ( Descending ) والمقصود ( ترتيب تنازلي )=( من الكبير إلى الصغير )=( 5، 4، 3، 2 ،1 )
أمثلة على ماسبق :
ترتيب الجدول بالنسبة للحقل ( FirstName ) بشكل تصاعدي :
ٍSelect * From People Order By FirstName ASC
ترتيب الجدول بالنسبة للحقل ( FirstName ) و ( LastName ) بشكل تصاعدي :
Select * From People Order By FirstName ASC, LastName ASC
أو بإسناد رقم الحقل عوضاً عن إسمه :
Select * From People Order By 2 ASC, 3 ASC
لنرى مثال عن استخدام جميع الكلمات المحجوزة السابقة :
ٍSelect * From People Where FirstName Like 'B%' Order By FirstName ASC, LastName ASC
|_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_|
نبدأ الأن مع الإجراءات الأساسية وهي :
Insert, Delete, Edit
* Insert أو ( إدخال )
يخولك هذا الإجراء من إدخال سجل جديد في جدول محدد .
مطالب الإجراء ( اسم الجدول ) - ( الخلايا التي سيتم إعداد قيمها ) - ( قيم الخلايا المذكورة )
شكل جملة الإدخال :
Insert Into <TableName> ( <Column1>, <Column2>, <Column3> ) Values (<Value1>, <Value2>, <Value3> )
لنأخذ مثال عملي على جدول الأشخاص :
Insert Into People ( FirstName, LastName, Address ) Values ( 'Ahmad', 'Al-Hindi', 'Unknown' )
* Update أو ( تعديل )
يخولك هذا الإجراء تعديل سجل أو عدة سجلات من جدول حسب شروط معينة .
مطالب الإجراء ( اسم الجدول ) - ( الخلايا التي سيتم تعديل قيمها ) - ( قيم الجديدة للتعديل )
شكل جملة التعديل :
Update <TableName> Set <Column1> = <Value1>, <Column2> = <Value2>, <Column3> = <Value3> Where <Predicate>
مثال عملي على جدول الأشخاص، المثال التالي سيعدل جميع السجلات التي قيمة خلية الاسم الأول منها تساوي ( Ahmed ) باستبدال هذه القيمة بـ( Ahmad ) :
Update People Set FirstName = 'Ahmad' Where FirstName = 'Ahmed'
* Delete أو ( حذف )
يستخدم هذا الإجراء لحذف سجل أو عدة سجلات، ينصح بتأني عند استخدامه وذلك بالتأكد من جملة الشرط المكتوب تحت الكلمة ( Where )، فإذا لم هناك شرط ؟ سيتم مسح جميع السجلات ! وإذا كان هناك تكرار؟ سيتم مسح كل سجل يحوي قيمة تحقق شرط من الشروط المذكورة في الإستعلام ! ( لذلك انتبه جيداً ;) ) .
مطالب الإجراء ( اسم الجدول ) - ( شرط الحذف )
شكل جملة الحذف :
Delete From <TableName> Where <Predicate>
مثال عملي على جدول الأشخاص، سنقوم بحذف جميع سجلات الأشخاص التي كنيتهم ( Abo Lamba ) :
Delete From People Where LastName = 'Abo Lamba'
في الدرس القادم سنرى الأنواع التي يدعمها الـ( SQL ) وكيفية التقيد بأنواع محددة للحصول على أداء أسرع وتوفير أكبر في ذاكرة التخزين، وأيضاً سنبدأ بدراسة الـ( ADO.NET ) .
بالنسبة لخبرتي في قواعد البيانات فلا أرها ( احترافية ) وإذا كان هناك من اقتراح ( فسلمت يداكم على ادلائه :) عسى أن نعمم الفائدة على الجميع :) )
بنظري أن برمجة قواعد البيانات هي أسهل شيء يمكن أن يمر على مبرمج، ولاتحتاج الى تفكير عميق كما يظن البعض منا لكن ذلك لايعني أنها لاتحتاج للتفكير و التخطيط !، بشكل عام ( برمجة قواعد البيانات تعتمد على التخطيط أو الرسم البياني )=( فلا تحاول أن تبدأ بمشروع كبير قبل أن ترسم له مخطط بياني ! ;) )
بالتوفيق :) .
