الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف تبني تطبيق قواعد بيانات في دلفي

مغلقرائج
بدأه Wael Dalloul في 30 أبريل 2006 · 46 رد · 50,416 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

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

(كيف اطبع DBGraid) و تم الاجابة على طريقة جميلة في كيفية الطباعة مباشرة اي سحب البيانات و ارسالها الى الطابعة مباشرة و بعد الاجابة جاء السؤال التالي

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

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

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

كيفية سير العمل في هذه الدورة:

1- مقدمة عامة:

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

2- لمحة سريعة عن قواعد البيانات (تصميم قواعد البيانات + لغة الاستعلامات البنيوية SQL)

3- ما هي المراحل التي يمر بها تطبيق قواعد البيانات و ما هي هيكلية هذه التطبيقات.

4- لمحة سريعة عن دعم دلفي الكبير لقواعد البيانات و ما DBMS التي تدعمها دلفي في بناء قواعد البيانات.DBMS: تعني Database Management system و هي مدير قواعد البيانات مثل SQL Server, Oracle, MySQL, Access

5- الادوات التي تقدمها دلفي في الربط مع قواعد البيانات مثل Ado و BDE dbExpress و InterBase و سوف يكون تركيزنا الاكبر على Ado لأنه في اعتقاد الافضل و الاكثر استخداما.

6- شرح عن جميع مكونات dbGo for ADO و كيفية استخدامها.

7- المكونات Data-Aware Controls التي تقدمها دلفي للتعامل مع تطبيقات قواعد البيانات.

9- امور متقدمة في قواعد البيانات:

هنا سوف نستعرض جميع الاسئلة التي تبدأ بكيف يمكن ان اعمل كذا.... و الكثير من الامور الاخرى

المراجع التي سوف استند عليها في تقديم هذه الدورة:

1- كتاب دلفي 7 من دار شعاع في دمشق

2- موقع About

3- بعض الدروس من الجامعة

4- كتاب borland delphi 7 - database application developers book

5- Mastering Delphi 7

6- خبرتي المتواضعة

7- مراجع اخرى متفرقة

لمن هذه الدورة: اي ما هي الامور التي يجب عليك ان تعرفها قبل الدخول في هذه الدورة

1- معرفة بسيطة في العمل على دلفي و معرفة بعض مكوناته الاساسية.

2- معرفة بقواعد البيانات و كيفية بناءها.

3- معرفة في لغة SQL فقط الامور الاساسية(حيث لن تتم تغطيتها في هذه الدورة).

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

ملاحظة هامة: المطلب الوحيد لي لكل مستفيد من هذه الدورة هو الدعاء و الدعاء فقط.

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

تم تعديل هذه المشاركة بواسطة waeldalol في 30 أبريل 2006 في 19:48

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#2

الدرس الاول:

مقدمة عامة عن قواعد البيانات(نظرة في العمق)

يعود الفضل في أننا نستخدم الحاسوب في مجال العمل اليوم الى برنامج يدعى "VisiCalc" فقبل ذلك كانت الحواسيب مجرد ألعاب الكترونية للهواة إلى ان كتب مبرمجان برنامج سمياه "VisiCalc" حيث اوجد هذا البرنامج لدى ظهوره مكان للحاسوب في العمل و بتشغيل هذا البرنامج على الحاسوب حصل المستخدمون الجدد على نسخة الكترونية لآلاف بل مئات الآلاف من الاوراق و الجداول و التي سميت بأسم "الصفحات الجدولية" و التي شغلت و أجهدت كل المحاسبين و موظفي البنوك و المفتشين الماليين لأجيال كثيرة سابقة.

نستنتج انّ افضل ما يقوم به الحاسوب هو العمل بالبيانات (الكلمات و الوقائع و الاعداد).

كيف كان يتم العمل قبل وجود الحواسيب:

إذا كنت قد زرت مكتبة عامة لا يزال يستعمل فيها نظام البطاقات فإنك تكون قد تعرفت على قاعدة بيانات غير حاسوبية – و هي قاعدة بيانات تثبت مدى فائدة قاعدة البيانات الحاسوبية.

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

الأول: هو بطاقات كل الكتب مفرزوة ألفبائيا على أساس أسماء الكتب

الثاني: بطاقات كل الكتب مفرزوة ألفبائيا على أساس أسماء المؤلفين

الثالث: بطاقات كل الكتب مفرزوة ألفبائيا على أساس المواضيع التي تعالجها الكتب.

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

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

لكن كما ترون انّ ذلك فيه هدر كبير و كبير جدا يمكنك انك لاحظته هذا الهدر موجود في الوقت و في حجم المعلومات المكررة.

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

إنّ الاستخدام السابق في ارشفة المكتبة و التعامل معها يدعى نظم الملفات الورقية

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

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

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

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

قواعد البيانات منذ حاولي خمسين او اربعين عاما :

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

تحتوي هذه الملفات على بيانات بشكل اسطر من النصوص تفصل بين القيم المختلفة فواصل أو احرف TAB او ما شابه و لكن سرعان ما تم اكتشاف الكثير من العيوب لهذا النظام

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

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

اخير الشيئ الذي يهمنا و يجب ان نركز عليه كثير الا وهو

النموذج العلائقي(Relational Mode):

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

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

تتميز أنظمة إدارة قواعد البيانات العلائقية بأنها تسمح للمستخدم و للمصممم بالعمل على بيئات عمل منطقية و طبيعية و تقوم هي بالتعامل مع كل التفاصيل الفيزيائية المعقدة.

البنية الأساسية للنموذج العلائقي:

قام العالم Dr.E.F.Codd بتأسيس النظريات الرياضية التي استند عليه نموذج البيانات العلائقية الذي طرحته IBM في السبعينات.

البنية الاساسية لهذا النموذج هي الجدول Table و هو عبارة عن مصفوفة تتألف من سلسلة من الاعمدة Columns و الاسطر Rows يمث الجدول الكيان Entity و الأعمدة خصائص الكيان Attributes أما الأسطر فتمثل حالة من الكيان.

محاسن النموذج العلائقي

1-أصبحت المفاهيم أسهل وأوضح حيث انه اصبح من الممكن تجاهل مكان و كيفية تخزين البيانات و اصبح الاهتمام الاكبر بطريقة عرض البيانات, اي طريقة عرضها للأشخاص وليس الحاسب و هذا ما سوف نقوم برؤيته قريبا عندما نبدأ بتصميم تطبيقات قواعد البيانات.

2- اصبحت قواعد البيانت أسهل من حيث التصميم و التطبيق و الادارة وحتى في الاستخدام.

3- ادى هذا النموذج الى ظهور لغات الاستعلامات البنيوية(SQL).

و لكن لا يوجد شيئ كامل الا الله حيث ظهر لهذا النظام عيوب منها:

1- تحتاج نفس البرمجيات القادرة على إخفاء التعقيدات الموجودة الى تجهيزات حاسوبية متطورة و تستهلك موارد كبيرة من نظام التشغيل, و لكن مع تطور الاجهزة و سرعتها تم حل هذه المشكلة

2- شجعت السهولة في الاستخدام العديد من الاشخاص القليلي الخبرة على العمل بها مما ادى لظهور عدد من التصميمات السيئة و التطبيقات الضعيفة مما ادى لظهور نفس الاخطاء التي كانت تظهر في نظام الملفات في بعض الاحيان و هؤلاء الاشخاص كثير جدا في منتدى هذا.

بعد هذا النموذج ظهر نموذج العلائقي الغرضي التوجه و الذي لن اتكلم عنه و دعونا فقط نركز على النموذج العلائقي.

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

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

الى اللقاء في الدرس القادم

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#3

الدرس الثاني

النموذج العلائقي(تحت المجهر)

إن البنية الاساسية لهذا النموذج كما تحدثنا سابقا هي الجدول و هو ممكن ان يمثل كيان مثل الناشر او الكتب او يمثل علاقة مثل كتب الناشر انظر الشكل التالي

03_05_06_01_53_16_1146646396pic1.JPG

حيث انه من اهم المصطلحات التي ترد في النموذج العلائقي هي

الجدول, العمود او الحقل, السجل او الصف, العلاقة, المفاتيح

في الشكل السابق نلاحظ وجود اربعة جداول و هي

Author, Title, Author_Title, Publisher

و نلاحظ ايضا انه في الجدول Author هناك ستة حقول او اعمدة و هي

Au_id, au_lname, aufname, address, city, state

و نلاحظ ايضا وجود عدد من السجلات او الاسطر مثل السجل الذي له الرقم 172-32-1176 و الاسم الاخير له هو White و الاسم الاول هو Johnson

العلاقة Relationship هي الرابط بين جدولين أو أكثر، يعبر عنها في قاعدة المعطيات من خلال المفتاح الأساسي Primary key والمفتاح المستورد Foreign key.

- ما هو المفتاح الاساسي: هو حقل أو مجموعة حقول تميز بمجموعها كل تسجيلة في الجدول. اي اذا تمت معرفة قيمة هذا الحقل نستطيع ان نصل الى سجل واحد و واحد فقط مطابق لهذه القيمة من ميزاته انه وحيد لا يمكن ان تكرر و انه لا يحتوي على قيمة خالية NULL

- المفتاح المستورد Foreign Key هو حقل قيمته تطابق حتماً قيمة مفتاح أساسي في جدول آخر (ان لم تكن NULL)، ويمكن النظر للمفتاح المستورد على أنه نسخة من قيمة مفتاح أساسي في جدول آخر، تحدد التسجيلة المرتبطة من الجدول الآخر بالتسجيلة الحاوية على المفتاح المستورد من هذا الجدول.

انظر الشكل التالي لكي تتوضح لك المفاهيم السابقة

03_05_06_01_55_40_1146646540pic_.JPG

