المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : سلسلة رقم 1 شرح بالتفصيل لقواعد البيانات سكيوليت Sqlite


عبود عبود
20-04-2013, 01: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

ثامر أبو بلقيس
20-04-2013, 01:26 PM
عطاء منقطع النظير ... و ايصال المعلومة كاملة منسقة
تلك العناوين التي تميز الأخ الكريم
الله يجازيك كل خير و يوفقك في كل أعمالك

بارك الله فيك

أبدعت في الشرح و الاختيار

طاهريالعيد
20-04-2013, 01:33 PM
مشكووووووورييين

المتعملق
20-04-2013, 01:41 PM
رائع أخي عبود وجميل منك هذا الدرس جزاك الله خيرا
هذا مانحتاج اليه
شكرا جزيلا أخي

أبو يوسف
20-04-2013, 01:56 PM
جزاك الله خيرا اخانا عبود على هذا الشرح الرائع السهل :abc_152:

azizsoft
20-04-2013, 04:03 PM
بسم الله الرحمن الرحيم

ماشاء الله أستاذ عبود شرح مميز ورائع جدا
بالتأكيد هو انجاز يحسب لك اعتبارا لآهمية مسألة قواعد البيانات من جهة
وأخرى لندرة وجود شروحات عربية لها بالشبكة.

ان شاء الله يتم جمع السلسلة في كتاب الكتروني مميز تقديرا لجهودكم
فاحرص على نفس التسلسل .

جزاكم الله كل خير ونفع بكم

وفقكم الله

خادم المسلمين
20-04-2013, 04:40 PM
مشكور اخى عبود

ولكن يا ريت اخى تعمل لنا شرح فلاشى او فييو
يضح انشاء الشروع من بدايته ويكون مرجعا لكل المبرمجين بالاوتو بلاى

حاول اخى

Haitham.2012
20-04-2013, 06:44 PM
رائع أخي الأمير .. ما شاء الله عليك متى يتوفر لي الوقت سأراجع الموضوع بعنايه

abohmam
20-04-2013, 10:05 PM
جزاك الله خيرا اخانا عبود

:teslam:

ماشاء الله شرح رائع ومميز سيكون مرجعا لنا ان شاء الله

عبود عبود
20-04-2013, 10:44 PM
أشكركم جميعا على هذا المرور العطــــــر
بارك الله فيكم و أتمنى لكم التوفيق و أتمنى أن أستطيع أن أقدم ما يمكن أن يفيدكم

تحياتى لكم جميعا إخوانى :abc_138:

النصل القاطع
20-04-2013, 11:33 PM
بارك الله فيك اخى الأمير
:abc_152:
لكن على ما يبدو لديك مشكل فى إنشاء الجداول
:abc_070:
SQLite.Query(db, “create table abood(P_Id, LastName text, FirstName text, Address text, City text)”);

لا أعلم مدى صحة عدم تعريف الحقل الأول الذى أسميته P_Id :abc_088: وهو بالقطع حقل المفتاح الأساسى
أعتقد هنا خطأ
يجب أن يعرف حقل المفتاح بالعبارة integer primery key
حتى تعتبرها السيكوال حقل المفتاح (الترقيم التلقائى الفريد الغير متكرر و أيضا الغير معوض بالحذف )
عموما لا أعتقد أنه من الصحيح ترك أى حقل بدون تعريف
بالتوفيق

ذ عبد الرحيم
20-04-2013, 11:47 PM
جزاك الله خيرا اخانا عبود

عبود عبود
21-04-2013, 06:06 AM
بارك الله فيك اخى الأمير
:abc_152:
لكن على ما يبدو لديك مشكل فى إنشاء الجداول
:abc_070:

لا أعلم مدى صحة عدم تعريف الحقل الأول الذى أسميته P_Id :abc_088: وهو بالقطع حقل المفتاح الأساسى
أعتقد هنا خطأ
يجب أن يعرف حقل المفتاح بالعبارة integer primery key
حتى تعتبرها السيكوال حقل المفتاح (الترقيم التلقائى الفريد الغير متكرر و أيضا الغير معوض بالحذف )
عموما لا أعتقد أنه من الصحيح ترك أى حقل بدون تعريف
بالتوفيق

