عبود عبود
20-04-2013, 02:09 PM
http://i.imgur.com/57UrtCm.gif
http://i.imgur.com/emf2NIh.gif
شرح قواعد البيانات سكيوليت SQL databases
السلسلة رقم 1
هي لغة قياسية للوصول إلى قواعد البيانات و التعامل مع قواعد البيانات
وهى تستخدم أحد مقاييس ANSI “ مؤسسة المقاييس القومية الأمريكية” وهناك العديد من الإصدارات المختلف لـــ لغة سكيوليت
ماذا يمكن أن تفعل بإستخدام الــ سكيوليت ؟
يمكن تنفيذ إستعلامات من قواعد البيانات
يمكن أن تسترجع البيانات من قواعد البيانات
يمكن إدراج سجلات فى قواعد البيانات
يمكن تحديث السجلات فى قواعد البيانات
يمكن حذف السجلات من قواعد البيانات
يمكن إنشاء قواعد بيانات جديدة
يمكن إنشاء جداول جديدة فى قواعد البيانات
يمكن إنشاء إجراءات تخزينية فى قواعد البيانات
يمكن إنشاء طرق عرض أو عروض فى قواعد البيانات
يمكن تعيين الأوذونات على الجداول والإجراءات و طرق العرض أو العروض
أولا : كيفية بناء الجمل فى قواعد بيانات السكيوليت
لتكوين الجمل فى قواعد البيانات إليك بعض الكلمات والتى تعبر عن أفعال سوف تتم عند إستخدامها مع قواعد البيانات
سكيوليت مثل (SELECT, UPDATE, DELETE, INSERT, WHERE)
قاعدة البيانات في معظم الأحيان تحتوي على جدول واحد أو أكثر. يتم تعريف كل جدول بواسطة اسم يعطى له
والجداول تحتوى على البيانات فى سجلات وهى الصفوف (Rows)
فعلى سبيل المثال لتوضيح ما سبق نأخذ ما تعرضة الصورة التالية :
http://i.imgur.com/yNbnYIm.png
مبدئيا أى جدول لابد و أن تضع له إسم معرف له كى تستطيع أن تستدعي منه أى بيانات تريدها وحتى تستطيع تمييز الجداول
عن بعضها و تفرق بين ما يحتوية كل جدول فالصورة السابقة توضح جدول كما تشاهدها
الجدول يحتوى على صفوف (ROWS) و أعمدة (Columns)
طبعا الصفوف هى كل ما هو أفقى بخط مستقيم
و أيضا الأعمدة هى كل ما هو رأسى بخط مستقيم
http://i.imgur.com/VUYdPB9.gif
* نضع فى إعتبارنا أن سكيوليت ليست حساسة لحالة الأحرف *
يمكن تقسيم تصريحات السكيوليت إلى قسمين و هما :
_ إستعلام وتحديث التعليقات يشكل جزء من السكيوليت (DML)
التعليقات أو التصريحات الأكثر أهمية هى كالتالى :
“SELECT” وهى تستخلص البيانات من قاعدة البيانات
“ UPDATE” وهى لتحديث البيانات داخل قاعدة البيانات
“ DELETE” وهى لحذف بيانات من داخل قاعدة البيانات
“ INSERT INTO” وهى لإدخال بيانات إلى قاعدة البيانات
_ رخص إنشاء أو حذف قوائم من قاعدة البيانات (DDL) هى تعرف أيضا بالفهارس (key)
لتحديد الروابط بين الجداول وتفرض قيود بين الجداول
التعليقات أو التصريحات الأكثر أهمية هى كالتالى :
“ CREATE DATABASE” وهى لإنشاء قواعد بيانات
“ ALTER DATABASE” وهى تعدل قواعد البيانات
“ CREATE TABLE” وهى لإنشاء جداول
“ ALTER TABLE” وهى لتعديل جداول
“ DROP TABLE” وهى لحذف جداول
“ CREATE INDEX” وهى لإنشاء فهرس (مفتاح البحث)
“ CREATE INDEX” وهى لحذف فهرس
فكما ذكرنا سابقا أن اللغة ليست حساسة لحالة الأحرف “ select “ أو “ SELECT “
http://i.imgur.com/VUYdPB9.gif
أولا : التعليق أو التصريحأ “ SELECT “ سوف يكون هناك طريقتان لكتابة هذا التصريح كما هو موضح بالأسفل :
SELECT column_name(s) FROM table_name
SELECT * FROM table_name
نأخذ مثالا لتوضيح الفرق بين الإثنين فنحن نريد من الجدول التالى أن نستخلص منه معلومات الأعمدة “الإسم الأول” و “الإسم الأخير” .... “ FirstName و LastName”
http://i.imgur.com/yNbnYIm.png
الشــــــــرح كما يلى :
بالنسبة للتصريح الأول و الذى كان “SELECT column_name(s) FROM table_name” الشرح كالتالى :
أولا كما ذكرنا سابقا أن select هى لإستخلاص بيانات من قاعدة البيانات
ثانيا كلمة column_name
وهى تعبر عن بيان العمود المراد إستخلاص بياناته بمعنى إسم العمود فإن كان أكثر من عمود نريد أن نستخلص بياناته
فإننا قمنا فى الإسم السابق الذى كان (column_name(s حيث حرف s يعبر عن أنه قد يكون هناك أكثر من عمود
وبالتالى سوف يتم كتابة الأعمدة أو بمعنى أصح أسماء الأعمدة المراد الإستعلام عنها فى قاعدة البيانات بجوار بعضهما مع الفصل بينهم بفاصلة ,
و التى نطلق عليها وا بالعربى
ثالثا كلمة FROM تعنى من
رابعا كلمة table_name وهى إسم الجدول المراد إستخلاص البيانات منه
** إذن إذا كنا نريد أن نستخلص أو نستعلم عن البيانات
“ FirstName و LastName”لعمود الإسم الأول و عمود الإسم الأخير
سوف يكون التصريح الكامل لعمل هذه المهمة كالتالى :
SELECT LastName,FirstName FROM Persons
** طبعا على إفتراض أن قمت بتسمية الجدول بإسم Persons
فيكون نتيجة الإستدعاء الذى قمت بتحديدة وحصرة بين الإسم الأول و الإسم الأخير كالتالى فى المستعرض والذى سوف أعبر عنه بقيمة متغير مثلا فيكون كالتالى :
http://i.imgur.com/oYVPDnx.png
http://i.imgur.com/VUYdPB9.gif
بالنسبة للتصريح الثانى و الذى كان “ SELECT * FROM table_name” الشرح كالتالى :
أولا كما ذكرنا سابقا أن select هى لإستخلاص بيانات من قاعدة البيانات
العلامة النجمية (*) هي طريقة سريعة لتحديد كافة الأعمدة ثانيا
ثالثا كلمة FROM تعنى من
رابعا كلمة table_name وهى إسم الجدول المراد إستخلاص البيانات منه
إذن إذا كنا نرد أن نستخلص أو نستعلم عن كافة بيانات الأعمدة بالكامل سوف يكون التصريح الكامل لهذة المهمة كالتالى :
SELECT * FROM Persons
**طبعا على إفتراض أن قمت بتسمية الجدول بإسم Persons
فيكون نتيجة الإستدعاء هو كامل محتويات بيانات كافة الأعمدة من قاعدة البيانات المحددة مسبقا
http://i.imgur.com/VUYdPB9.gif
الآن نتجه نحو برنامج الأتوبلاى ميديا ستوديو لتطبيق ما سبق عمليا مع مراعاه تنشيط الإضافة سكيوليت وهى من النوع أكشن بليجين طبعا للتنشيط للإضافة
ثم يتم وضع علامة صح أمام إسم الإضافة .........<...Project.........>...Plugins
http://i.imgur.com/otBcLBC.png
بعد فتح مشروع جديد و تنشيط الإضافة سكيوليت نقوم بإدراج 4 إينبوت لإدخال البيانات عن طريقه إلى قاعدة البيانات
نقوم بإدراج زر ونقوم بكتابة إسم له و ليكن حفظ على سبيل المثال و سوف تكون مهمته هو تسجيل البيانات التى سوف يستقبلها من إينبوت الإدخال
مبدئيا سوف نتعامل مع قاعدة بيانات أليس كذلك ؟
نعم سوف نتعامل مع قاعدة بيانات إذن هل هى موجودة أم لا ؟
إذا كانت غير موجودة إذن علينا أن ننشئها أليس كذلك ؟
نعم سوف نقوم بإنشائها إن لم تكن موجودة وإن كانت موجودة علينا أن نعرف مسارها التى هى موجودة فيه أليس كذلك ؟
فى هذا المثال سوف نحدد أن تكون قاعدة البيانات داخل مجلد الدوكس داخل المشروع وذلك على سبيل المثال
ومن هنا لإنشاء قاعدة بيانات جديدة أو فتح قاعدة بيانات موجودة سوف نستخدم أمر من أوامر الإضافة سكيوليت وهو SQLite.Open
عند إدراجة سوف تظهر هذه النافذة كما هو موضح بالصورة التالية :
http://i.imgur.com/F1K0tMW.png
وفيها يكون مسار قاعدة البيانات المراد إنشائها أو فتحها حتى نستطيع أن نتعامل معها و يكون المسار فى السطر الأول من الصورة
والذى يعبر عنه فى الصورة بالمتغير Filename قم بحذف هذا المسار والذى كان إفتراضيا بهذا الشكل “C:\\MyFolder\\MyDatabase.db”
وقم بكتابة مسار فولدر الدوكس والذى سوف يكون كالتالى “AutoPlay\\Docs\\data.db”
حيث أنه من المعروف أن كلمة data هى إسم إفتراضى منى أنا على سبيل المثال
ولكى أوضح لك أن هذا الإسم يمكن تغييرة كما تريد و سوف يكون هو إسم قاعدة البيانات
وطبعا “.db” هو إمتداد قاعدة البيانات حيث يوضح أن قاعدة البيانات سوف تكون من النوع داتا باس
كما هو موضح بالصورة السابقة المتغير الثانى فى الصورة والذى يعبر عنه الأمر بـــ ResultVariable سوف يكون إفتراضيا result
نقوم بإعادة تسميته لمتغير على سبيل المثال سوف يكون db مع أخذنا فى الإعتبار أنه يمكنك إختيار كتابة أى متغير آخر فهذا على سبيل المثال فقط
وبعد إتمام مراحل كتابة مسار قاعدة البيانات و إسم متغير مناسب سوف يكون الكود النهائى بعد الضغط على زر فينيش كالتالى :
db = SQLite.Open(“AutoPlay\\Docs\\data.db”);
نعود و نذكر إن لم تكن قاعدة البيانات موجود سوف يتم إنشائها أوتوماتيكيا
عن طريق الكود السابق الذى قمنا بإدراجة أصبح لدينا ملف لقاعدة البيانات و لم يتم التعامل مع القاعدة بعد
لذلك علينا أن نقوم برسم الطريق الذى سوف نمشى فيه وبالخطوة السابقة قمنا برسم أين سنذهب فكان الجواب أننا سوف نذهب إلى قاعدة البيانات إذن علينا أن نفكر كيف سوف نفعل داخلها و على ذلك سوف نعمل على رسم جدول حتى نقوم بالتخزين فية و من هذا المنطلق فإنه كما ذكرنا سابقا لابد و أن يكون الجدول الذى سوف نحررأو نقوم بالإضافة فية
أن يكون له إسم يميزه عن باقى الجداول ففقاعدة البيانات تسمح بتخزين جداول كثيرة جدااااااا وبما سبق ذكرة من خلال متابعة الشرح نجد أنه كان هناك ضوابط للتعامل مع الجداول من خلال التصريحات العامة التى ذكرناها سابقا
نعود إلى التكلم عن ما ذكرناه سابقا ولكن على طريقة الأتوبلاى ميديا ستوديو من خلال إضافة السكيوليت التى نستخدمها حاليا لذلك سوف نستخدم أمر للتعامل مع الجداول و سوف يكون هو كالتالى : SQLite.Query
التالية ينفذ استعلام على قاعدة بيانات SQLite عند إدراجة سوف تظهر هذه النافذة كما هو موضح بالصورة :
http://i.imgur.com/BOPtt3x.png
وفيها يكون dbHandle هو متغير ثابت موجود فى الأمر كما هو موضح أما المتغير الإفتراضى و الذى يكون db
فيمكن تغييرة كما نريد شرط أن يكون مطابقا تماما للمتغير الذى إستعملناه فى إنشاء أو فتح قاعدة البيانات والذى كان يعبر عن فتح قاعدة البيانات
وعلى ذلك فإن خلاصة التعبير عن المتغير هذا هو الهاندل أو مقبض قاعدة البيانات التى سوف نتعامل معها
كلمة Query هى أيضا متغير سابق ثابت يتم فية كتابة طريقة الإستعلام التى نريدها من حيث تحديد نوع الإستعلام
من ناحية هل سوف يكون إنشاء جدول أو التعديل على جدول أو حذف جدول أو ....
وأعيد و أكرر حيث أننا سوف نتعامل مع جدول إذن نحن نعرف أى جدول سوف نتعامل معه حيث سوف نفرق بينهم بالأسماء
كما أننا لابد أن نعبر عن ملامح هذا الجدول الذى نريد أن نتعامل معه من ناحية التخطيط المبدئى له
حيث هنا سوف نحدد له الكوليمات “ Columns” طبعا بمعنى الأعمدة كما ذكرنا سابقا
وأكيد أيضا طالما حددنا أعمدة لابد و أن نحدد لها أسماء كى نستطيع أن نتعامل مع الأعمدة من خلال معرفة إسم العمود المراد التعديل أو إنشاؤه أو حذفة أيضا كما ذكرنا سابقا
كلمة CallbackFunction يوضع لها دوال يمكن من خلالها على سبيل المثال متابعة عملية التسجيل فى قاعدة البيانات
وليست ذات أهمية فيمكن إهمالها و شطب كلمة nil و بهذا لن ثؤثر على الكود و لن تظهر فى الكود بعد إدراجة فيصبح
الكود النهائى كالتالى على سبيل المثال :
SQLite.Query(db, “create table abood(P_Id integer primary key, LastName text, FirstName text, Address text, City text)”);
طبعا هذا الكود السابق يرسم الطريقة التى سوف نسجل بها جدول فى قاعدة بيانات و أوضح لكم محتويات الكود مرة أخرى
db هو الهاندل لقاعدة البيانات التى نتعامل معها أو بمعنى أصح المقبض لقاعدة البيانات
كل ما هو داخل علامتى التنصيص هو مخطط بناء لجدول إسمه عبود abood هذا هو الإسم الذى إخترته أنا للجدول
الذى سوف نقوم بإنشاؤة وهنا أنا قلت أننا سوف ننشئ جدول حيث أننى إستخدمت كلمة create
هل نحن متفقين على ما سبق ؟
نعود إلى الكود مرة أخرى سوف نجد مكونات الجدول تم وضعها أنظر إلى الكود بالتفصيل الممل
و أيضا نجد كلمة P_Id هى نص أو إسم للعمود الأول وهو الفهرس
وباقى أسماء الأعمدة المراد إنشاؤها سوف تجدها أيضا داخل الكود
*** تذكير سريع لإجمالى ما سبق شرحة من أكواد كان كالتالى :
--
db = SQLite.Open(“ AutoPlay\\Docs\\data.db”);
SQLite.Query(db, “create table abood(P_Id integer primary key, LastName text, FirstName text, Address text, City text)”);
وصف سريع لما سوف يقوم به الكود هو إنشاء ملف قاعدة البيانات إن لم تكن موجودة و فتحها و بذلك يكون لها هاندل أو مقبض نظرا لأن الكود قام بالفتح ثم بعد ذلك يقوم برسم الهيكل المفترض ---
و إنشاء 5 أعمدة منها عمود الفهرس و الإسم الأخير و الإسم الأول والعنوان والمدينة لجدول إسمة abood كما طلبنا من الكود بالضبط
إلى هنا إنتهت مرحلة شرح إنشاء قاعدة البيانات ولم نحفظ بعد فى قاعدة البيانات لذلك تابع معى
قمنا سابقا بوضع مجموعة من الإينبوت و زر للحفظ داخل مشروع الأتوبلاى ميديا ستوديو وذلك بغرض
التطبيق الفعلى على حفظ البيانات داخل جدول داخل ملف قاعدة البيانات ومن هذا المنطلق نجد أن
للحصول على ما يكتب داخل الإينبوت يكون الكود النهائى على سبيل المثال كالتالى :
--
N_lastname = Input.GetText(“Input1”);
N_firstname = Input.GetText(“Input2”);
N_address = Input.GetText(“Input3”);
N_city = Input.GetText(“Input4”);
طبعا تم وضع متغير إفتراضى على سبيل المثال لحفظ ما يتم كتابتة فى كل إينبوت فى هذا المتغير
*** إذن سوف يكون السؤال هنا نحن أنشأنا أو فتحنا ملف قاعدة البيانات المراد التعامل معها و أيضا قمنا
برسم تخطيطى للجدول المراد التعامل معه و قمنا بإيجاد ما هو مكتوب فى كل إينبوت
ما هو شكل الكود لــ زر الحفظ إذن ؟
الجواب هو أنه كما قلنا سابقا سوف يكون هو نفس كود الإستعلام السابق SQLite.Query و لكن بتحديد مهمة العمل للكود فبدلا من إنشاء جدول سوف يكون إدخال إلى جدول تذكر معى التعليق أو التصريح الذى قلته سابقا وهو “ INSERT INTO” فيصبح الكود بنفس التفصيل السابق مع تغيير طفيف وهو كلمة او تعليق أو تصريح التعامل بالإدخال أو الإدراج فى الجدول
فيكون الكود كالتالى :
SQLite.Query(db, “insert into abood values(NULL, ‘”..N_lastname..”’,’”..N_firstname.. ’,’”..N_address..”’,’”..N_city..” ’)”);
نلاحظ فى الكود تصريح الإدخال أو الإدراج للجدول المسمى بــ عبود أيضا كلمة Values أى أننا
نعلم المترجم أننا سوف ندخل أو ندرج مجموعة من القيم لإدراجها أو إدخالها فى القوائم الهيكلية السابق إنشاؤها عند إنشاء الجدول فى البداية
هذه القيم تتمثل فى متغيرات المتحصلة مما يكتب فى الإينبوت وطبعا المتغير معبر فعلا عن قيم أو نصوص أو ما شابه مما يكتب داخل الإينبوت
نلاحظ أيضا وجود كلمة NULL يفضل تركها كما هى وهى معبرة عن الفهرس كما تتذكرون معى
وعند تركها كما هى فسوف يأخذ الفهرس التسلسل الطبيعى له دون تدخل منك
إلى هنا كل شيئ تم ذكرة واضح جدا و بالتفصيل الممل
**** إجمالى الأكواد المستخدمة والتى سوف نضعها بالكامل داخل زر الحفظ كالتالى :
--
db = SQLite.Open(“AutoPlay\\Docs\\data.db”);
SQLite.Query(db, “create table abood(P_Id, LastName text, FirstName text, Address text, City text)”);
N_lastname = Input.GetText(“Input1”);
N_firstname = Input.GetText(“Input2”);
N_address = Input.GetText(“Input3”);
N_city = Input.GetText(“Input4”);
SQLite.Query(db, “insert into abood values(NULL, ‘”..N_lastname..”’,’”..N_firstname.. ’,’”..N_address..”’,’”..N_city..” ’)”);
مثال تطبيقى على ما سبق كملف مفتوح المصدر apz :
تعليم السكوليت لحفظ البيانات1 (https://dl.dropboxusercontent.com/u/29881160/%D8%AA%D8%B9%D9%84%D9%8A%D9%85%20%D8%A7%D9%84%D8%B 3%D9%83%D9%88%D9%84%D9%8A%D8%AA%20%D9%84%D8%AD%D9% 81%D8%B8%20%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8 %A7%D8%AA1.apz)
http://i.imgur.com/VUYdPB9.gif
مرحلة إستدعاء البيانات المخزنة
مبدئيا لإستدعاء البيانات يجب أن يكون الهاندل أو المقبض لملف قاعدة البيانات مفتوح لذلك وجب التنبية على ضرورة فتح
المقبض لقاعدة البيانات حتى تتم عملية الإستدعاء بطريق صحيحة بدون مشاكل ولذلك علينا إما تكرار فتح مقبض قاعدة البيانات عند إجراء عملية الإستدعاء فنحن لا ندرى متى سوف نستدعى البيانات للإطلاع عليها ربما نريد أن نفتح العمل بعد إنهاؤه لمجرد الإطلاع فقط دون تسجيل جديد كما فعلنا سابقا أو الخيار الآخر وهو وضع كود فتح مقبض ملف قاعدة البيانات فى الحدث أون ستارت أب فى بداية تشغيل المشروع
سوف نستخدم الكود التالى :
SQLite.QueryToTable
عند إدراج هذا الكود فى المشروع سيكون كالتالى على سبيل المثال :
SQLite.QueryToTable(db, "select * from abood");
الشرح تم توضيحه فى الأكواد السابقة المشابهة لهذا الكود
هذا الكود سيعمل على تنفيذ إستعلامات على قاعدة البيانات والتى تحتوى على جدول إسمة عبود وسوف تخزن نتيجة الإستعلام
فى متغير على هيئة تيبل أو جدول بمعنى أن المتغير سيحتوى على مجموعة من البيانات
وفى حالة حدوث خطأ سوف يكون قيمة الإسترجاع فى المتغير تساوى نيل nil أما إذا تم الإجراء بنجاح دون أخطاء فسوف يكون الإرجاع فى الجدول كالتالى :
Rows: وهو عدد الصفوف فى نتيجة الإستعلام
Columns: وهو عدد الأعمدة فى نتيجة الإستعلام
ColumnNames: وهو جدول مفهرس رقميا يحتوى على أسماء الأعمدة فى نتيجة الإستعلام
Use .ColumnNames[<column_number>] to get the name of a column
فمثلا للحصول على إسم العمود الثالث يكتب كالتالى :
tbResult.ColumnNames[3] ;
Data: هو جدول يحتوي على البيانات التي تم إرجاعها بواسطة الاستعلام. ويتم تنظيم البيانات في جداول فرعية، واحدة لكل صف في نتيجة الاستعلام
يحتوي كل فرع جدول البيانات من صف واحد، فهرستها من قبل اسم العمود.
Use .Data[<row_number>] to access a row of data:
فمثلا للحصول على بيانات الصف الثانى يكتب كالتالى :
tbResult.Data[2];
ثم يتم إستخدام إسم العمود للوصول إلى قيمة الخلية كالتالى :
tbRow2["LastName"];
أو يتم أستخدام[ رقم الخلية][ إسم العمود] وذلك للوصول إلى قيمة الخلية مباشرة كالتالى :
tbResult.Data[2]["LastName"];
مثال على ذلك :
--
s=SQLite.QueryToTable(db, "select * from abood");
Input.SetText("Input1", s.Data[1]["LastName"]);
فى المثال السابق تم الإستعلام عن جدول إسمه عبود
وتم عرض نتيجة فى الإينبوت وهى معرفة الإسم الأخير للعمود رقم 1 فى الجدول
*** إذن نأخذ مثال مفتوح apz للتطبيق العملى
طبعا هذا المثال هو تطبيق للجدول المحفوظ سابقا والذى يتم الشرح عليه و هذا تذكير به فى الصورة التالية :
http://i.imgur.com/yNbnYIm.png
أترككم مع تحميل المثال المفتوح
تعليم السكوليت لحفظ البيانات 2 (https://dl.dropboxusercontent.com/u/29881160/%D8%AA%D8%B9%D9%84%D9%8A%D9%85%20%D8%A7%D9%84%D8%B 3%D9%83%D9%88%D9%84%D9%8A%D8%AA%20%D9%84%D8%AD%D9% 81%D8%B8%20%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8 %A7%D8%AA%202.apz)
حسب المتابعة سيتم طرح المزيد من الشروحات هذا إن كان أسلوبى فى الشرح واضح طبعا أنا أنتظـــــــر النقد و التصحيح و التوجيه فى حالة و جــــــود أخطاء فى الشرح و التوضيح
http://i.imgur.com/2GnNEXz.gif
سلسلة رقم 2 شرح بالتفصيل لقواعد البيانات سكيوليت Sqlite (http://www.abc4web.net/vb/showthread.php?t=29310)
سلسلة رقم 3 شرح بالتفصيل لقواعد البيانات سكيوليت Sqlite (http://www.abc4web.net/vb/showthread.php?t=29311)
سلسلة رقم 4 شرح بالتفصيل لقواعد البيانات سكيوليت Sqlite (http://www.abc4web.net/vb/showthread.php?t=29312)
http://i.imgur.com/Nz3B0Vj.gif
http://i.imgur.com/emf2NIh.gif
شرح قواعد البيانات سكيوليت SQL databases
السلسلة رقم 1
هي لغة قياسية للوصول إلى قواعد البيانات و التعامل مع قواعد البيانات
وهى تستخدم أحد مقاييس ANSI “ مؤسسة المقاييس القومية الأمريكية” وهناك العديد من الإصدارات المختلف لـــ لغة سكيوليت
ماذا يمكن أن تفعل بإستخدام الــ سكيوليت ؟
يمكن تنفيذ إستعلامات من قواعد البيانات
يمكن أن تسترجع البيانات من قواعد البيانات
يمكن إدراج سجلات فى قواعد البيانات
يمكن تحديث السجلات فى قواعد البيانات
يمكن حذف السجلات من قواعد البيانات
يمكن إنشاء قواعد بيانات جديدة
يمكن إنشاء جداول جديدة فى قواعد البيانات
يمكن إنشاء إجراءات تخزينية فى قواعد البيانات
يمكن إنشاء طرق عرض أو عروض فى قواعد البيانات
يمكن تعيين الأوذونات على الجداول والإجراءات و طرق العرض أو العروض
أولا : كيفية بناء الجمل فى قواعد بيانات السكيوليت
لتكوين الجمل فى قواعد البيانات إليك بعض الكلمات والتى تعبر عن أفعال سوف تتم عند إستخدامها مع قواعد البيانات
سكيوليت مثل (SELECT, UPDATE, DELETE, INSERT, WHERE)
قاعدة البيانات في معظم الأحيان تحتوي على جدول واحد أو أكثر. يتم تعريف كل جدول بواسطة اسم يعطى له
والجداول تحتوى على البيانات فى سجلات وهى الصفوف (Rows)
فعلى سبيل المثال لتوضيح ما سبق نأخذ ما تعرضة الصورة التالية :
http://i.imgur.com/yNbnYIm.png
مبدئيا أى جدول لابد و أن تضع له إسم معرف له كى تستطيع أن تستدعي منه أى بيانات تريدها وحتى تستطيع تمييز الجداول
عن بعضها و تفرق بين ما يحتوية كل جدول فالصورة السابقة توضح جدول كما تشاهدها
الجدول يحتوى على صفوف (ROWS) و أعمدة (Columns)
طبعا الصفوف هى كل ما هو أفقى بخط مستقيم
و أيضا الأعمدة هى كل ما هو رأسى بخط مستقيم
http://i.imgur.com/VUYdPB9.gif
* نضع فى إعتبارنا أن سكيوليت ليست حساسة لحالة الأحرف *
يمكن تقسيم تصريحات السكيوليت إلى قسمين و هما :
_ إستعلام وتحديث التعليقات يشكل جزء من السكيوليت (DML)
التعليقات أو التصريحات الأكثر أهمية هى كالتالى :
“SELECT” وهى تستخلص البيانات من قاعدة البيانات
“ UPDATE” وهى لتحديث البيانات داخل قاعدة البيانات
“ DELETE” وهى لحذف بيانات من داخل قاعدة البيانات
“ INSERT INTO” وهى لإدخال بيانات إلى قاعدة البيانات
_ رخص إنشاء أو حذف قوائم من قاعدة البيانات (DDL) هى تعرف أيضا بالفهارس (key)
لتحديد الروابط بين الجداول وتفرض قيود بين الجداول
التعليقات أو التصريحات الأكثر أهمية هى كالتالى :
“ CREATE DATABASE” وهى لإنشاء قواعد بيانات
“ ALTER DATABASE” وهى تعدل قواعد البيانات
“ CREATE TABLE” وهى لإنشاء جداول
“ ALTER TABLE” وهى لتعديل جداول
“ DROP TABLE” وهى لحذف جداول
“ CREATE INDEX” وهى لإنشاء فهرس (مفتاح البحث)
“ CREATE INDEX” وهى لحذف فهرس
فكما ذكرنا سابقا أن اللغة ليست حساسة لحالة الأحرف “ select “ أو “ SELECT “
http://i.imgur.com/VUYdPB9.gif
أولا : التعليق أو التصريحأ “ SELECT “ سوف يكون هناك طريقتان لكتابة هذا التصريح كما هو موضح بالأسفل :
SELECT column_name(s) FROM table_name
SELECT * FROM table_name
نأخذ مثالا لتوضيح الفرق بين الإثنين فنحن نريد من الجدول التالى أن نستخلص منه معلومات الأعمدة “الإسم الأول” و “الإسم الأخير” .... “ FirstName و LastName”
http://i.imgur.com/yNbnYIm.png
الشــــــــرح كما يلى :
بالنسبة للتصريح الأول و الذى كان “SELECT column_name(s) FROM table_name” الشرح كالتالى :
أولا كما ذكرنا سابقا أن select هى لإستخلاص بيانات من قاعدة البيانات
ثانيا كلمة column_name
وهى تعبر عن بيان العمود المراد إستخلاص بياناته بمعنى إسم العمود فإن كان أكثر من عمود نريد أن نستخلص بياناته
فإننا قمنا فى الإسم السابق الذى كان (column_name(s حيث حرف s يعبر عن أنه قد يكون هناك أكثر من عمود
وبالتالى سوف يتم كتابة الأعمدة أو بمعنى أصح أسماء الأعمدة المراد الإستعلام عنها فى قاعدة البيانات بجوار بعضهما مع الفصل بينهم بفاصلة ,
و التى نطلق عليها وا بالعربى
ثالثا كلمة FROM تعنى من
رابعا كلمة table_name وهى إسم الجدول المراد إستخلاص البيانات منه
** إذن إذا كنا نريد أن نستخلص أو نستعلم عن البيانات
“ FirstName و LastName”لعمود الإسم الأول و عمود الإسم الأخير
سوف يكون التصريح الكامل لعمل هذه المهمة كالتالى :
SELECT LastName,FirstName FROM Persons
** طبعا على إفتراض أن قمت بتسمية الجدول بإسم Persons
فيكون نتيجة الإستدعاء الذى قمت بتحديدة وحصرة بين الإسم الأول و الإسم الأخير كالتالى فى المستعرض والذى سوف أعبر عنه بقيمة متغير مثلا فيكون كالتالى :
http://i.imgur.com/oYVPDnx.png
http://i.imgur.com/VUYdPB9.gif
بالنسبة للتصريح الثانى و الذى كان “ SELECT * FROM table_name” الشرح كالتالى :
أولا كما ذكرنا سابقا أن select هى لإستخلاص بيانات من قاعدة البيانات
العلامة النجمية (*) هي طريقة سريعة لتحديد كافة الأعمدة ثانيا
ثالثا كلمة FROM تعنى من
رابعا كلمة table_name وهى إسم الجدول المراد إستخلاص البيانات منه
إذن إذا كنا نرد أن نستخلص أو نستعلم عن كافة بيانات الأعمدة بالكامل سوف يكون التصريح الكامل لهذة المهمة كالتالى :
SELECT * FROM Persons
**طبعا على إفتراض أن قمت بتسمية الجدول بإسم Persons
فيكون نتيجة الإستدعاء هو كامل محتويات بيانات كافة الأعمدة من قاعدة البيانات المحددة مسبقا
http://i.imgur.com/VUYdPB9.gif
الآن نتجه نحو برنامج الأتوبلاى ميديا ستوديو لتطبيق ما سبق عمليا مع مراعاه تنشيط الإضافة سكيوليت وهى من النوع أكشن بليجين طبعا للتنشيط للإضافة
ثم يتم وضع علامة صح أمام إسم الإضافة .........<...Project.........>...Plugins
http://i.imgur.com/otBcLBC.png
بعد فتح مشروع جديد و تنشيط الإضافة سكيوليت نقوم بإدراج 4 إينبوت لإدخال البيانات عن طريقه إلى قاعدة البيانات
نقوم بإدراج زر ونقوم بكتابة إسم له و ليكن حفظ على سبيل المثال و سوف تكون مهمته هو تسجيل البيانات التى سوف يستقبلها من إينبوت الإدخال
مبدئيا سوف نتعامل مع قاعدة بيانات أليس كذلك ؟
نعم سوف نتعامل مع قاعدة بيانات إذن هل هى موجودة أم لا ؟
إذا كانت غير موجودة إذن علينا أن ننشئها أليس كذلك ؟
نعم سوف نقوم بإنشائها إن لم تكن موجودة وإن كانت موجودة علينا أن نعرف مسارها التى هى موجودة فيه أليس كذلك ؟
فى هذا المثال سوف نحدد أن تكون قاعدة البيانات داخل مجلد الدوكس داخل المشروع وذلك على سبيل المثال
ومن هنا لإنشاء قاعدة بيانات جديدة أو فتح قاعدة بيانات موجودة سوف نستخدم أمر من أوامر الإضافة سكيوليت وهو SQLite.Open
عند إدراجة سوف تظهر هذه النافذة كما هو موضح بالصورة التالية :
http://i.imgur.com/F1K0tMW.png
وفيها يكون مسار قاعدة البيانات المراد إنشائها أو فتحها حتى نستطيع أن نتعامل معها و يكون المسار فى السطر الأول من الصورة
والذى يعبر عنه فى الصورة بالمتغير Filename قم بحذف هذا المسار والذى كان إفتراضيا بهذا الشكل “C:\\MyFolder\\MyDatabase.db”
وقم بكتابة مسار فولدر الدوكس والذى سوف يكون كالتالى “AutoPlay\\Docs\\data.db”
حيث أنه من المعروف أن كلمة data هى إسم إفتراضى منى أنا على سبيل المثال
ولكى أوضح لك أن هذا الإسم يمكن تغييرة كما تريد و سوف يكون هو إسم قاعدة البيانات
وطبعا “.db” هو إمتداد قاعدة البيانات حيث يوضح أن قاعدة البيانات سوف تكون من النوع داتا باس
كما هو موضح بالصورة السابقة المتغير الثانى فى الصورة والذى يعبر عنه الأمر بـــ ResultVariable سوف يكون إفتراضيا result
نقوم بإعادة تسميته لمتغير على سبيل المثال سوف يكون db مع أخذنا فى الإعتبار أنه يمكنك إختيار كتابة أى متغير آخر فهذا على سبيل المثال فقط
وبعد إتمام مراحل كتابة مسار قاعدة البيانات و إسم متغير مناسب سوف يكون الكود النهائى بعد الضغط على زر فينيش كالتالى :
db = SQLite.Open(“AutoPlay\\Docs\\data.db”);
نعود و نذكر إن لم تكن قاعدة البيانات موجود سوف يتم إنشائها أوتوماتيكيا
عن طريق الكود السابق الذى قمنا بإدراجة أصبح لدينا ملف لقاعدة البيانات و لم يتم التعامل مع القاعدة بعد
لذلك علينا أن نقوم برسم الطريق الذى سوف نمشى فيه وبالخطوة السابقة قمنا برسم أين سنذهب فكان الجواب أننا سوف نذهب إلى قاعدة البيانات إذن علينا أن نفكر كيف سوف نفعل داخلها و على ذلك سوف نعمل على رسم جدول حتى نقوم بالتخزين فية و من هذا المنطلق فإنه كما ذكرنا سابقا لابد و أن يكون الجدول الذى سوف نحررأو نقوم بالإضافة فية
أن يكون له إسم يميزه عن باقى الجداول ففقاعدة البيانات تسمح بتخزين جداول كثيرة جدااااااا وبما سبق ذكرة من خلال متابعة الشرح نجد أنه كان هناك ضوابط للتعامل مع الجداول من خلال التصريحات العامة التى ذكرناها سابقا
نعود إلى التكلم عن ما ذكرناه سابقا ولكن على طريقة الأتوبلاى ميديا ستوديو من خلال إضافة السكيوليت التى نستخدمها حاليا لذلك سوف نستخدم أمر للتعامل مع الجداول و سوف يكون هو كالتالى : SQLite.Query
التالية ينفذ استعلام على قاعدة بيانات SQLite عند إدراجة سوف تظهر هذه النافذة كما هو موضح بالصورة :
http://i.imgur.com/BOPtt3x.png
وفيها يكون dbHandle هو متغير ثابت موجود فى الأمر كما هو موضح أما المتغير الإفتراضى و الذى يكون db
فيمكن تغييرة كما نريد شرط أن يكون مطابقا تماما للمتغير الذى إستعملناه فى إنشاء أو فتح قاعدة البيانات والذى كان يعبر عن فتح قاعدة البيانات
وعلى ذلك فإن خلاصة التعبير عن المتغير هذا هو الهاندل أو مقبض قاعدة البيانات التى سوف نتعامل معها
كلمة Query هى أيضا متغير سابق ثابت يتم فية كتابة طريقة الإستعلام التى نريدها من حيث تحديد نوع الإستعلام
من ناحية هل سوف يكون إنشاء جدول أو التعديل على جدول أو حذف جدول أو ....
وأعيد و أكرر حيث أننا سوف نتعامل مع جدول إذن نحن نعرف أى جدول سوف نتعامل معه حيث سوف نفرق بينهم بالأسماء
كما أننا لابد أن نعبر عن ملامح هذا الجدول الذى نريد أن نتعامل معه من ناحية التخطيط المبدئى له
حيث هنا سوف نحدد له الكوليمات “ Columns” طبعا بمعنى الأعمدة كما ذكرنا سابقا
وأكيد أيضا طالما حددنا أعمدة لابد و أن نحدد لها أسماء كى نستطيع أن نتعامل مع الأعمدة من خلال معرفة إسم العمود المراد التعديل أو إنشاؤه أو حذفة أيضا كما ذكرنا سابقا
كلمة CallbackFunction يوضع لها دوال يمكن من خلالها على سبيل المثال متابعة عملية التسجيل فى قاعدة البيانات
وليست ذات أهمية فيمكن إهمالها و شطب كلمة nil و بهذا لن ثؤثر على الكود و لن تظهر فى الكود بعد إدراجة فيصبح
الكود النهائى كالتالى على سبيل المثال :
SQLite.Query(db, “create table abood(P_Id integer primary key, LastName text, FirstName text, Address text, City text)”);
طبعا هذا الكود السابق يرسم الطريقة التى سوف نسجل بها جدول فى قاعدة بيانات و أوضح لكم محتويات الكود مرة أخرى
db هو الهاندل لقاعدة البيانات التى نتعامل معها أو بمعنى أصح المقبض لقاعدة البيانات
كل ما هو داخل علامتى التنصيص هو مخطط بناء لجدول إسمه عبود abood هذا هو الإسم الذى إخترته أنا للجدول
الذى سوف نقوم بإنشاؤة وهنا أنا قلت أننا سوف ننشئ جدول حيث أننى إستخدمت كلمة create
هل نحن متفقين على ما سبق ؟
نعود إلى الكود مرة أخرى سوف نجد مكونات الجدول تم وضعها أنظر إلى الكود بالتفصيل الممل
و أيضا نجد كلمة P_Id هى نص أو إسم للعمود الأول وهو الفهرس
وباقى أسماء الأعمدة المراد إنشاؤها سوف تجدها أيضا داخل الكود
*** تذكير سريع لإجمالى ما سبق شرحة من أكواد كان كالتالى :
--
db = SQLite.Open(“ AutoPlay\\Docs\\data.db”);
SQLite.Query(db, “create table abood(P_Id integer primary key, LastName text, FirstName text, Address text, City text)”);
وصف سريع لما سوف يقوم به الكود هو إنشاء ملف قاعدة البيانات إن لم تكن موجودة و فتحها و بذلك يكون لها هاندل أو مقبض نظرا لأن الكود قام بالفتح ثم بعد ذلك يقوم برسم الهيكل المفترض ---
و إنشاء 5 أعمدة منها عمود الفهرس و الإسم الأخير و الإسم الأول والعنوان والمدينة لجدول إسمة abood كما طلبنا من الكود بالضبط
إلى هنا إنتهت مرحلة شرح إنشاء قاعدة البيانات ولم نحفظ بعد فى قاعدة البيانات لذلك تابع معى
قمنا سابقا بوضع مجموعة من الإينبوت و زر للحفظ داخل مشروع الأتوبلاى ميديا ستوديو وذلك بغرض
التطبيق الفعلى على حفظ البيانات داخل جدول داخل ملف قاعدة البيانات ومن هذا المنطلق نجد أن
للحصول على ما يكتب داخل الإينبوت يكون الكود النهائى على سبيل المثال كالتالى :
--
N_lastname = Input.GetText(“Input1”);
N_firstname = Input.GetText(“Input2”);
N_address = Input.GetText(“Input3”);
N_city = Input.GetText(“Input4”);
طبعا تم وضع متغير إفتراضى على سبيل المثال لحفظ ما يتم كتابتة فى كل إينبوت فى هذا المتغير
*** إذن سوف يكون السؤال هنا نحن أنشأنا أو فتحنا ملف قاعدة البيانات المراد التعامل معها و أيضا قمنا
برسم تخطيطى للجدول المراد التعامل معه و قمنا بإيجاد ما هو مكتوب فى كل إينبوت
ما هو شكل الكود لــ زر الحفظ إذن ؟
الجواب هو أنه كما قلنا سابقا سوف يكون هو نفس كود الإستعلام السابق SQLite.Query و لكن بتحديد مهمة العمل للكود فبدلا من إنشاء جدول سوف يكون إدخال إلى جدول تذكر معى التعليق أو التصريح الذى قلته سابقا وهو “ INSERT INTO” فيصبح الكود بنفس التفصيل السابق مع تغيير طفيف وهو كلمة او تعليق أو تصريح التعامل بالإدخال أو الإدراج فى الجدول
فيكون الكود كالتالى :
SQLite.Query(db, “insert into abood values(NULL, ‘”..N_lastname..”’,’”..N_firstname.. ’,’”..N_address..”’,’”..N_city..” ’)”);
نلاحظ فى الكود تصريح الإدخال أو الإدراج للجدول المسمى بــ عبود أيضا كلمة Values أى أننا
نعلم المترجم أننا سوف ندخل أو ندرج مجموعة من القيم لإدراجها أو إدخالها فى القوائم الهيكلية السابق إنشاؤها عند إنشاء الجدول فى البداية
هذه القيم تتمثل فى متغيرات المتحصلة مما يكتب فى الإينبوت وطبعا المتغير معبر فعلا عن قيم أو نصوص أو ما شابه مما يكتب داخل الإينبوت
نلاحظ أيضا وجود كلمة NULL يفضل تركها كما هى وهى معبرة عن الفهرس كما تتذكرون معى
وعند تركها كما هى فسوف يأخذ الفهرس التسلسل الطبيعى له دون تدخل منك
إلى هنا كل شيئ تم ذكرة واضح جدا و بالتفصيل الممل
**** إجمالى الأكواد المستخدمة والتى سوف نضعها بالكامل داخل زر الحفظ كالتالى :
--
db = SQLite.Open(“AutoPlay\\Docs\\data.db”);
SQLite.Query(db, “create table abood(P_Id, LastName text, FirstName text, Address text, City text)”);
N_lastname = Input.GetText(“Input1”);
N_firstname = Input.GetText(“Input2”);
N_address = Input.GetText(“Input3”);
N_city = Input.GetText(“Input4”);
SQLite.Query(db, “insert into abood values(NULL, ‘”..N_lastname..”’,’”..N_firstname.. ’,’”..N_address..”’,’”..N_city..” ’)”);
مثال تطبيقى على ما سبق كملف مفتوح المصدر apz :
تعليم السكوليت لحفظ البيانات1 (https://dl.dropboxusercontent.com/u/29881160/%D8%AA%D8%B9%D9%84%D9%8A%D9%85%20%D8%A7%D9%84%D8%B 3%D9%83%D9%88%D9%84%D9%8A%D8%AA%20%D9%84%D8%AD%D9% 81%D8%B8%20%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8 %A7%D8%AA1.apz)
http://i.imgur.com/VUYdPB9.gif
مرحلة إستدعاء البيانات المخزنة
مبدئيا لإستدعاء البيانات يجب أن يكون الهاندل أو المقبض لملف قاعدة البيانات مفتوح لذلك وجب التنبية على ضرورة فتح
المقبض لقاعدة البيانات حتى تتم عملية الإستدعاء بطريق صحيحة بدون مشاكل ولذلك علينا إما تكرار فتح مقبض قاعدة البيانات عند إجراء عملية الإستدعاء فنحن لا ندرى متى سوف نستدعى البيانات للإطلاع عليها ربما نريد أن نفتح العمل بعد إنهاؤه لمجرد الإطلاع فقط دون تسجيل جديد كما فعلنا سابقا أو الخيار الآخر وهو وضع كود فتح مقبض ملف قاعدة البيانات فى الحدث أون ستارت أب فى بداية تشغيل المشروع
سوف نستخدم الكود التالى :
SQLite.QueryToTable
عند إدراج هذا الكود فى المشروع سيكون كالتالى على سبيل المثال :
SQLite.QueryToTable(db, "select * from abood");
الشرح تم توضيحه فى الأكواد السابقة المشابهة لهذا الكود
هذا الكود سيعمل على تنفيذ إستعلامات على قاعدة البيانات والتى تحتوى على جدول إسمة عبود وسوف تخزن نتيجة الإستعلام
فى متغير على هيئة تيبل أو جدول بمعنى أن المتغير سيحتوى على مجموعة من البيانات
وفى حالة حدوث خطأ سوف يكون قيمة الإسترجاع فى المتغير تساوى نيل nil أما إذا تم الإجراء بنجاح دون أخطاء فسوف يكون الإرجاع فى الجدول كالتالى :
Rows: وهو عدد الصفوف فى نتيجة الإستعلام
Columns: وهو عدد الأعمدة فى نتيجة الإستعلام
ColumnNames: وهو جدول مفهرس رقميا يحتوى على أسماء الأعمدة فى نتيجة الإستعلام
Use .ColumnNames[<column_number>] to get the name of a column
فمثلا للحصول على إسم العمود الثالث يكتب كالتالى :
tbResult.ColumnNames[3] ;
Data: هو جدول يحتوي على البيانات التي تم إرجاعها بواسطة الاستعلام. ويتم تنظيم البيانات في جداول فرعية، واحدة لكل صف في نتيجة الاستعلام
يحتوي كل فرع جدول البيانات من صف واحد، فهرستها من قبل اسم العمود.
Use .Data[<row_number>] to access a row of data:
فمثلا للحصول على بيانات الصف الثانى يكتب كالتالى :
tbResult.Data[2];
ثم يتم إستخدام إسم العمود للوصول إلى قيمة الخلية كالتالى :
tbRow2["LastName"];
أو يتم أستخدام[ رقم الخلية][ إسم العمود] وذلك للوصول إلى قيمة الخلية مباشرة كالتالى :
tbResult.Data[2]["LastName"];
مثال على ذلك :
--
s=SQLite.QueryToTable(db, "select * from abood");
Input.SetText("Input1", s.Data[1]["LastName"]);
فى المثال السابق تم الإستعلام عن جدول إسمه عبود
وتم عرض نتيجة فى الإينبوت وهى معرفة الإسم الأخير للعمود رقم 1 فى الجدول
*** إذن نأخذ مثال مفتوح apz للتطبيق العملى
طبعا هذا المثال هو تطبيق للجدول المحفوظ سابقا والذى يتم الشرح عليه و هذا تذكير به فى الصورة التالية :
http://i.imgur.com/yNbnYIm.png
أترككم مع تحميل المثال المفتوح
تعليم السكوليت لحفظ البيانات 2 (https://dl.dropboxusercontent.com/u/29881160/%D8%AA%D8%B9%D9%84%D9%8A%D9%85%20%D8%A7%D9%84%D8%B 3%D9%83%D9%88%D9%84%D9%8A%D8%AA%20%D9%84%D8%AD%D9% 81%D8%B8%20%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8 %A7%D8%AA%202.apz)
حسب المتابعة سيتم طرح المزيد من الشروحات هذا إن كان أسلوبى فى الشرح واضح طبعا أنا أنتظـــــــر النقد و التصحيح و التوجيه فى حالة و جــــــود أخطاء فى الشرح و التوضيح
http://i.imgur.com/2GnNEXz.gif
سلسلة رقم 2 شرح بالتفصيل لقواعد البيانات سكيوليت Sqlite (http://www.abc4web.net/vb/showthread.php?t=29310)
سلسلة رقم 3 شرح بالتفصيل لقواعد البيانات سكيوليت Sqlite (http://www.abc4web.net/vb/showthread.php?t=29311)
سلسلة رقم 4 شرح بالتفصيل لقواعد البيانات سكيوليت Sqlite (http://www.abc4web.net/vb/showthread.php?t=29312)
http://i.imgur.com/Nz3B0Vj.gif