سوف تلاحظ من الشكل السابق ان الجدول au_id هو المفتاح الاساسي للجدول و قد وضع بجانب اسم هذا الحقل الرمز PK للدلالة على انه مفتاح اساسي

سوف تلاحظ ايضا انّ الحقل Au_Id في الجدول Author_Title هو مفتاح مستورد من المفتاح الأساسي Au_id في الجدول Author. ولكن بما انه مفتاح مستورد فلماذا وضع بجانبه PK و لم يوضع FK

في الحقيقة إنّ هذا الحقل هو مفتاح مستورد و لكن يشكل هو و الحقل title_id في الجدول author_tilte مفتاح اساسي في الجدول بالاضافة الى انه مفتاح مستورد.

قد يرد سؤال من احد الاعضاء انه لماذا كل هذه الجداول انا اضعهم في جدول واحد وخلص و هذا ما لحظته في التطبيقات التي كنت اراها من بعض الاعضاء جدول واحد لكل شيئ.

عندما تضع كل شيئ في جدول واحد تكون لا تستخدم الميزات التي يقدمها لك النموذج العلائقي و انما تستخدم نموذج اخر من قواعد البيانات لم نتحدث عنه في السابق الا و هو نموذج قواعد البيانات المسطحة و اكبر مثال على ذلك هو برنامج Excel المعروف حيث تضع كل شيئ في صفحة واحدة و تقوم بالعمل. ولكن لن تفرح طويل اذا كانت درجة العمل معقدة مثل برنامج مستودعات عن طريق ال Excel سوف تلاحظ بعض مضي فترة من الزمن على استخدام Excel الكثير من المشاكل التي لم تكن تخطر في بالك

دعونا نتخيل السيناريو التالي

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

03_05_06_02_14_06_1146647646pic3.JPG

يتضمن هذا الجدول بيانات الموظفين وبيانات المستودعات، ومن الواضح وجود تكرار في بيانات المستودعات حيث تلاحظ تكرار اسم المستودع S1 ثلاثة مرات في الحقل Store_Address.

إذا أردنا إدخال بيانات موظف جديد فيجب إدخال بيانات موقعه اي ادخال بيانات المستودع أيضاً (ركز هنا و افهم هذه النقطة جيد)، وللحفاظ على عدم تناقض البيانات في القاعدة يجب إدخال بيانات المستودع بدقة وبشكل مطابق للقيم المدخلة سابقاً (لأحد الموظفين السابقين في نفس المستودع)، هنا تظهر مشكلة تكرار البيانات بالإضافة طبعاً لحجم التخزين المهدور.

دعونا نفصل اكثر في المشاكل التي ممكن ان ترد معنا في هذا النموذج: (قم بالقراءة و النظر الى الجدول السابق)

1- بفرض أننا نريد إدخال بيانات مستودع جديد قبل توظيف أحد فيه، هذا يتطلب إدخال قيم Null اي قيم فارغة في بيانات الموظف ومن ضمنها الحقل المفتاح (Id) مما يخرق شرط تكامل البيانات. هذا ما يدعى بإشكالية الإدخال (Insertion anomaly).

2- بفرض أننا حذفنا تسجيلة الموظف الأخير في أحد المستودعات، سيؤدي ذلك إلى فقدان بيانات مستودع موجود في الشركة. هذا ما يدعى بإشكالية الحذف (Deletion anomaly).

3-إذا أردنا تغيير رقم هاتف أحد المستودعات، عندها يجب تغيير رقم الهاتف في كل تسجيلات موظفي ذلك المستودع، فإذا تم تغيير جزء من هذه التسجيلات دون جزء آخر سيؤدي ذلك إلى بيانات متناقضة في قاعدة البيانات، وهذا ما يدعى بإشكالية التعديل (Update anomaly).

افهم هذه النقاط جيدا فهي تعتبر الاساس في تصميم قواعد البيانات.

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

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

العلاقات:

العلاقة هي الرابط بين أكثر من كيان ، يمكن أن يكون للعلاقة واصفات تماماً كالكيان فمثلاً العلاقة بين قرار إجازة وموظف يمكن أن يكون لها تاريخ بدء ومدة وغير ذلك من الواصفات.

يمكن أن تكون العلاقة من أحد ثلاثة أنماط:

- واحد لواحد (One to one)

- واحد لعدة (One to many)

- عدة لعدة (many to many)

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

لمزيد من المعلومات حول تصميم قواعد البيانات الرجاء قراءة الرابط التالي الأسس العلمية لقواعد البيانات

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

تم تعديل هذه المشاركة بواسطة waeldalol في 3 مايو 2006 في 12:15

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#4

السلام عليكم و رحمة الله

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

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

بالنسبة لدرس اليوم فسوف نأخذ لمحة سريعة جداً عن لغة SQL التي لا مناص للجميع من تعلمها اذا ارداوا بناء تطبيق قواعد بيانات.

الدرس الثالث:

لغة الاستعلامات البنيوية SQL لمحة سريعة

مقدمة:

بعد ظهور النموذج العلائقي الذي تحدثنا عنه في الدرس السابق ظهرت لغة جديدة من لغات البرمجة الا وهي لغة الاستعلامات البنيوية SQL حيث تعتبر هذه اللغة من لغات الجيل الرابع

بينما تعتبر دلفي من لغات الجيل الخامس.

و ادى ايضا ظهور النموذج العلائقي ايضا الى ظهور أنظمة إدارة قواعد البيانات العلائقية DBMS مثل SQL Server, Oracle, MySQL ....

و لعل اكثر الاخطاء الشائعة في عصرنا هذا هو إطلاق اسم قواعد البيانات على أنظمة إدارة قواعد البيانات العلائقية.

فأنظمة MS SQL server، وOracle، وMS Access هي أنظمة إدارة قواعد بيانات وليست قواعد بيانات.

كيف تعمل SQL:

تعمل SQL بمبدأ توجيه طلب إلى محرك قاعدة البيانات والحصول على جواب من محرك قاعدة البيانات الذي يُرجع مجموعة نتائج.

ملاحظة: محرك قاعدة البيانات = مدير قاعدة البيانات.

ما هي اهمية هذه اللغة:

يعتبر تعلم هذه اللغة من الامور التي تأتي في رأس القائمة في انشاء تطبيقات قواعد البيانات حيث انها

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

توفر SQL مجموعة من التعليمات بحيث يمكن تقسيمها إلى ثلاث لغات فرعية:

لغة معالجة البيانات التي تتضمن التعليمات الخاصة باستعادة البيانات و تعديلها مثل:

SELECT: وهي مخصصة لقراءة البيانات و استخلاصها من قاعدة البيانات.

INSERT: وهي مخصصة لإضافة سجلات جديدة إلى قاعدة البيانات.

DELETE: وهي مخصصة لحذف سجل أو مجموعة سجلات من قاعدة البيانات.

UPDATE: وهي مخصصة لتعديل سجل أو مجموعة من السجلات في قاعدة البيانات.

لغة تعريف البيانات المخصصة لتعريف بنية البيانات، وتتضمن تعليمات مثل:

CREATE TABLE: وهي مسؤولة عن توليد جدول

DROP TABLE: وهي مسؤولة عن حذف جدول

ALTER TABLE: وهي مسؤولة عن تعديل جدول

CREATE INDEX: وهي مسؤولة عن توليد الفهارس

لغة التحكم بالبيانات التي تُستخدم للتحكم و ضبط السماحيات على قاعدة البيانات مثل:

GRANT

REVOKE

و الذي سوف اتحدث عنه في هذه العجالة فقط اللغة الاولى لغة معالجة البيانات و سنتعتمد على الواجهات التي يقدمها DBMS

في انشاء قواعد البيانات و الجداول و كل شيئ اخر اي سوف نعتمد على الوجهات في التعامل مع اللغة الثانية و الثالثة.

لغة التعامل مع البيانات DML:Data Manipulating Language

تعليمة Select:

تُعتبر تعليمة SELECT من أشهر تعليمات اللغة وأكثرها استخداماً. تُستخدَم هذه التعليمة لاستعادة و انتقاء مجموعة من البيانات من قاعدة البيانات و ذلك بإعادة جدول يحتوي مجموعة البيانات المطلوبة.

الشكل القواعدي المبسط لهذه التعليمة هي:

Select [Field1, Field2 ..] from [Table1, Table2..]

قواعد سريعة لاستخدام تعليمة Select

1- تُستخدم إشارة * كبديل لأسماء الحقول (عادة لاننصح باستخدامها في الحالات التطبيقية لأنها تُحمِّل برنامج إدارة قاعدة البيانات عبء تحديد الحقول وتحديد عددها و أسماءها).

2- يُستخدم التعبير ORDER BY لترتيب السجلات المٌعادة ترتيباً تصاعدياً أو تنازلياً حسب التعبير المرافق المستخدم: ASC للترتيب التصاعدي أو DESC للترتيب التنازلي.

3- في حال الرغبة باستخدام أسماء بديلة لحقول جدول القيم المعادة نستخدم التعبير AS.

4- يُستخدم تعبير DISTINCT لاستعادة جميع السجلات مع إلغاء التكرار في السجلات المعادة

5- نستخدم الكلمة المفتاحية WHERE مع تعليمة SELECT لاستعادة مجموعة من السجلات التي تحقق شرط أو مجموعة من الشروط التي نعبر عنها بعبارة شرطية.

6- تُستخدم الكلمة المفتاحية LIKE ضمن العبارة الشرطية، كشرط لوجود مثيل. غالباً ما تُستخدَم هذه الكلمة مع إشارة (%)، التي تضاف إلى القيمة التي نبحث عن مثيلاتها، كبديل عن أي رقم من الأرقام أوالأحرف.