على العكس تماما أخى فهذا التعبير الذى إسمة integer primery key هو مجرد وصف لما سوف يكون فى هذه الخانة وهو الفهرس لذلك بما إنى أنا أريد إنشاء جدول خاص بى " وكان هذا مقصود منى حتى أبسط للجميع عدم التقييد نهائيا "

فليس على الإلتزام بالنص السابق و إنما أضع النص الذى أريد دون تقييد نهائيا فقد قمت بالتعويض عنه بالإسم P_Id .


هكذا أريد مثل هذه النقاشات لتبادل أو إصلاح معلومة لدى فإما أن تقنعنى و إما أن تقتنع أنت :abc_065:

شكرا جزيلا أخى خالد لهذا المرور الجميل و التعليق الرائع.

نقطة حرف
21-04-2013, 01:01 PM
بارك الله فيك يا أخي ..

لم تترك لنا شاردة وواردة إلا أوضحتها في شرحك


لا حرمك الله الأجر

النصل القاطع
21-04-2013, 03:38 PM
على العكس تماما أخى فهذا التعبير الذى إسمة integer primery key هو مجرد وصف لما سوف يكون فى هذه الخانة وهو الفهرس لذلك بما إنى أنا أريد إنشاء جدول خاص بى " وكان هذا مقصود منى حتى أبسط للجميع عدم التقييد نهائيا "

فليس على الإلتزام بالنص السابق و إنما أضع النص الذى أريد دون تقييد نهائيا فقد قمت بالتعويض عنه بالإسم P_Id .


هكذا أريد مثل هذه النقاشات لتبادل أو إصلاح معلومة لدى فإما أن تقنعنى و إما أن تقتنع أنت :abc_065:

شكرا جزيلا أخى خالد لهذا المرور الجميل و التعليق الرائع.
لم تقرأ مشاركتى جيدا
ذكرت بالنص
يجب أن يعرف حقل المفتاح بالعبارة integer primery key
أنا لم أقل لك "لابد أن يسمى" بل قلت "يجب أن يعرف" فماذا نفهم من ذلك ؟؟ نفهم الآتى :-
أنا لم أعترض على التسمية P_Id
أنا أعترضت على عدم التعريف
بداية أجب على هذا السؤال :- لم قمت بإنشاء الجدول ؟؟
لو كانت إجابتك هى " أنشأت الجدول لأشاهد جماله و أتفرج على حقوله الفارغة الناصعة البياض كالثلج" فأنصحك بعدم متابعة قراءة هذه المداخلة و تجاهل مداخلتى السابقة
أما لو كنت تنوى تعبئة الجدول ببيانات لتستفيد من الجدول فعليك هنا أن تتحملنى قليلا (ربما كثيرا) و تقرأ باقى المشاركة

بسم الله نبدأ
أنت تقول أن integer primery key مجرد وصف ؟؟؟؟؟
من قال لك ذلك ؟؟؟؟؟
أخى العزيز حاول أن تخرج هذا المفهوم الخطأ من ذهنك سريعا سريعا
و بعيدا عن الإستنتاجات و التصورات إليك الحقائق
integer primery key ليس وصف بل تعريف مسبق تفهمه السيكوال جيدا و بناء عليه تنشئ الفهرس
integer تعنى عدد صحيح موجب
primery key تعنى ترقيم تلقائى تصاعدى لا يقبل التكرار و لا يحل محله رقم مشابه حتى لو حذف مسبقا

فليس على الإلتزام بالنص السابق و إنما أضع النص الذى أريد دون تقييد نهائيا فقد قمت بالتعويض عنه بالإسم P_Id
بل عليك الإلتزام حرفيا (وفقا لما ذكرت أن الحقل هو فهرس) و حتى لو لم يكن فهرس فلابد أيضا من تعريفه
و للمرة الثانية صحح فى ذهنك فكرة أن P_Id قد عوضت عن integer primery key فلا يمكن للإسم أن يعوض عن التعريف
عفوا فهما مختلفان جذريا
و فعلا أنت تجاهلت القواعد عندما تجاهلت تعريف الحقل بكل بساطة
و كذلك فأيضا و بكل بساطة ستتجاهلك السيكوال و تنشئ لك حقلا فارغا غير معرف و غير قابل لإدراج أى نوع من البيانات
بل الأسوأ من ذلك
لن تتمكن من وضع أى بيانات فى الجدول كله لو بدأت الأمر insert بملئ هذا الحقل المجهول النسب و الهوية
هنا قاعدة
إن تجاهلت قواعد السيكوال فسوف تتجاهل السيكوال أوامرك
وكان هذا مقصود منى حتى أبسط للجميع عدم التقييد نهائيا
كنت أتمنى ذلك و لكن بكل أسف الجميع مضطرين للتقيد كليا و حرفيا بالقواعد (هذا إن أرادوا لأكوادهم أن تعمل)
ملخص القول
سواء كان الحقل فهرس أم لا ... نص أم رقم ......... لا يهم
المهم هو وضع تعريف الحقل بجوار الحقل و قبل وضع الفاصلة

هكذا أريد مثل هذه النقاشات لتبادل أو إصلاح معلومة لدى فإما أن تقنعنى و إما أن تقتنع أنت
أتفق معك حتى كلمة إصلاح المعلومة
أما الإقناع و الإقتناع فلا يكون بمناقشة الثوابت
الثوابت لا تقبل النقاش (ئؤدى لجدل)
عدا ذلك المناقشة مفتوحة

ومنعا للجدل و لإنهاء تلك النقطة
حاول عمل insert فى هذا الجدول و خبرنى
هل تمكنت من تعبئة الحقل P_Id بأية بيانات ؟؟
لو تمكنت فضع لى ملفا مفتوحا للتوضيح فربما لم أحسن فهم وجهة نظرك
تقبل تحياتى

الحارث بن فيصل
21-04-2013, 03:44 PM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

عبود عبود
22-04-2013, 05:47 PM
شكرا جزيلا على تصحيح المعلومة أخى خالد

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

سوف يتم حذف الموضوع مؤقتا عذرا للجميع :abc_138:

النصل القاطع
22-04-2013, 05:54 PM
شكرا جزيلا على تصحيح المعلومة أخى خالد

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

سوف يتم حذف الموضوع مؤقتا عذرا للجميع :abc_138:

كلا أخى الأمير لا تحذف الموضوع
عليك فقط تعديل كود إنشاء الجدول
و بدلا من P_Id
يكون
P_Id متبوعة بأحد التعاريف مثل
text أو integer
و لو أردت لهذا الحقل أن يكون الفهرس عرفه
integer primery key
عدا ذلك الموضوع جيد و لا يستحق الحذف
و لو كنت تضايقت من مداخلاتى
فإعلم أنها كانت لصالح ترسيخ المفاهيم عندك و عند باقى رواد المنتدى و لا شيئ عدا ذلك
و لو لا زلت متضايق أعدك بعدم مداخلتك لاحقا

تحياتى
أخوك خالد

عبود عبود
22-04-2013, 06:23 PM
لا و الله يا أستاذى القدير

فأنا على العكس تماما فأنا أستوعب ما صدر منك من توجيهات و تصحيحات

و على فكرة من بداية طرحى للموضوع كنت أنتظر مداخلتك بفارغ الصبر :abc_065: لكن مش لازم أقولك بقى :abc_005:

و بالعكس تماما أنزعج إذا كان هناك خطأ مقدم أو مفهوم لم يصل بالشكل المناسب فكل ما يهمنى هو قارئ الموضوع فربما يكون مرجعا له بعد ذلك

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

أخوك عبود أو أمير " أحتاج مداخلتك كثيرا أستاذى "