7- تُستخدم الكلمة المفتاحية BETWEEN ضمن العبارة الشرطية، كشرط لوجود قيمة محصورة بين قيمتين محددتين

8- تقبل الكلمة المفتاحيةWHERE أكثر من شرط يفصل بينها عمليات منطقية مثل AND أو OR ويمكن أن يسبق الشرط العملية NOT لنفيه.

تعليمة Insert: تُستخدم تعليمة INSERT لإدراج سجل أو مجموعة سجلات في جدول محدد.

الشكل القواعدي المبسط لها:

Insert Into TableName values(v1,v2,v3)

تعليمة UPDATE

تُستخدم تعليمة UPDATE لتعديل البيانات في سجل أو في مجموعة من السجلات. ويمكن استخدام الكلمة المفتاحية WHERE مع تعليمة UPDATE لتحديد شروط التعديل.

Update TableName set FieldName = value where FieldName = value

تعليمة DELETE

تقوم تعليمة DELETE بحذف سجل أو مجموعة من السجلات من جدول ما.

Delete TableName where fieldname = value

لن اقوم بشرح اكثر من هذا و انما احببت للاستئناس ان اقوم بذكر هذه التعليمات لكي تكونوا معتادين عليها فيما بعد.

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

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

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#5

السلام عليكم

بعد ان تعرضنا في الدرس السابق الى القليل من تعليمات SQL بشكل نظري سوف نتعرض اليوم ايضا و بشكل سريع الى مراحل

بناء اي تطبيق قواعد بيانات

الدرس الرابع:

المراحل التي يمر بها تطبيق قواعد البيانات

إنّ اي تطبيق قواعد بيانات بشكل رئيسي يكون مؤلف من ثلاثة اقسام لا رابع لهم هم على التوالي

الاول: قاعدة البيانات

الثاني: واجهات الادخال و العرض

الثالث: التقارير و التي تعتبر ثمرة البرنامج و عادة ما يتم بناء البرامج للحصول عليها.

امعنوا النظر كثيرا في هذه الاقسام لانها فعلا عند انجاز هذه الاقسام نكون قد انتهينا من تطبيق قواعد البيانات

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

و بالتالي يكون القسم الاول قد انتهينا منه. لانه ليس الهدف من هذه الدورة هي تعليم قواعد البيانات و انما استخدام دلفي في بناء

تطبيق قواعد البيانات و ما تقدمه هذه اللغة من امكانيات و ادوات لبناء تطبيق قواعد بيانات بسهولة

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

و لكن قبل ان ندخل في دلفي احببت ان اعطيكم رؤوس اقلام عن المراحل التي يمر بها اي تطبيق من مرحلة استلامه الى مرحلة تسليمه

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

و امثلة كثيرة توضح كل شيئ بأذن الله.

مراحل بناء التطبيق:

لحظ اخي الكريم هنا مراحل و ليست اقسام!!

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

لنفرض ان زبون ما طلب من شركة تعمير فندق 5 نجوم في منطقة ما و قامت شركة التعمير ببناء مطعم خمس نجوم بناء على ما تم تحليله من قبل مدير الشركة ما الذي سوف يحدث !!! كل العمل الذي قامت به الشركة ذهب هباء منثورا و لم يتم الاستفادة منه بشئ بينما اذا اخطأ المهندس المشرف بتصميم البناء فأن ذلك سيكون من الممكن تعديل الجزء الذي تم الخطأ به و ترميمه بسرعة هنا درجة الخطورة اقل من المدير و اذا قام عامل ما مثلا بعدم تركيب البلاط بشكل مناسب فأنه يمكن خلع هذا البلاط و البدء من جديد تلاحظ في هذا التسلسل انّ المدير هو الذي يأخذ المرتب الاعلى و يعمل العمل الاقل و يتحمل المسؤولية الكبرى و العامل هو الذي يأخذ الراتب الادنى و يعمل العمل الاكثر و يتحمل المسؤولية الدنيا .

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

بعد ذلك يتم اختيار لغة البرمجة التي سوف يتم العمل عليها لتصميم واجهات الادخال ممكن لهذه اللغة ان تكون مدمجة مع نظام ادارة قواعد البيانات مثل Oracle عبر Oracle Devloper او اكسس عبر الواجهات التي يقدمها. و لكن في هذه الدورة لن نعتمد على الادوات التي يقدمها نظام ادارة قواعد البيانات و انما سوف نعتمد على لغة دلفي لبناء واجهات التطبيق.

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

من اكثر واجهات التخاطب بين لغات البرمجة و بين مديري قواعد البيانات شيوعا نجد OLE DB و ODBC وهما واجهتين من اختراع Microsoft لتخاطب مع مديري قواعد البيانات حيث تجد في كل منها مثلا دعم للتخاطب مع (SQL Server, Access, Oracle, Excel……) وهناك شركات كثيرة غير شهيرة تقوم بصنع محرك قواعد البيانات و تؤمن بعض من الادوات للربط بين التطبيق و بين قواعد البيانات حيث تقوم هذه الشركات بتزويد المبرمجين بعدد من Component ليتم تثبيتها في لغة البرمجة و من بعد ذلك يتم استخدامها مثل واجهات التخاطب السابقة.

ملاحظة: تعتبر ODBC من واجهات التخاطب القديمة و البطيئة في التعامل لذلك لا يتم استخدامها اليوم في الربط مع قواعد البيانات.

الان الى اين وصلنا: بعد ان قمنا بتحليل و تصميم قاعدة البيانات و ربط البرنامج بقاعدة البيانات باحد واجهات التخاطب الان نبدأ بتصميم البرنامج

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

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

بعد عملية البرمجة يتم التأكد من أنّ البرنامج يؤدي المهام المطلوبة منه بتعريض البرنامج لعمليات فحص وتمحيص و يتم اصلاح الاخطاء في حال ظهورها بالعودة الى البرمجة

بعد ذلك تتم عملية التحزيم و عمل ملفات المساعدة للبرنامج بعد ذلك يتم تسليم البرنامج الى الزبون و تدريب الموظفين عليه.

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

ارجوا للجميع الاستفادة و الدعاء لي

و السلام عليكم

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#6

الدرس الخامس:

التمهيد للدخول الى تطبيقات قواعد البيانات في دلفي:

اختيار محرك قواعد البيانات المناسب:

تعتمد عملية اختيار قاعدة المعطيات المناسبة على عدة عوامل:

- كم حجم المعطيات التي ستخزن في هذه الجداول؟

- كم عدد المستخدمين الذين سيتشاركون في هذه الجداول ؟

- ما الاداء و السرعة المطلوبة من القاعدة؟

- هل قاعدة البيانات التي اخترتها مدعومة من لغة البرمجة التي تستخدمها؟؟

بالاجابة على الاسئلة السابقة تستطيع تقرير ما هو DBMS المناسب الذي عليك استخدامه للتعامل مع البيانات.

فمثلا عندما ترغب ببناء تطبيق قواعد معطيات لمستخدم واحد فربما تلجأ الى استخدام قاعدة معطيات محلية لبناء تطبيق وحيد الطبقة مثل(Paradox , Access, Dbase) إنّ هذا الاختيار هو الانسب لهكذا تطبيق حيث ان السرعة كبيرة (بسبب تخزين المعطيات محليا) ولا تتطلب شراء مخدم قواع معطيات منفصل ذو الثمن المرتفع. لكنها بجميع الاحوال محدودة بكمية المعطيات القادرة على تخزينها و بعدد المستخدمين

إنّ انشاء تطبيق ثنائي الطبقة(SQL Server, Oracle, Interbase) يدعم تعدد المستخدمين و يسمح للتطبيق استخدام مخدمات قواعد معطيات تدعم حجوم تخزين كبيرة.

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

كيفية ربط قاعدة البيانات مع التطبيق:

في حال كانت قاعدة البيانات علائقية (يعني ليست Flat-File) فعادة نحتاج الى طبقة وسيطة بين محرك قاعدة المعطيات و بين التطبيق البرمجي

تخيل اخي الكريم ان هذه الطبقة عبارة عن طريق (شارع عام) له اتجاهين الاتجاه الاول هو الذهاب و الاتجاه الثاني هو الاياب هذا الطريق يصل بين مكانين اثنين فقط الاول هو التطبيق و الثاني هو محرك قاعدة البيانات

في اتجاه الذهاب تمر سيارات و اليات محملة بتعليمات SQL قادمة من التطبيق و ذاهبة الى قاعدة المعطيات عندما تصل هذه الاليات الى قاعدة المعطيات تعطي الامر الى محرك قاعدة البيانات بعد ذلك يقوم محرك قاعدة البيانات بمعالجة هذا الامر و من ثم تحميل هذه الاليات مرة اخرى بنتائج التنفيذ لترجع بعد ذلك الى التطبيق.

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

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

منقول من مقالة الاخ عروة من الرابط التالي

قواعد البيانات في دلفي : DataBases In Delphi

و ذلك فقط لضمان عدم تشتت القارئ

مقالة الاخ عروة:

الوصول إلى قاعدة البيانات لمحة تاريخية :

Accessing a Database: BDE, dbExpress, and Other Alternatives

في بدايات دلفي كان الدعم الوحيد لقواعد البيانات من خلال محرك قواعد بيانات بورلاند BDE (Borland DataBase Engine) ,

منذ دلفي 3 توسع شريط أدوات دلفي المتعلق بقواعد البيانات ليشمل كمية أكبر وأفضل من الأدوات التحكمية , .

دلفي 5 شهدت بدايات دعم الـADO (Microsoft Active X Data Object ) وكذلك الـ IBX (InterBase Express )

دلفي 6 أضافت DBExpress إلى القائمة , والذي هو أداة جديدة تدعم تعدد_المنصات ومكونات دخول إلى قواعد البيانات تتسم بالإستقلال والمحمولية , تم تطويرها من قبل بورلاند وهي مرفقة مع كايلكس على لينكس ودلفي على ويندوز .

محرك قواعد بيانات بورلاند : Borland Database Engine (BDE)

تم إنشاء ال BDE مع جداول البارادوكس , حتى قبل أن تكون دلفي قد وجدت بعد . ثم قامت بورلاند بتوسيعة لاحقا ليدعم قواعد بيانات محلية أخرى والعديد من مخدمات الـ SQL (SQL Servers) كذلك ,

يستطيع BDE تأمين دخول مباشر إلى dBASE,Paradox,ASCII,FoxPro, وجداول Access .

وكذلك لة مجموعة من المشغلات (Drivers) تسمى Sql Links وهي متاحة فقط على النسخة Delphi Enterprise تسمح بالدخول إلى بعض مخدمات الSQL , مثل Oracle,Sybase,Microsoft,Informix,InterBase, DB2 servers.

وإذا أردت الدخول إلى قاعدة بيانات أخرى غير متوفرة فإن الBDE يستطيع التعامل مع مشغلات الـ ODBC أيضا .

الميزة الخاصة لإستخدام الـ BDE أن هذة التقنية مدمجة ومضمنة بشكل جيد جدا في دلفي , وعناصرة مدعومة بشكل جيد بالشرح والمساعدة في دلفي , وهو الحل الحيوي الأساسي للدخول إلى قواعد بيانات محلية مثل Paradox و Dbase

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

كما أنك بحاجة إلى تنصيبة وإعدادة على جهاز الزبون ,

وهو محرك ثقيل الوزن يتطلب الكثير من ملفات التنصيب ومتطلبات الذاكرة , وهو متاح فقط على ويندوز ,.

إذا كنت قد بنيت تطبيقات قواعد بيانات محلية بإستخدامة , فلا توجد حاجة للضيق ذرعا بة ومحاولة تبديلة مبكرا مالم تكن تفكر بنقل تطبيقاتك إلى لينكس , أو تتوقع تبديل قواعد بيانات مستقبلا بنوع غير معروف الآن .

أما إذا كنت تستخدم مخدم Sql فإني أرى النقل إلى تقنية ربط أخرى خيارا واردا , حسب حاجاتك وتوقعاتك .

يوجد ثلاث أنواع من عناصر الـ DataSet في BDE هيTable و Queryو StoredProc بالإضافة إلى UpdateSQL المستخدمة بالإتصال مع عنصر الQuery .

المكونان DataBase و Session يستخدمان لإعداد الإتصال مع قاعدة البيانات , والعنصر BatchMove يستخدم من أجل نسخ البيانات , .

المكون ADO : ActiveX Data Objects :

ADO وهو إختصار للعبارة ActiveX Data Objects هو واجهة عالية المستوى من مايكروسوفت من أجل الوصول (دخول) قواعد البيانات , ينفذ ADO على تقنية Microsoft ’s data-access OLE DB والذي يسمح بالوصول إلى قواعد البيانات العلائقية وغير العلائقية كذلك البريد الإلكتروني ونظم الملفات وبعض الأغراض الأخرى .

يملك محرك ADO خصائص ومميزات مشابهه لل BDE حيث

يدعم قواعد البيانات المحلية ومخدمات الـ SQL كذلك , وهو أيضا محرك ثقيل الوزن حقيقي مثل BDE , تتصف إعداداتة بإنها بسيطة وسهلة (لإنة ليس مركزيا) ,كما أن التنصيب من الناحية النظرية ليس مهما (!..)

الجميل أن هذا المحرك يأتي مضمنا مع الإصدارات الحالية (الحديثة) من النظام ويندوز .....

ولكن لتعلم على كل حال أن التوافقية المحدودة بين الإصدارات المختلفة للـ ADO مع نفسة سوف تجبرك على تحديث أجهزة المستخدمين ليملكو نفس إصدارة الADO التي إستخدمتها لتطوير البرنامج ونفس الحجم من MDAC (Microsoft Data Access Components) والذي سوف يحدث جزء كبير من نظام التشغيل مما يجعل هذة العملية بعيدة عن البساطة والسهولة ... .

ببساطة ADO ليس متوافقا مع نفسة ومع إصداراتة اللاحقة ., وهذا حال مايكروسوفت دومــا ...

إن إستخدام ADO مع Access أو SQLServer يؤمن بلا شك بعض الميزات الإضافية , لإنها مشغلات مايكروسوفت تعمل على قواعد بيانات مايكروسوفت, يعني بالعامية منقول أهلية بمحلية , لذلك توقع أداء متماسكا في هذة الحالة .

إن إستخدام ADO من أجل Access يعتبر حلا جيدا , ولكن إذا كنت تخطط لإستخدام مخدم SQL آخر أولا عليك التأكد من توافر مشغلات جيدة لة (Drivers) – ربما تظهر لك بعض المفاجأات ..

ADO قوي تماما , ولكن عليك أن تتأقلم معه جيدا ... , إنة موجود فعليا بين تطبيقك وقاعدة البيانات .

ومن الجانب المضاد : لا تستخدم ADO إذا كنت تفكر بالتطوير متعدد-المنصات لإن هذة التقنية الخاصة بمايكروسوفت غير متوفرة من أجل نظام تشغيل آخر .

بإختصار . إستخدم ADO إذا كنت تخطط للعمل فقط على ويندوز وتريد إستخدام Access أو قواعد بيانات مايكروسوفت أخرى , أو أنك عثرت على مزود OLE DB جيد من أجل قاعدة البيانات التي تخطط لإستخدامها , .

مكتبة الـ dbExpress : The dbExpress Library

إحدى خصائص النسخة السادسة6مندلفي هي بداية مكتبة قواعدبيانات DBExpress من أجل منصة الويندوز .

أنا أقول مكتبة لإنة وعلى عكس الـ BDE والـ ADO فإن DBExpress يعتبر خفيف الحجم تماما , وأضع خطا تحت ويندوز لإن نفس المكتبة متوفرة على لينكس من أجل كايلكس Kylix .

أن أهم ميزتين في DBExpress هي أن يكون خفيفا ومحمولا (سهل التنقل) . وهما السبب الكامن وراء إنتاجة من شركة بورلاند .

وأهم مايميزة بالتالي هو أنة وبشكل أساسي لا يحتاج إلى أي إعدادات على جهاز الزبون .....

وبالمقارنة مع البقية فإن DBExpress محدود بالقدرات , فهولايستطيع الدخول إلا على مخدمات الـSQL , (وبالتالي لاقواعد بيانات محلية .....) كما أنة لايملك مقدرات التخزين المؤقت (no caching capabilities) , ويؤمن فقط الإتصال غير الموجة مع البيانات ...

كنظرة أولى ربما تظن أن هذة الأداة عديمة النفع وغير جيدة ... ؟؟؟

وبالمقابل هذة هي الميزات التي جعلتها ممتعة ومميزة :

الإتصال غير الموجة مع البيانات وبدون أي تحديث موجة هو الحالة المعيارية في حال كنت تريد خدمات طباعة التقارير وتوليد ملفات html , أو إظهار محتويات قاعدة البيانات .

إذا كنت تريد بناء واجهات مستخدم لتعديل البيانات بدلا من ذلك , تذكر بإن دلفي تملك أدوات خاصة (ClientDataSet ) والتي تؤمن حلول الإستعلامات والتخزين المؤقت.. (caching and query resolution.) .

هذة المكونات تسمح لتطبيقك المبني على DBExpress بإمتلاك تحكم أكثر بكثيرمن بإستخدام محرك قواعد بيانات منفصل. والذي يقوم بأمور إضافية لك , لكنة يقوم بة بالطريقة التي يريدها هو وليست الطريقة التي تريدها أنت .

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

محرك إنتربيز InterBase Express (IBX) :

إن إنتربيز سيرفر هو منتج بورلاند مفتوح- المصدر ... والأجمل أنة مجاني كذلك ,...

على عكس BDE و ADO و DBExpress فإنExpress InterBase ليس محرك مخدم قواعد بيانات مستقل , وإنما تقنية من أجل دخول مخدم قواعد بيانات محدد (وهو InterBase) , فإذا كنت تخطط لإستخدام InterBase فقط كنظام إدارة قواعد بياناتك العلائقية (your back-end RDBMS,) فإن إستخدام هذة المجموعة من العناصر سوف تمنحك التحكم الأعلى لهذا المخدم , وتقدم الأداء الأفضل , وتسمح لك كذلك بالتحكم والمحافظة على المخدم من خلال تطبيق زبون عادي .....

ملاحظة : إن إستخدام InterBaseExpress يلقي الضوء على إستخدام عناصر مخصصة للإتصال بنوع محدد من قواعد البيانات , والتي هي متوفرة من أجل العديد من الأنواع مثل Oracle, Access, dBase والعديد ...

وبإختصار فإنك تستطيع إستخدام InterBaseExpress إذا كنت متأكدا أنك لن تغير نوع قاعدة بياناتك في المستقبل , وتريد تحقيق الأداء الأعلى والتحكم الأفضل على حساب الإستقرارية والمحمولية ...

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

العنصر ClientDataSet :

وأخيرا يوجد عنصر مشتق من TdataSet والذي يملك سلوك خاص ويمكن دمجة مع أدوات وصول لقواعد بيانات أخرى

في الحقيقة إن عنصر الـ ClientDataSet يستخدم للدخول إلى بيانات مخزنة بالذاكرة , البيانات المخزنة بالذاكرة هي بيانات مؤقتة بشكل كامل , وسوف تفقد عندما تقوم بإغلاق برنامجك . يمكن حفظها إلى ملف محلي وتوريدها إلى عنصر إتصال آخر ..