النصل القاطع
22-04-2013, 06:49 PM
حسنا أخى أمير
خذ وقتك (فعلى ما فهمت أنك ستعيد صياغة بعض الفقرات فى الشرح و ليس فقط تعديل الكود)
و لا تقلق لا زلت أراقب الموضوع
فإن وجدت ما يستحق المداخلة سأتداخل

بعد إكتمال الموضوع سيتم حذف المداخلات الزائدة من الموضوع
أو قم بعمل موضوع جديد و سيتم حذف هذا الموضوع بأكمله
الخيار لك

عبود عبود
23-04-2013, 11:31 AM
تم تعديل بسيط لإضافة تعريف إلى عمود الفهرس حتى يسهل التعرف عليه من قبل السكيوليت

و ستتوالى التوضيحات مع التذكير بما سبق فى أى شرح سوف يقدم فى الشروحات القادمة إن شاء الله

:abc_052:

azizsoft
23-04-2013, 01:05 PM
بسم الله الرحمن الرحيم

بارك الله فيكم جميعا ونفع بكم

عبدالولي
25-04-2013, 08:39 AM
السلام عليكم ورحمة الله وبركاته
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .
:abc_023:

أبو فارس
26-04-2013, 09:52 AM
جزاكم الله كل خير ونفع بكم الإسلام والمسلمين

لا عدمنا جديدكم ومواضيعكم المميزة والرآقية كـرقيكم

مصطفي كامل
28-04-2013, 08:52 AM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

مصطفي كامل
02-05-2013, 05:17 PM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

امل الماضي
14-05-2013, 06:42 AM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

سعد حسني
22-06-2013, 04:42 PM
جزاك الله خيرا أخي الكريم

رعد الحواسيب
14-07-2013, 03:42 AM
بسم الله ماشاء الله ..

شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

عاصم المرابطي
25-09-2013, 10:49 PM
Thaaaaansk

الكبيراوى
27-09-2013, 05:35 PM
https://lh6.ggpht.com/ljsBlBRMogh_nP_CuBBoS3ux8F6J5KB8Uo4A-75cCGGKj9RyVTEMUyE_nP9-Nhwk99bw=w300
:abc_091:

الهمام
28-09-2013, 07:04 PM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

سعيد ادم
21-11-2013, 09:27 PM
بارك الله فيك أخي

كريم م عبد الله
27-02-2014, 12:31 AM
بسم الله الرحمن الرحيم
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

فرح صالحي
12-03-2014, 06:03 PM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية . :abc_152:

محمود عبدالوهاب
16-03-2014, 10:54 PM
جزاكم الله خيرا

ياسرهتهت
17-03-2014, 12:00 AM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

عبود عبود
17-03-2014, 02:18 AM
أهلا ومرحبا بمروركم جميعا وأتمنى لكم التوفيق و الإستفادة مما تم تقديمة

:abc_138:

الأمل القادم
24-03-2014, 03:28 AM
شكرا جزاك الله خيرا

في المثال الثاني المفتوح عندما نريد حذف
صف ما الطريقة ؟ شكرا .

الأمل القادم
24-03-2014, 02:10 PM
حاولت ولكن لم يتم الحذف
لا أعرف أين الخطأ
db = SQLite.Open("AutoPlay\\Docs\\data.db");
s=SQLite.QueryToTable(db, "select * from abood");
sSQL= "DELETE FROM abood WHERE P_Id = "..2 ;
SQLite.Query(db, sSQL)
SQLite.Close(db);

محمد الشيمى
27-03-2014, 06:02 PM
انت فعلا استاذ :abc_050::abc_050::abc_050:

ثامر أبو بلقيس
28-03-2014, 12:06 PM
أضم صوتي لمن سبقني
لكن طال انتظاري للحلقة الموالية
وخاصة تقنية البحث في قاعدة البيانات و التعديل فيها و الحذف

على نفس الأمثلة :abc_088:

نرجو اعطاء اولوية للإنشغال :abc_152:

عبود عبود
28-03-2014, 12:53 PM
أضم صوتي لمن سبقني
لكن طال انتظاري للحلقة الموالية
وخاصة تقنية البحث في قاعدة البيانات و التعديل فيها و الحذف

على نفس الأمثلة :abc_088:

نرجو اعطاء اولوية للإنشغال :abc_152:

إن شاء الله خلال يومين على الأكثر

ثامر أبو بلقيس
28-03-2014, 01:13 PM
سعدت لهذا الرد
ندعو لكم بكل خير إن شاء الله :abc_138:

ثامر أبو بلقيس
12-04-2014, 12:09 PM
:abc_104::abc_088:

عبود عبود
18-04-2014, 02:47 PM
سوف نواصل جزء آخر اليوم هذا المساء

إن شاء الله

تحياتى للمتابعين وطالبى التعلم :abc_138:

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

تم وضع الجزء الثانى وهو سلسلة رقم 2 لتحديث البيانات داخل قاعة البيانات على الرابط التالى :

سلسلة رقم 2 شرح بالتفصيل لقواعد البيانات سكيوليت Sqlite
(http://www.abc4web.net/vb/showthread.php?p=261497#post261497)

أحمدعبدالفتاح
25-05-2014, 11:28 AM
بارك الله فيك

احمد احماني
20-07-2014, 01:46 AM
بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية . شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

السعيد الجزائري
30-07-2014, 11:40 AM
السلام عليكم ورحمة الله وبركاته شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

دواف نت
06-08-2014, 01:38 PM
مشكوووووووور

سمسم يو
01-10-2014, 12:40 PM
اللهم اغفر لي وعافني واعف عني واهدني الى صراطك المستقيم وارحمني
يا أرحم الراحمين برحمتك أستعين سبحان الله والحمد لله ولا إله إلا الله ، والله أكبر ولله الحمد ،
وأستغفر الله عدد خلقك ورضى نفسك وزنة عرشك ومداد كلماتك
اللهم اغفر للمسلمين جميعا الأحياء منهم والأموات وأدخلهم جناتك، وأعزهم من عذابك ، ولك الحمد،
وصل اللهم على أشرف الخلق سيد المرسلين محمد صلى الله عليه وسلم وعلى أهله وصحبه أجمعين

اكرم عيد
04-01-2015, 10:11 AM
الاخوة الاعزاء.
..مشكورين جدا على هذا الشرح الوافي لقواعد البيانات

سعيدون
07-01-2015, 07:28 PM
شرح واف يتضمن جميع الخطوات الاجرائية اللازم تتبعها
دمت متألقا اخي

سمير نبيل
14-01-2015, 07:27 AM
رائع أخي الأمير .. ما شاء الله عليك

اكرم حلايقه
19-01-2015, 11:02 AM
مشكورين جدا على هذا الشرح الوافي

عبود عبود
19-01-2015, 12:21 PM
مرور جميل منكم جميعا أتمنى لكم الإستفادة

:abc_152:

ابو حسان عوض
23-01-2015, 10:20 AM
ما شاء الله موضوع مهم جداً

فاضل الجبوري
18-02-2015, 06:08 PM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

هانى كفورى
23-03-2015, 04:51 PM
1000000:abc_088: شكر اخى الكريم

الصقر الجريح
14-06-2015, 06:56 AM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

أبو الريم
26-06-2015, 03:18 AM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

محمد مصطفى الجن
06-12-2015, 01:32 PM
http://img809.imageshack.us/img809/9765/bismellahg.gif


http://img526.imageshack.us/img526/5803/w89u9te.gif


شرح قواعد البيانات سكيوليت sql databases

السلسلة رقم 1




هي لغة قياسية للوصول إلى قواعد البيانات و التعامل مع قواعد البيانات

وهى تستخدم أحد مقاييس ansi “ مؤسسة المقاييس القومية الأمريكية” وهناك العديد من الإصدارات المختلف لـــ لغة سكيوليت


ماذا يمكن أن تفعل بإستخدام الــ سكيوليت ؟

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


أولا : كيفية بناء الجمل فى قواعد بيانات السكيوليت


لتكوين الجمل فى قواعد البيانات إليك بعض الكلمات والتى تعبر عن أفعال سوف تتم عند إستخدامها مع قواعد البيانات

سكيوليت مثل (select, update, delete, insert, where)

قاعدة البيانات في معظم الأحيان تحتوي على جدول واحد أو أكثر. يتم تعريف كل جدول بواسطة اسم يعطى له

والجداول تحتوى على البيانات فى سجلات وهى الصفوف (rows)


فعلى سبيل المثال لتوضيح ما سبق نأخذ ما تعرضة الصورة التالية :

http://img59.imageshack.us/img59/788/asdfvwv.png


مبدئيا أى جدول لابد و أن تضع له إسم معرف له كى تستطيع أن تستدعي منه أى بيانات تريدها وحتى تستطيع تمييز الجداول

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

الجدول يحتوى على صفوف (rows) و أعمدة (columns)


طبعا الصفوف هى كل ما هو أفقى بخط مستقيم

و أيضا الأعمدة هى كل ما هو رأسى بخط مستقيم

http://img811.imageshack.us/img811/5775/ffffu.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://img811.imageshack.us/img811/5775/ffffu.gif


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




select column_name(s) from table_name

select * from table_name


نأخذ مثالا لتوضيح الفرق بين الإثنين فنحن نريد من الجدول التالى أن نستخلص منه معلومات الأعمدة “الإسم الأول” و “الإسم الأخير” .... “ firstname و lastname”


http://img59.imageshack.us/img59/788/asdfvwv.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://img836.imageshack.us/img836/4290/dddbe.png

http://img811.imageshack.us/img811/5775/ffffu.gif

بالنسبة للتصريح الثانى و الذى كان “ select * from table_name” الشرح كالتالى :

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

العلامة النجمية (*) هي طريقة سريعة لتحديد كافة الأعمدة ثانيا

ثالثا كلمة from تعنى من

رابعا كلمة table_name وهى إسم الجدول المراد إستخلاص البيانات منه


إذن إذا كنا نرد أن نستخلص أو نستعلم عن كافة بيانات الأعمدة بالكامل سوف يكون التصريح الكامل لهذة المهمة كالتالى :


select * from persons

**طبعا على إفتراض أن قمت بتسمية الجدول بإسم persons

فيكون نتيجة الإستدعاء هو كامل محتويات بيانات كافة الأعمدة من قاعدة البيانات المحددة مسبقا


http://img811.imageshack.us/img811/5775/ffffu.gif


الآن نتجه نحو برنامج الأتوبلاى ميديا ستوديو لتطبيق ما سبق عمليا مع مراعاه تنشيط الإضافة سكيوليت وهى من النوع أكشن بليجين طبعا للتنشيط للإضافة

ثم يتم وضع علامة صح أمام إسم الإضافة .........<...project.........>...plugins


http://img845.imageshack.us/img845/5214/asdfdz.png


بعد فتح مشروع جديد و تنشيط الإضافة سكيوليت نقوم بإدراج 4 إينبوت لإدخال البيانات عن طريقه إلى قاعدة البيانات

نقوم بإدراج زر ونقوم بكتابة إسم له و ليكن حفظ على سبيل المثال و سوف تكون مهمته هو تسجيل البيانات التى سوف يستقبلها من إينبوت الإدخال

مبدئيا سوف نتعامل مع قاعدة بيانات أليس كذلك ؟

نعم سوف نتعامل مع قاعدة بيانات إذن هل هى موجودة أم لا ؟

إذا كانت غير موجودة إذن علينا أن ننشئها أليس كذلك ؟

نعم سوف نقوم بإنشائها إن لم تكن موجودة وإن كانت موجودة علينا أن نعرف مسارها التى هى موجودة فيه أليس كذلك ؟


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

ومن هنا لإنشاء قاعدة بيانات جديدة أو فتح قاعدة بيانات موجودة سوف نستخدم أمر من أوامر الإضافة سكيوليت وهو sqlite.open

عند إدراجة سوف تظهر هذه النافذة كما هو موضح بالصورة التالية :


http://img708.imageshack.us/img708/3154/asdfjk.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://img221.imageshack.us/img221/9334/asdfm.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 :


المحتوى المخفي لايقتبس


http://img811.imageshack.us/img811/5775/ffffu.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://img59.imageshack.us/img59/788/asdfvwv.png

أترككم مع تحميل المثال المفتوح

المحتوى المخفي لايقتبس




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


سلسلة رقم 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)

ماشاء الله عليك انت محتاج كوباية شاى والواحد يقعد يشاهد الموضوع ويطبقه بشكل عملى لفهم المصطلحات والاكواد

ملحوظة ياريت رفع الصور من جديد لان الصور لاتظهر

كرونو
17-12-2015, 01:01 PM
جزاك الله خيرا

زياد مقداد
01-01-2016, 11:56 AM
مشكورين إخوتي لكن لو توضحوا لنا
بأي برامج مثل SQLiteStudio أو غيرها
وكيفية العمل عليها مع تكرار شكري

سليمان الثواب
03-01-2016, 09:05 PM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

أبو محسن
09-01-2016, 07:32 AM
جزاك الله خير

زياد مقداد
09-01-2016, 08:55 PM
ماذا نستخدم كبرنامج لبناء قواعد البيانات بخلاف أوراكل
شكرا للجميع

بيانكى
12-01-2016, 08:19 AM
مشكوووووووووووووووووووووو ووووووووووووووووووووووووو وووووووووور

عبدوعزيز
23-01-2016, 02:31 PM
مشكووووووووووووور

رجب الأنصاري
25-01-2016, 02:02 PM
السلام عليكم ورحمة الله وبركاته
الحمدلله والصلاة والسلام على رسول الله وعلى آله وصحبه أجمعين
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