ولكن هذا العنصر يملك القدرة على التكامل مع أدوات أخرى مثل DBExpress مما يجعله ذو أهمية فريدة , يعتبر ClientDataSet من أفضل الأدوات بالتحكم قياسا لبقية عناصر Table التي تزودها دلفي .

بالمختصر Dbexpress لايملك سوى القدرة على مخدمات Sql

ClientDataSet = = = = = = = = = بيانات محلية

فإذا دمجنا هاتين الأداتين معا عن طريق سنحصل على أداء ممتاز .

في الدرس القادم سوف نتكلم عن الادوات التي تقدمها كل من Ado, BDE, Interbase للربط مع قاعد البيانات بشكل مبسط و سريع

و الحديث ايضا عن DataSet

و من ثم سوف نبدأ بأذن الله ببناء تطبيقات قواعد بيانات اولا مع Ado ثم مع BDE ثم مع Interbase

الى اللقاء في الدرس القادم

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#7

قبل الدخول في الدرس:

من الان و صاعد قد انتهينا من القسم النظري في دورتنا هذه و الذي لا يقابله قسم عملي

اريد منكم تفاعل كامل بالحوار و بالاسئلة وليس مجرد وضع مشاركات من نوع مشكور .. و الله يعطيك العافية ..... حيث انّ جميع المشاركات الغير مفيدة سوف يتم اخفاءها. ارجوا من الان وصاعد من الجميع المشاركة بمشاركات ايجابية تكون اما بالسؤال عن شيئ او بتوضيح شيئ معين غير مفهوم او بطرح فكرة مفيدة.....

الدرس السادس:

تطبيقات قواعد البيانات باستخدام ADO:

مقدمة سريعة:

ممكن ان تكون التطبيقات التي تستخدم مكونات Ado تطبيقات وحيدة او ثنائية الطبقة وطبعا ذلك يتبع الى نوع قاعدة المعطيات المستخدمة.

مثلا: التطبيقات التي تستخدم مكونات Ado للوصول الى قاعدة معطيات MS-SQL هي دائما تطبيقات ثنائية الطبقة و كذلك الامر بالنسبة الى (SQL Server , Oracle)

من جهة اخرى التطبيقات التي تستخدم Ado للاتصال مع قاعدة معطيات محلية مثل (dbase,FoxPro, Access) هي دائما تطبيقات وحيدة الطبقة

تطبيق قواعد بيانات سريع باستخدام Ado:

قم بتحميل ملف Access المرفق و الذي يحتوي على قاعدة بيانات تحتوي على جدول واحد هو Students و الذي يحتوي على عدة حقول.

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

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

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

10_05_06_08_47_24_11472760441.JPG

سوف تجد العديد من المكونات قم بانتقاء اول مكون و هو AdoConnection قم بوضعه على الفورم ثم قم بالنقر المزدوج عليه سوف تظهر لك النافذة التالية

10_05_06_08_48_17_1147276097_.JPG

قم بعد ذلك باختيار الامر Build سوف تظهر لك الشاشة التالية

10_05_06_08_48_52_11472761323.JPG

سوف تلاحظ اخي الكريم انه هناك العديد من Drivers المدعومة من قبل المزود OLE DB لن نقوم هنا بالشرح الكثير فقط سوف نمر مرور الكرام

من بين ال Drivers المتوفرة قم بانتقاء Microsoft Jet 4.0 OLE DB Provider ثم قم بالنقر على زر التالي سوف تظهر لك الواجهة التالية

10_05_06_08_49_42_11472761824.JPG

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

10_05_06_08_50_27_11472762275.JPG

الان بعد وضع مسار قاعدة البيانات يمكنك فحص الاتصال هل تم بشكل صحيح ام انه هناك مشاكل في الاتصال مع قاعدة البيانات يمكنك الضغط على زر Test Connection اذا اردت ذلك

10_05_06_08_52_02_11472763226.JPG

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

10_05_06_08_52_50_11472763707.JPG

1.zip

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#8

تكملة الدرس:

قم بالنقر على Ok و من ثم Ok في واجهة الاتصال و من قم Ok للواجهة التي بعدها

ماذا فعلنا في هذه الخطوات ما فعلناه هو فقط قم ببناء Connection String للاتصال مع قاعدة البيانات بشكل مرأي اي باستخدام الواجهات و كان بالامكان بناءه بشكل string و هذا ما سوف نتعرض له لاحق باذن الله

10_05_06_08_53_25_11472764058.JPG

قم بوضع القيمة False في الخاصية Login Prompt و ذلك لمنع اظهار واجهة التأكد من اسم المستخدم و كلمة المرور عند الاتصال و من ثم قم بوضع الخاصية Connected = true; و ذلك لفتح الاتصال مع قاعدة البيانات

الا هنا نكون قد قمنا بعمل اتصال مع قاعدة البيانات باستخدام AdoConnection و لكن كيف سوف اتعامل مع الجداول الموجودة في قاعدة البيانات!!؟ كيف سوف اقو

هناك مكون اخر من الصفحة نفسها اسمه Ado Table مخصص للارتباط مع جدول في قاعدة البيانات قم بانزال Adotable ثم قم باتباع الخطوات التالية لربطه مع الجدول

قم بتعليم AdoTable بمؤشر الفأرة و من ثم اذهب الى Object Inspector و قم بتعديل الخصائص التالية

قم بوضع الخاصية Connection = Adoconnection1

ثم بوضع الخاصية TableName = Student حيث سوف تظهر لك قائمة بكل الجداول الموجودة في قاعدة البيانات التي قمنا بالربط معها. بعد التعديل على خصائص Adotable يجب ان تكون الخصائص مثل الصورة التالية:

10_05_06_08_54_12_11472764529.JPG

بعد ضبط اعدادات الجدول قم بالنقر المزدوج على AdoTable سوف تظهر لك الوجهة التالية قم بالنقر بالزر اليميني عليها ثم اختر Add All Fields

10_05_06_08_54_59_11472764991_.JPG

بعد ذلك سوف ترى ان جميع الحقول الموجودة في الجدول Student في قاعدة البيانات قد تم اضافتها الى القائمة كما في الشكل التالي:

10_05_06_08_55_32_114727653211.JPG

قم بالنقر على الحقل ID ثم اذهب الى Object inspector ثم قم بتعديل الخاصية DisplayLabel = رقم الطالب

و من قم بالنقر على الحقل Name ثم قم بالذهاب الى OI ثم قم بتعديل DisplayLabel = اسم الطالب و قم بوضع الخاصية DisplayWidth = 15

قم بتكرار العملية الاخير على كل الحقول البقية بالنسبة

Class = الصف و Displaywidth = 10

Teacher = الاستاذ و Displaywidth = 15

FatherName = اسم الاب و Displaywidth = 15

MotherName = اسم الام و Displaywidth = 15

بعد الانتهاء من ضبط الخصائص السابقة

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

يعني قم بعمل Drag-Drop للحقول داخل الفورم !!! مفاجأة ماذا تلاحظ

10_05_06_08_56_39_11472765991_.JPG

سوف تلاحظ انه قد اضاف لك Label يحتوي على التسمية التي وضعنها في الخاصية LabelWidth لك حقل و سوف تلاحظ ايضا انه اضاف DBEdit و ذلك لكتابة قيمة داخل الحقول سوف نقوم بشرح خصائص DBEdit فيما بعد إن شاء الله

و سوف تلاحظ انه قد اضاف مكون اسمه DataSource و ظيفة هذا المكون هو ربط DBControls مع الحقول الموجودة في DataSet و لنقل الان ان Adotable = Dataset سوف نشرح فيما بعد

الان بشكل سريع قم بالولوج الى القائمة DataControls و من ثم انتقي المكون DBNavigator هو المكون الثاني اذا لم تقوم بتغيير ترتيب العناصر

ثم قم بوضعه على الفورم ثم قم بضبط الخاصية DataSource = Datasrouce1

بعد ذلك قم بوضع القيمة True في الخاصية Acitve لل Adotabe سوف تلاحظ انه هناك بيانات في المكونات DBEdit كما في الواجهة التالية

10_05_06_08_57_52_114727667213.JPG

قم بتشغيل التطبيق و ذلك بالنقر على زر F9 سوف تظهر لك الواجهة التالية

10_05_06_08_58_24_114727670414.JPG

انّ المكون DBNavigator يحتوي على الكثير من الازرار و التي يمكن صنعها بيدنا فيما بعد سوف نتعلم ذلك

لقد قمت بترقيم الزرار و ذلك لشرح عملها

1- الذهاب الى اول سجل و التابع المستخدم لعمل ذلك في الكود هو First

2- الذهاب الى السجل السابق و التابع المستخدم لعمل ذلك هو Prior

3- الذهاب الى السجل التالي و التابع المستخدم لعمل ذلك هو Next

4- الذهاب الى السجل الاخير والتابع المستخدم لعمل ذلك هو Last

5- اضافة سجل جديد والتابع المستخدم لعمل ذلك هو Insert

6- حذف سجل والتابع المستخدم لعمل ذلك هو Delete

7- تحرير السجل الحالي و ذلك للسماح بالتعديل على السجل الحالي والتابع المستخدم لعمل ذلك هو Edit

8- حفظ السجل الحالي اي حفظ التغيير على السجل الحالي في قاعدة البيانات والتابع المستخدم لعمل ذلك Post

9 – الغاء الامر و ذلك لالغاء التعديلات التي تمت على السجل الحالي والتابع المستخدم لعمل ذلك هو Cancel

10- تحديث اي عمل تحديث للبيانات الموجودة والتابع المستخدم لعمل ذلك هو Refresh

بعض التمارين و التي يجب على كل من يريد ان يتعلم بناء تطبيق قواعد بيانات تنفيذها و ذلك لفهم مبادئ قواعد البيانات ارجوا من الجميع و بشدة تنفيذها فلن بتطلب الامر اكثر من 5 دقائق:

1- قم باضافة خمس طلاب جدد (انتقي المعلومات من عندك)

وذلك وفق الاجرائية التالية:

1- قم بالضغط على زر اضافة الذي عليه اشارة +

2- و من ثم قم بتعبئة البيانات في DBEdit

3- قم بالضغط على زر حفظ و الذي عليه اشارة صح

2- الان قم بالتنقل بين السجلات باستخدام ازرار التنقل

3- قم بتعديل بيانات بعض الطلاب وفق الطريقة التالية:

1- قم بتحديد طالب و من ثم قم بالضغط على زر تحرير والذي يمثل اشارة سهم الى الاعلى

2- قم بتعديل البيانات التي تريد تعديلها

3- قم بالضغط على زر حفظ

4- قم بحذف بعض الطلاب وذلك بتحديد الطالب الذي تريد حذفه و من ثم الضغط على زر حذف (الزر الذي وضع عليه اشارة - ناقص)

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

ارجوا تطبيق ما ذكر و السلام عليكم

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#9

اهلا و مرحبا بك اخي الكريم في هذه الدورة

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

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

الا الان فقط واحد قام بتحميل ملف قاعدة البيانات و تجريب المثال السابق شيئ غريب فعلا :blink: :blink: :s

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

بالنسبة الى ال DisplayWidth فهذه الخاصية للحقل تحدد طول العرض للحقل

لقد قمنا بضبط هذه الخاصية في المثال السابق لان العرض 50 كبير جدا للعرض فاذا تركت عرض الحقل على ما هو عليه اي 50 سوف تلاحظ انّ ال DBEdit

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

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

و الى اللقاء في الدرس القادم باذن الله

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#10

مشكور يا اخ وائل كله تمام بس فى سؤال متأخر قليلا ولكنى لا اريد ان اضيع اى معلومة

ما المقصود بثنائية واحادية الطبقة ؟ بالنسبة لقاعدة البيانات

وجارى العمل على التطبيق

#11

وهذا ما قمت به

learn_pro.rar

#12
اقتباس
ما المقصود بثنائية واحادية الطبقة ؟ بالنسبة لقاعدة البيانات

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

احادية الطبقة:

في هذا النوع اخي الكريم من التطبيقات يوجد التطبيق و قاعدة البيانات على نفس نظام الملفات و يستخدم التطبيق قاعدة معطيات محلية أو ملفات تخزن فيها المعلومات على شكل ملفات Flat-File. حيث يحتوي التطبيق على واجهة المستخدم البينية و آ لية الوصول للمعطيات (واجهة التخاطب مثل Ado) و من ثم تأتي قاعدة البيانات مباشرة بعد طريقة الربط

مثال1:

قاعدة بيانات اكسس يأتي بعدها مباشرة (Ado او BDE ) و من ثم DataSource و من ثم واجهة المستخدم

مثال2:

ملف مسطح(مثل اكسل) و من ثم ClientDataset و من ثم DataSource ومن ثم واجهة المستخدم

ثنائية الطبقة:

في هذا النوع من التطبيقات يكون التطبيق الذي تعمله زبون لقاعدة المعطيات التي يدخل عليها الكثير من المستخدمين الاخرين.

يطلب الزبون (اي التطبيق)المعلومات من المخدم و يرسلها المخدم اليه. اما المخدم و ما ادرك ما المخدم فيستطيع معالجة طلبات الزبائن(التطبيقات) في نفس الوقت و ينسق عمليات الوصول و السماحيات و تحديث المعطيات و منع التضارب الخ...

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

مثال1:

قاعدة بيانات موصولة على مخدم SQL Server وهذا ما يسمى ب Remotedatabase يأتي بعدها OLEDB و من ثم ADO (Ado Dataset Component )و من ثم Datasource و من ثم واجهة المستخدم

مثال2:

قاعدة بيانات عن بعد(يعني موصولة على مخدم) مع BDE و من ثم (BDE Dataset Component) و من ثم Datasource و من ثم واجهة المستخدم

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

التطبيقات المتعددة الطبقات:

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

يتصل التطبيق المخدم مباشرة بمخدم المعطيات أو عبر مجموعة معطيات مخصصة.

لمزيد من المعلومات عن هذا الامر يمكن مراجعة ما يلي

http://community.borland.com/article/0,1410,20568,00.html

http://bdn.borland.com/article/0,1410,10224,00.html

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

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#13

شكرا للأخ وليد على مجهوده الطيب

ولدي سؤال يشغل تفكيري من فترة ويعتبر متقدم توع ما ولكنه في نفس الموضوع وهو قواعد البيانات

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

فمثلا أرغب في جعل البرنامج يعمل على ADO و InterBase بدون تعديل البرنامج أو عمل نسخة مستقلة لكل قاعدة

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

مع الشكر والتقدير لمجهوداتك

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

فمثلا أرغب في جعل البرنامج يعمل على ADO و InterBase بدون تعديل البرنامج أو عمل نسخة مستقلة لكل قاعدة

Ado تستند في تعاملها مع قواعد البيانات على OLE Db و التي تدعم انواع كثيرة من قواعدة البيانات يمكنك فقط تغيير Connection String لتتعامل مع

اي قاعدة بيانات تريد

و لكن اريد ان انبهك الى شيئ هو انّ ليس كل DBMS لقواعد البيانات متوافقة مع بعضها البعض اي هناك تعليمات SQL تعمل في Oracle و لا تعمل في Sql Server و هناك تعليمات في SQL Server لا تعمل في Access.

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

فيفضل اخي الكريم الاستناد او الاعتماد على DBMS و احد في البرنامج و اذا اردت دعم اكثر من DBMS لبرنامجك فيفضل عمل اكثر من نسخة من البرنامج

تعمل نسخة تسميها نسخة Access و نسخة اخرى تسميها نسخة بردوكس مثلا الخ

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#15

الدرس السابع:

سوف نناقش في هذا الدرس الامور التالية

1- مشكلة BidiMode لل DBControls المرتبطة مع حقول في قاعدة البيانات.

2- كيف تقوم ببناء Connection String؟

اولا: مشكلة BidiMode :

عند الكتابة داخل Dbedits تلاحظ انّ الكتابة تبقى من اليسار الى اليمين مع اننا قد وضعنا الخاصية BidiMode هي LeftToRight ما السبب ؟؟؟ اليك الجواب

إنّ DbControls تأخذ خاصية BidiMode لها من الحقول المرتبطة معها اي اذا كان لدينا حقل اسم الطالب السابق فأنّ ال DbEdit المرتبط معه اذا وضعنا الخاصية BidiMode له هي RightToLeft و عملنا تشغيل(Run) نلاحظ انّ اتجاه الكتابة ما زال من اليسار الى اليمين و لم يتغير شيئ.

لحل المشكلة السابقة يجب ان نقوم بتغيير BidiMode للحقل المرتبط مع DbControl و ذلك كما يلي

نقوم بتحديد ال DataSet (مثل المكونات Adotable , AdoQuery, AdostoredProc) و من ثم قم بالنقر مرتين عليها في زر الماوس سوف تظهر لك قائمة اسمها Field Editor قم باضافة الحقول اذا لم تكن موجودة و ذلك بالنقر زر يميني و من ثم قم باختيار AddAllFields و من ثم قم بتحديد الحقل الذي تريد تغيير خاصية عرضه من اليمين الى اليسار و من ثم اذهب الى Object Inspector و من ثم قم بتغيير خاصية BidiMode له ال RightToLeft و تأكد بعد ذلك من انّ خاصية BidiMode للفورم هي RightToLeft او ممكن فقط لل Controls التي تريدها ان تكون المحاذاة فيها من اليمين الى اليسار.

ثانيا بناء Connection String :

يعتبر هذا الامر اساسي جدا في بناء اي تطبيق قواعد بيانات و ذلك بسبب مايلي

في التطبيق السابق الذي قمنا بعمله قمنا بالربط مع قاعدة بيانات اكسس و ذلك ببناء اتصال عن طريق استخدام واجهات بناء الاتصال المخصصة لل OLE DB و لكن ماذا لو تغيير مسار قاعدة البيانات؟؟؟؟

عند تغيير مسار قاعدة البيانات لن تستطيع الاتصال و يظهر لك رسالة خطأ عند تفعيل الخاصية Connected لل AdoConnection وذلك بسبب تغيير مسار قاعدة البيانات.

سوف تقول لي لماذا نغيير مسار قاعدة البيانات انا لا اريد ان اغيره فهو شغال وعين الله عليه!!

اقول لك في المستقبل القريب سوف تتضر الى تنصيب هذا البرنامج عند الزبون و طبعا لا تستطيع ان تجبر الزبون على انزال البرنامج الذي قمت ببناءه في المسار نفسه فهو يريد ان ينصبه في المكان الذي يريده!!!و بالتالي سوف تتضر الى تغيير المسار في Connection string ليلائم المكان الذي اختاره الزبون.

في الحقيقة هناك اسباب كثيرة لبناء Connection String للاتصال بشكل يدوي وفهم البارمترات التي يأخذها في حال كنت تريد ان تبني تطبيق قواعد بيانات صحيح وسليم.

لقد تم طرح هذا الموضوع في اماكن عديدة جدا في هذا المنتدى يعني على حد علمي انه هناك اكثر من 10 مشاركات تسأل عن Connection string و كيف امرره الى البرنامج.

ما هو الحل لمشكلة ربط قاعدة البيانات مع التطبيق و تغيير البارمترات؟

الحل: هو ان تقوم انت ببناء هذا ال Connection string بيدك عند Run time بحيث تخزن القيم التي ممكن ان تتغير في الريجستري او في ملف Ini او في ملف عادي اختر الطريقة التي تحبها.