عبدالله عمر
15-02-2016, 06:47 PM
مشككككورررررررر

عبود عبود
15-02-2016, 07:14 PM
تم تحديث روابط صور الشرح لإعادة ظهورها بشكل سليم على سيرفر آخر

15\2\2016

تحياتى :abc_138:

عظيمه
16-02-2016, 07:18 PM
السلام عليكم ورحمة الله وبركاته
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .
موفق بإذن الله ... لك مني أجمل تحية .

عظيمه
01-03-2016, 12:39 AM
السلام عليكم ورحمة الله وبركاته
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .
موفق بإذن الله ... لك مني أجمل تحية .

تكنوميكانت
30-03-2016, 04:03 PM
السلام عليكم ورحمة الله وبركاته
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

محمد سامر
12-08-2016, 02:49 AM
موفق بإذن الله ... لك مني أجمل تحية . :abc_052:

بلقيس
12-08-2016, 04:33 PM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

منار بربرة
05-11-2016, 02:27 PM
مشكرين كتير

أبو قصي
27-01-2017, 06:02 AM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

ابو احمد النائلي
24-02-2017, 12:30 AM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

زكراوي
17-05-2017, 01:02 AM
شكرا على المعلومات القيمة اخوكم من الجزائر :abc_026:

عبد الهادي بهاب
13-06-2017, 01:02 PM
السلام عليكم ورحمة الله وبركاته
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

ح د فتحي
22-12-2017, 02:39 AM
السلام عليكم ورحمة الله وبركاته شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية . ألف مبروك .. لقد سعدت بهذا الخبر

صالحيب
09-01-2018, 12:27 AM
بارك الله فيك على المجهود

هريدة
19-01-2018, 03:15 PM
موفق بإذن الله ... لك مني أجمل تحية .

مارجوم،
21-01-2018, 10:32 AM
tnks my friend

خليل القريش
12-10-2019, 03:03 AM
شكرا لك اخي

نجمة ليبيا
12-04-2020, 03:01 AM
بسم الله الرحمن الرحيم شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

جمال سات
12-05-2020, 10:29 PM
ما شاء الله عليك