تخيل معي السيناريو التالي: عند بدء تشغيل البرنامج نقوم بالذهاب الى المكان الذي اخترناه لكي يكون مستودعا للبيانات المتغييرة في Connection string (Reg,Ini,txt) نقوم بقراءة هذه القيم من الملف و من ثم نقوم بوضع هذه البيانات في المكان المناسب لها في Connection string هنا اصبح Connection string كامل و من ثم نقوم بفتح الاتصال مع قاعدة البيانات.

اذا قام المستخدم بتغيير اسم او مسار قاعدة البيانات ما الذي يجب ان يحدث: يبدأ تشغيل البرنامج يقوم البرنامج بالذهاب الى المستودع الذي قمنا بوضع فيه البرمترات المتغيرة يتم قراءتها و جلبها الى البرنامج بعد ذلك نحاول الاتصال مع قاعدة البيانات!!! ما الذي سوف يحصل سوف تظهر رسالة خطأ اكيد نقوم بالتقاطها بتعليمة Try catch و نظهر له واجهة الاتصال مع قاعدة البيانات ليقوم الزبون بعد ذلك بتحديد المسار الجديد لقاعدة البيانات و من ثم ناخذ هذا المسار و نمرره الى Connection string و نحاول الاتصال مع قاعدة البيانات فاذا نجحت العملية نقوم بتخزين القيمة الجديدة في مستودع البامترات ليتم الاتصال عبرها في المرة القادمة و اذا لم ينجح الاتصال تبقى واجهة الاتصال ظاهرة مع رسالة تفيد بالخطأ الذي ارتكبه المستخدم.

لكن قبل بناء اي Connection string دعونا نلقي نظرة على بعض البارمترات المهمة فيه:

اولا:البارميتر Provider: يحدد هذا البراميتر نوع المزود لقاعدة البيانات فإذا كنا نريد استخدام اكسس كقاعد بيانات يكون Microsoft.Jet.OLEDB.4.0 Provider = اما اذا اردنا الاتصال مع مخدم SQL Server يكون Provider=SQLOLEDB اما اذا اردنا الاتصال مع مخدم Oracle فيكون Provider=MSDAORA و هكذا.

ثانيا الباراميتر: Data Source تحدد مسار قاعدة البيانات في حال كانت قاعدة البيانات هي اكسس او اسم المخدم الذي اريد الاتصال معه في حال كانت قاعدة البيانات هي SQL Server او Oracle لانّ في الاخيرتين لا نتعامل نحن مع مسار قاعدة البيانات اي مع الشكل الفيزيائي لقاعدة البيانات و انما نتعامل مع مخدم قواعد البيانات.

ثالثا: البارميتر Initial Catalog يدل على اسم قاعدة البيانات على المخدم و ذلك في حال استخدام قواعد بيانات SQL Server او Oracle حيث هذا الباميتر لا داعي للاستعماله مع اكسس....

رابعا: البارميتر: Jet OLEDB:Database Password و هو يحدد كلمة السر لقاعدة بيانات من نوع اكسس او اكسل و لا وجود لهذا الباميتر عند استعمال SQL Server او Oracle.

و هناك الكثير الكثيير من هذا البامتيرات و التي لن اكمل في شرحها لانني سوف اعلمك طريقة سهلة جدا في كيفية بناء هذا Connection String بدون حفظ هذه البارمترات

الشرح المختصر للطريقة هي كالتالي: اولا تقوم ببناء Connection string باستعمال الواجهات OLE DB المخصصة لذلك كما قمنا في الدرس السابق و بعد ذلك تذهب الى خاصية Connection string لل AdoConnection الذي قمت ببناء هذا Connection string فيه قم بنسخه و قم بلصقه في اي محرر نصوص و تمعن فيه و خذلك صفنة مرتبة سوف ترى اسم قاعدة البيانات في هذا النص و سوف ترى كلمة السر في حال كانت قاعدة البيانات من نوع اكسس. الان لبناء Connection string بشكل يسمح لنا بمراعاة هذه البيانات التي ممكن ان تتغير فيه مثل المسار و كلمة السر ما علينا الا تعريف متحولات لها في لغة البرمجة و تخزينها في اي ملف او في الريجستري لنقوم بعد ذلك ببناء Connection string عند تشغيل التطبيق

التطبيق العملي:

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

مثال1: في هذا المثال سوف نقوم ببناء Connection string لقاعدة بيانات اكسس محمية بكلمة مرور و ذلك في ال Run Time اي عند تشغيل التطبيق

لنبدأ بعون الله قم بتحميل الملف المرفق باسم App1 و الذي يحتوي على المشروع الذي قمنا بعمله في الدرس السابق حيث فقط قد اضفت اليه التعديلات لضبط المحاذاة لل Controls.

يتبع

يبدو انني نسيت ان ارفق ملف قاعدة البيانات انا اسف تم تعديل المرفق

App1.zip

تم تعديل هذه المشاركة بواسطة waeldalol في 22 مايو 2006 في 20:01

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#16

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

بسم الله نبدأ اليوم لنكمل الدرس السابع مع مثال الاتصال مع قاعدة بيانات اكسس محمية بكلمة مرور و ربطها مع تطبيق صغير لدلفي

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

اذا كنت لا تريد ان توفر للمستخدم ميزة ان يستطيع تغيير مسار قاعدة البيانات يمكنك وضع قاعدة البيانات في مسار البرنامج و في ال Run Time عند انشاء ال Connection string نقوم بالحصول على مسار البرنامج و من ثم تمريره الى Connection string ليتم بعد ذلك الاتصال مع قاعدة البيانات.

التطبيق العملي

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

1- سوف نقوم بانشاء تابع اسمه GenerateAccessConnectionString يعيد لنا Connection string فقط نحن نمرر له مسار قاعدة البيانات مع اسمها و كلمة المرور له على الشكل التالي

Function TForm1.GenerateAccessConnectionString(DB, Pass: string): string;
begin
  Result:= 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + DB + ';Persist Security Info=True;Jet OLEDB:Database Password=' + Pass;
end;

اذا لم تفهم كثير التابع السابق عد الى الدرس السابق و قم بقراءته بشكل جيد لتعرف ما هي برامترات ال Connection string.

بقي علينا جلب مسار البرنامج مع اسم قاعدة البيانات لتمريرها الى التابع السابق

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

1- Application.ExeName يعيد شريط محرفي يحتوي على مسار البرنامج مع اسم الملف التنفيذي في النهاية

2- ExtractFilePath يقوم باستخلاص و القيام بعملية قطع لمسار البرنامج تاركاً اسم البرنامج مع وجود \ في نهاية الشريط المحرفي

سوف نستخدم الخاصية Application.ExeName داخل التابع ExtractFilePath للحصول على المسار للبرنامج و من ثم نضيف في النهاية اسم قاعدة بيانات الاكسس

الان بعد انشاء التابع GenerateAccessConnectionString قم بانشاء اجرائية اسمها DataBaseConnecting حيث فيها سوف نقوم بتمرير مسار قاعدة البيانات مع كلمة السر الى Adoconnection1 و ذلك كما يلي

procedure TForm1.DataBaseConnecting;
var DBPath: string;
begin
  DBPath:= ExtractFilePath(Application.ExeName) + '1.mdb';
  try
	ADOConnection1.Connected := false;
	ADOConnection1.ConnectionString := GenerateAccessConnectionString(DBPath,'123');//123 is the password for the database
	ADOConnection1.Connected := true;
	ADOTable1.Open;
  except
	ShowMessage('لا يمكن الاتصال مع قاعدة البيانات');
	Application.Terminate;
  end;
end;

الان بعد اضافة التابع و الاجرائية السابقة قم باستدعاء الاجرائية DataBaseConnecting عند انشاء الفورم و ذلك كما يلي

procedure TForm1.FormCreate(Sender: TObject);
begin
  DataBaseConnecting
end;

بعد وضع ما سبق قم بالذهاب الى AdoConnection1 و من ثم الى الخاصية ConnectionString و من ثم قم بتفريغها لاننا لسنا بحاجة اليها.

الان شغل التطبيق سوف تلاحظ ان التطبيق يعمل 100 % يا سلام قم باغلاق التطبيق و من ثم قم بانشاء مجلد جديد وضع فيه الملف التنفيذي exe و قاعدة البيانات 1.mdb و من ثم قم بنقلهما الى اي مكان تريد على الهارد ديسك ثم جرب و شغل البرنامج سوف تلاحظ انّ البرنامج يعمل و لا يوجد اي مشاكل

هكذا تكون قاعدة البيانات قد التصقت بالتطبيق اي اينما يذهب التطبيق يجب ان تذهب قاعدة البيانات معه

الان قم بوضع قاعدة البيانات في مكان غير مكان الملف التنفيذي exe سوف تلاحظ ان التطبيق لن يعمل و سوف تظهر لك رسالة الخطأ التالية ('لا يمكن الاتصال مع قاعدة البيانات') و من ثم سوف يغلق البرنامج

لقد تعلمنا اليوم كيف ننشأ Connection string و نمرره الى AdoConnection و نقو بعد ذلك بالاتصال مع قاعدة البيانات. اذا لم يعمل معك التطبيق السابق قم بتحميل الملف المرفق في هذه المشاركة و تعرف على الخطاء التي وقعت فيها.

الى اللقاء في الدرس التالي حيث سوف نقوم بربط قاعدة بيانات SQL Server مع تطبيق دلفي بدلا من اكسس

السلام عليكم

App1.zip

تم تعديل هذه المشاركة بواسطة waeldalol في 1 يونيو 2006 في 11:37

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#17

متأخر يا استاذ وائل ولكن الباص .. :wacko: :( مزحة :P الحقيقة ظروف الدراسة اخرتنى

المهم لدى بعض النقاط فى الدرس لم اتفهمها جيدا :

1-لقد التبس على امر

اقتباس
1- سوف نقوم بانشاء تابع اسمه GetConnectionstring يعيد لنا Connection string فقط نحن نمرر له مسار قاعدة البيانات مع اسمها و كلمة المرور له على الشكل التالي
وقد اسميته (GenerateAccessConnectionString) فارجو التعديل اذا كنت انا قد اصبت واذا لم اكن قد اصبت فأرجو التوضيح

2- لقد بحثت عن التعليمة try فى help لكننى لم استطيع تفهما ماذا تعنى ال except وكيف اتعامل معها

procedure TMyThread.Execute;
begin
  try
	while not Terminated do
  PerformSomeTask;
  except
	{ do something with exceptions }
  end;
end;

3- كيف اجعل ال dbedit قابلة للكتابة فيها دون ان تعطينى ما يحتوبه الحقل الذى تشير اليه من دون استخدام ال dbnavigator

ارجو ان لا يكون السؤال فى غير مكانه وجزاك الله عنا خيرا

تم تعديل هذه المشاركة بواسطة c_vita في 1 يونيو 2006 في 00:32

#18
اقتباس
وقد اسميته (GenerateAccessConnectionString) فارجو التعديل اذا كنت انا قد اصبت واذا لم اكن قد اصبت فأرجو التوضيح

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

اقتباس
لقد بحثت عن التعليمة try فى help لكننى لم استطيع تفهما ماذا تعنى ال except وكيف اتعامل معها

هذا ليس غرض دورتنا هذه و انما سوف اوضح لك الامر:

عند حدوث اي خطأ في الجمل الواقعة بين Try و Except يتم فورا الانتقال الى Except و يبدأ التنفيذ من عندها و لا يتم رفع الخطأ الى نظام التشغيل في

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

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

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

لم افهم ماذا تريد بالضبط ارجو التوضيح

اقتباس
السلام عليكم

أخي الكريم بارك الله في مجهودك

لكن ارجوا من الله ان يوفقك في اتمام هذا المشروع الطيب

اهلا وسهلا بك اخي مقبل ولكن ارجوا منك عدم وضع مشاركات شكر فقط و انما السؤال عن شيئ معين او المشاركة بفكرة مفيدة

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

واهلا بك مجدداً

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#19

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

محتويات ذلك الحقل فى احد السجلات عن طريقها فلنفرض ان لدى نفس المثال الذى نعمل عليه ولم استخدم dbnavigator كيف يمكن ان اضيف عن طريق الDBEDIT وهى ليست كا EDIT ما علينا الا ان ننظف محتوياتها ثم نقوم بكتابة ما نريد لتخزينه

ارجو ان اكون قد اوضحت الامر

#20

السلام عليكم ورحمة الله وبركاته

نشكرك أخ وائل على المجهود الكبير

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

اول شي التعامل مع التاريخ ووضعت سؤال هنا في المنتدى ولم أجد الإجابة .

الثاني التعامل مع السلاسل يعني متى احط قوس واحد او قوسين ( في بعض الاحيان أربع أقواس على اليمين واربع على اليسار ! ) .

ويا ليت لو تلقي نظرة سريعة على الادوات ( التي تتعامل مع قاعدة البيانات ) يعني أيهم افضل إني استخدم ( DTable - أو DQuery ) .

- العلاقات بين الجداول يا ليت تضع مثال تطبيقي .

- الاتصال بقاعدة بيانات على الانترنت .

وشكرا لك ..

460.gif

#21
اقتباس
الاخ وائل عندما نضع dbedit على الفورم نقوم بربطها بحقل معين فى جدول من قاعدة البيانات وعند استخدامنا للتطبيق يمكن ان نضيف او نعدل او نعرض

محتويات ذلك الحقل فى احد السجلات عن طريقها فلنفرض ان لدى نفس المثال الذى نعمل عليه ولم استخدم dbnavigator كيف يمكن ان اضيف عن طريق الDBEDIT وهى ليست كا EDIT ما علينا الا ان ننظف محتوياتها ثم نقوم بكتابة ما نريد لتخزينه

ارجو ان اكون قد اوضحت الامر

الان وضح الامر تمام

سوف نقوم في الدرس بعد القادم إن شاء الله بعمل DBNavigater على شكل ازرار اي نقوم نحن بصنع DBNavigater بايدينا هل هذا ما تريد :D

انتظر قليلا فقط

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

اول شي التعامل مع التاريخ ووضعت سؤال هنا في المنتدى ولم أجد الإجابة .

الثاني التعامل مع السلاسل يعني متى احط قوس واحد او قوسين ( في بعض الاحيان أربع أقواس على اليمين واربع على اليسار ! ) .

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

اقتباس
ويا ليت لو تلقي نظرة سريعة على الادوات ( التي تتعامل مع قاعدة البيانات ) يعني أيهم افضل إني استخدم ( DTable - أو DQuery ) .

- العلاقات بين الجداول يا ليت تضع مثال تطبيقي .

- الاتصال بقاعدة بيانات على الانترنت .

كل شي جاي بوقته إن شاء الله فقط بعض الوقت و كل شيئ يتم بإذن الله و لكن بالتدريج

يا جماعة من الاول هيك اريد تفاعل :rolleyes: :rolleyes: حتى تنجح الدورة

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#22
اقتباس
السلام عليكم

أخي وائل بارك الله فيك

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

Authentication failed

ارجوا توضيح سبب الخطأ في الملف المرفق

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

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

و انت قمت بوضع قاعدة البيانات في مجلد اسمه Db داخل مجلد البرنامج و بالتالي لم يتمكن من الوصول الى قاعدة البيانات لانّ المسار الذي قمنا بوضعه في Connectionstring هو

DBPath:= ExtractFilePath(Application.ExeName) + '1.mdb';

و بالتالي اذا اردت ان تضع قاعدة البيانات في مجلد DB داخل مجلد البرنامج يمكنك اضافة ذلك الى المسار السابق كما يلي:

DBPath:= ExtractFilePath(Application.ExeName) + 'db\1.mdb';

لاحظ اننا اضفنا DB الى المسار.

تم تعديل هذه المشاركة بواسطة waeldalol في 7 يونيو 2006 في 09:55

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#23

ملاحظة مهمة:

قبل البدء في الدرس الثامن احبب الاشارة الى ملاحظة هامة و هي:

بالنسبة الى مسار قاعدة البيانات ففي الدرس السابق اي السابع كنا قد استخدمنا هذه العبارة

 ExtractFilePath(Application.ExeName)

للحصول على مسار البرنامج و لكن الا يوجد طريقة اخرى نستطيع من خلالها الحصول على مسار قاعدة البيانات الموجودة في مجلد البرنامج؟

الجواب نعم يوجد و لكن كيف؟

في كل انظمة التشغيل يتم الوصول الى الملفات التي في الحاسب باستخدام اما المسار النسبي او المسار المطلق!!

المسار المطلق: باختصار هو انه يجب عليك ان تكتب المسار من الاول الى الاخر يعني لو فرضنا انه لديك مجلد MyApp في قسم C من الهارد ديسك هذا المجلد يحتوي على مجلد اخر اسمه MyData و الذي يحتوي على ملف باسم DB.mdb فيكون المسار المطلق لقاعدة البيانات هو

C:\Myapp\ MyData \DB.mdb

المسار النسبي: و هو يكون نسبة الى مكان ما تكون موجود بداخله فلو كان ضمن المجلد Myapp مجلد اخر اسمه MyEXE و هذا المجلد يحتوي على ملف اسمه Program.exe فالان اذا اردنا الوصول الى قاعدة البيانات باستخدم المسار النسبي نكتب ما يلي

 ..\MyData\DB.mdb

اي انّ النقطتين تعني انه تم الصعود خطوة للاعلى و من ثم نكمل المشوار نحو قاعدة البيانات.

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

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

 .\MyData\DB.mdb

اي انّ النقطة تعني المجلد الحالي للملف EXE و بعد ذلك يأتي mydata المجلد و من ثم قاعدة البيانات

هل لاحظتم الفرق بين المسار النسبي و بين المسار المطلق!؟

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

الجواب: هو فقط اسم قاعدة البيانات بدون استخدام اي مسار.

سؤال اخر: هل هذا يعني انه يمكن ان اضع اسم قاعدة البيانات فقط في التطبيق السابق من دون المسار و من دون استخدام الجملة

 ExtractFilePath(Application.ExeName)؟

نعم فقط اسم قاعدة البيانات اذا كانت قاعدة البيانات في نفس المجلد جرب ذلك بنفسك اذا لم تصدق

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

تم تعديل هذه المشاركة بواسطة waeldalol في 26 يوليو 2006 في 20:55

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#24

السلام عليكم :D

اسف جدا على تأخري في تكملة هذه الدروس بسبب الظروف الدراسية, و سوف اضع درس غدا او بعد غد باذن الله

الدرس سوف يكون حول: ربط قاعدة بيانات SQL Server مع تطبيق دلفي بدلا من اكسس

فاطلب ممن يريد ان يستفيد من هذا الدرس اذا لم يكن عنده SQL Server ان يقوم بتنزيله(راجع قسم SQL Server) و اذا كان لا يعرف شيئ عن

SQL Server ان يقوم بقراءة شيئ ما عنه

الى اللقاء في الدرس

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#25

السلام عليكم ..

لدي سؤال : الان عند الاتصال عن طريق الكود ، فهمت من كلامك انه لابد تكون الاداة موجودة على الفورم حتى لو كنت متصل عن طريق الكود ؟! ويا ليت توضح أيهما أفضل استخدام ADOTable أم ADOQuery

460.gif

هذا الموضوع مغلق.

مواضيع مشابهة