كيف أعمل ربط بن جدولين؟ - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : كيف أعمل ربط بن جدولين؟ (/showthread.php?tid=10741) الصفحات:
1
2
|
كيف أعمل ربط بن جدولين؟ - ALG2009 - 05-04-2020 السلام عليكم كيف أقوم بربط جدولين بعلاقة 1,N في قاعدة البيانات من نوع فايربيرد مع العلم أني حاولت الحصول على برنامج مجاني ولم أجد؟ RE: كيف أعمل ربط بن جدولين؟ - larbiparadox - 05-04-2020 وعليك السلام نفترض أن لدينا قاعدة بيانات كمثال إسمها DATABASE.FDB تحتوي على : - جدول الرئيسي الاب (1) إسمه PERE يحتوي على الحقول التالية CODE و NOM و OBS - جدول ثانوي الابن (N) إسمه FILS يحتوي على الحقول التالية CODE و NOM_FILS و AGE العلاقة بين الجدولين هو CODE أي كل أب له مجموعة من الأولاد --------------------------------------------------------------------------- * لمذا أختار فايربيرد ؟ - إذا كنت أريد كتابة برنامج لمستعمل واحد لا يحتاج المشاركة ، لكن قاعدة البيانات ضخمة - أحتاج البرنامج للعمل على الشبكة - يمكن لعدة منصات للولوج إلى قاعدة البيانات - إلخ ... توجد عدة أسباب لاختيار --------------------------------------------------------------------------- تعريف فايربيرد : نبذة تاريخية انبثقت فايربيرد من الشفرة المصدرية لقاعدة بيانات انتربيس 6.0 من بورلاند. وهي مفتوحة المصدر ولا يوجد بها ترخيص مزدوج. وسواء احتجت إليها لتطبيقات تجارية أو مفتوحة المصدر، فهي مجانا بالكامل!
تقنية فايربيرد قيد الاستخدام منذ 20 عاما، مما يجعلها منتجا شديد النضوج والاستقرار.المميزات الرئيسية لا يغرنك حجم المثبت! فايربيرد هو نظام قوي ومكتمل المزايا لإدارة قواعد البيانات العلائقية. ويمكنه مناولة قواعد بيانات حجمها من مجموعة كيلو بايت فقط إلى العديد من الغيغابايت مع أداء جيد ودون الحاجة إلى صيانتها في أغلب الأحوال! [/url] المصدر من الموقع الرسمي النسخ النهائية للتحميل Firebird 2.5 Firebird 3.0 للتحميل من الموقع الرسمي كما توجد Firebird 4.0 فهي تطوير مستمر Beta ليست نهائية لتحميل من الموقع --------------------------------------------------------------------------- - قاعدة Firebird يمكن تثبيتها على Linux x86 و Linux AMD64 و windows x86 x64 * معلومات مهمة : لو ثبتنا Firebird 2.5 وأنشأنا بها قاعدة البيانات فستكون نسختها اصدار (ODS) 11.2 فلا يمكن فتحها بنسخة أخرى إذا ما هو ODS هو إختصار لـ On Disk Structure أي تحتوي كل قاعدة بيانات Firebird على بنية محددة جيدًا. يشير رقم إصدار ODS (على بنية القرص) المخزن في صفحة رأس قاعدة البيانات إلى إصدار ODS المستخدم في قاعدة البيانات هذه. نسخة Firebird 2.5 رقم اصدار البنية الخاص بها ODS هو 11.2 نسخة Firebird 3.0 رقم اصدار البنية الخاص بها ODS هو 12.0 * كما توجد نسخ تدمج مع البرنامج لا تثبت embedded أي بإختصار محمولة لا نحتاج الى تثبيت فيربيد و لا تعمل على الشبكة * اسم المستعمل الفتراضي لقاعدة البيانات : sysdba * كلمة المرور الافتراضية لقاعدة البيانات : masterkey - بنسبة لكلمة المرور يمكننا تغييرها بعد التنصيب عند النسخ 2.5 و الخلف ، أما النسخة 3.0 يمكن تغييرها عند التثبيت -------------------------------------------- ما هي البرامج التي تساعدني في إنشاء قواعد بيانات الفيربيرد : البرامج المجانية : * برنامج FlameRobin : موقع البرنامج التحميل من هنا لتحميل * برنامج TurboBird: موقع البرنامج أما البرامج التجارية : *برنامج Firebird SQL Studio v6.0.2.487 و Firebird Database Designer v6.0.1.470 موقع البرامج من هنا *برنامج Firebird Maestro موقع البرنامج من هنا * برنامج IBExpert Personal Edition تعد أفضل برنامج ، موقع البرنامج [url=www.ibexpert.net]من هنا ، كما توجد نسخة Free لكنها محدودة الخصائص -------------------------------------------- * سأثبت برنامج FlameRobin ، أمر مهم إذا ثبت فيربيد x32 يجب تثبيت FlameRobin x32 - نقوم بإنشاء قاعدة بيانات المذكورة في أول الموضوع DATABASE.FDB و التي تحتوي على جدولين PERE و FILS و كل جدول بدوره يحتوي على حقول PERE (CODE و NOM و OBS) ، FILS (CODE و NOM_FILS و AGE) يتبع ..... RE: كيف أعمل ربط بن جدولين؟ - larbiparadox - 06-04-2020 إتمام المشاركة السابقة .................................. - بعد أن أنشأة قاعدة البيانات DATABASE.FDB سأقوم بكتابة الجداول عن طريق لغة SQL - لتنظيم أسماء الجداول سأسمي جدول الاب بـ TABLE01_PERE و جدول الابن بـ TABLE02_FILS تكون كتابة جدول الاب كتالي كود : CREATE TABLE TABLE01_PERE ( - هنا قلنا أشأ جدول إسمه TABLE01_PERE - و يحتوي الجدول على الحقل CODE هذا يأخذ أعداد صحيحة INTEGER و لا يقبل أن يكون فارغ NOT NULL و لا تكرر القيم PRIMARY KEY - الحقل NOM و OBS تكون قيمته نصية VARCHAR طولها 22 حرف * كملاحظة بنسبة للحقول النصية بأغلب نستعمل CHAR ، يسألني شخص لماذا إستعملت VARCHAR ، أولا يجب أن نعرف الفرق بينهما كمثال : لو أني أخزن قيم ثابة كمثال طول النص 2 من حروف ، إذا كانت القيمة باللغة أجنبية تكون كمثال القيمة AB ليس بمشكل ، وإذا كانت باللغة العربية و كتبنا كمثال أب إذا البرنامج يدعم unicode سيخزنها أب و العكس تخزن برموز و عدد الحروف سيفوق ما سرحنا به ومنه نستنتج أن CHAR يكون ثابت طول الحروف و VARCHAR يكون متغير طول الحروف - بالنسبة للحقل CODE سأجعله يأخذ قيمة تلقائية ، أقصد ترقيم تلقائي Autoincrement تكون الكتابة SQL كتالي الخطوة الأولة سأنشأ حقل GENERATOR وفائدة منه تخزن فيه أخر قيم الحقل الترقيم تلقائي تكون تسميته GEN_TABLE01_PERE_ID كود : CREATE GENERATOR GEN_TABLE01_PERE_ID; الخطوة الاثانية سننشأ TRIGGER نستطيع أن نقول كأنه إجراء مهامه عند إضافة حقل سيقوم بعملية حساب إضافة قيمة المخزنة في الحقل GENERATOR كود : SET TERM ^ ; - نشرح الكتابة: بالنسبة إلى ;^ SET TERM نحن نقول يبدأ من و ينتهي عند^ ; SET TERM - ننشأ TRIGGER إسمه TABLE01_PERE_BI خاصة بالجدول TABLE01_PERE ، في حالة نشاط BEFORE INSERT عند إدراج حقل يعطي قيمة جديدة للحقل CODE وذلك بالجمع عن طريق الدالة GEN_ID بإضافة 1 إلى حقل GENERATOR المسمى GEN_TABLE01_PERE_ID * يمكننا الإستغناء على الخطوة الاولة و الثانية فهي خاصة بالترقيم التلقائي ، وهذا بإعطاء قيمة مباشرة عند حجز البيانات * الان إنشاء الجدول TABLE02_FILS ، أضن أنه لا يحتاج إلى شرح كود : CREATE TABLE TABLE02_FILS ( يتبع ... إتمام المشاركة السابقة .................................. شرح بعض الامور الاساسية الخاصة بـ FlameRobin 1 - فتح قاعدة بيانات موجودة من قبل 2 - إشاء قاعدة بيانات 3 - إنشاء جدول 4 - إظهار قيم الجدول 5 - محرر كود SQL 6 - مجموعة من خيارات تسهل علينا الكتابة من : فتح و إدراج و تحديث و وحذف ،... إلخ ، كل يأتي منسق ما عليك سوى التعديل يتبع .... RE: كيف أعمل ربط بن جدولين؟ - larbiparadox - 06-04-2020 إتمام المشاركة السابقة .................................. الان إلى عملية الربط: بواسطة دلفي 7 : يعتمد الدلفي على مكونات InterBase لربط بقواعد البيانات ، نعلم جيدا أن أصل FireBird هو InterBase و تابع الملف هو .GDB و الفيربيرد هو .fdb * الأن إلى إدراج مكونات الربط : 1 - IBDatabase1 : هو لربط قاعدة البيانات ، نفترض أن مسار قاعدة البيانات في جهازي أو جهاز أخر هو C:\FDB1\DATABASE.FDB الان يجب معرفة بعض الامور: إذا كنت أريد الاتصال بقاعدة البيانات على نفس الجهاز أي محلي يكون عنوانه : localhost أو 127.0.0.1 الإعدادات : الاتصال من جهاز محلي : 1 - نختار إتصال عن بعد 2 - إسم الجهاز المحلي localhost أو 127.0.0.1 و بعدها إسم محرك الاقراص c تكتب على هذا الشكلlocalhost\c \\ 3 - مسار قاعدة البيانات بدون إسم محرك القرص FDB1\DATABASE.FDB\ 4 - إسم المستعمل 5 - كلمة الامرور 6 - طريقة الكتابة 7 - فحص الاتصال الاتصال بجهاز أخر : - نفترض أن لدينا جهاز أخر عنوان ip هو 192.168.137.10 و إسم الجهاز PC2-PC * كيفية معرفة عنوان ip و اسم الجهاز - عن طريق CMD نكتب ipConfig ، أما إسم الجهاز بواسطة إقونة جهاز كمبيوتر كليك يمين 2 - IBTable1 و IBTable2 وهذا ربطهما بالجدولين الاب و إبن و بعدها نربطهما مع IBTransaction1 لا يمكننا ربطه مباشرة مع IBDatabase على عكس IBQuery 3 - IBTransaction1 وسيط لعمل Transaction بين IBTable و IBDatabase و DataSource لربطهما مع DBGrid يتبع .... إتمام المشاركة السابقة .................................. الاتصال بجهاز أخر : - إذا كان ip ثابت ، نستعمل ip أما إذا كان متغير نستعمل إسم الجهاز - الأن لدينا جهاز أخر عنوانه ip هو 192.168.137.10 و إسم الجهاز PC2-PC - و قاعدة البيانات موجودة في مجلد إسمه FDB2 الموجود في محرك الاقراص :C و قاعدة البيانات إسمها DATABASE.FDB * شيئ مهم بالنسبة لـ windows7 أو مضاد الفيروسات يجب سماح الاتصال بالمنافذ و المشاركة بالنسبة للنظام كتالي التأكد من ip عن طريق ping الان عملية الاتصال يتبع .... إتمام المشاركة السابقة .................................. الان إلى عملية الربط بين الجدولين: يجب إدراج معلومات وهذا كي يتسنى لنا الربط بين الاب و الابن - على سبيل المثال الاب الاول رقم code يساوي 1 و بتالي رقم code أبنائه هو 1 ، نفس الشئ للاب الثاني رقم code يساوي 2 و بتالي رقم code أبنائه هو 2 يكون كتالي الان إلى عملية عند الضغط على الاب الاول يظهر أبنائه و نفس الشئ للاب الثاني 1 - نضغط مرة واحدة أو نحدد جدول الابن IBTable2 2 - من MasterSource نختار DataSource الاب والذي اسمه DataSource1 و الذي هو المتحكم 3 - في MasterFields نضغط على قفل الذي فيه ثلاث نقاط ... تخرج النافذة 4 - نحدد الحقل المشترك لابن 5 - و بعدها نحدد الحقل المشترك للاب 6 - نضغط على اضافة 7 - تأكيد الاعدادات و الان النتيجة ، عند الضغط في DBGrid1 الخاص بالاب يظهر فقط الابنائه في DBGrid2 نفس السئ للاب الثاني يظهر ابنائه * اردت التبسيط لكيف تصل الفكرة - ليس بالضرورة اتباع نفس الاسلوب توجد عدة طرق للربط * والكل من هذا أن دلفي 7 لم يعد يلبي جميع متطلبات المبرمجين ، مثلا أنا عندي سنوات لم أبرمج به الشرح القادم إذا وجدت الوقت هو FireDAC الموجود في نسخ الدلفي الجديدة يعد الأفضل من حيث التوسع يحتوي مميزات تسهل و تساعد على البرمجة بالتوفيق RE: كيف أعمل ربط بن جدولين؟ - ALG2009 - 06-04-2020 جزاك الله خير وأدخل الجنة عل هذا الشرح الرائع لقد طبقت الربط مع العلم أني استخدم فايرداك وهنا لي سؤال لماذا قمت الربط بالدلفي أليس الربط يكون في قاعدة البيانات نفسها اي ربط الجدولين داخل قاعده البيانات؟ وأريد أ أسألك أيضا ما الفرق بين الربط بالدلفي كما قمت بشرحه والربط داخل قاعده البيانات هل هناك خصائص لكل منها؟ RE: كيف أعمل ربط بن جدولين؟ - larbiparadox - 06-04-2020 (06-04-2020, 04:43 PM)ALG2009 كتب : جزاك الله خير وأدخل الجنة عل هذا الشرح الرائع أولا شكرا لك - بالنسبة للربط يكون في البرنامج لأنه هو الذي يظهر النتيجة ، وهذا وفقط معطيات المخزنة في قاعدة البيانات ،لكن في تصميم قاعدة البيانات يظهر لك ذلك ان الجداول مربوطة مع بعضها البعض - توضع في قاعدة البيانات حقول مشتركة للربط بينها و بين الجداول ، أضن أن فكرتك جائت من Access حتى ولو رأيت الربط لكن البرنامج هو الذي يقوم بذلك كمثال يمكن فتح جدولين على انهما جدول واحد عن طريق sql لكن وفق حقول مشتركة - بمعنى أخص أن البرنامج يطلب من SGBD وهو يعيد له مايطلب ربما تجد من الاخوة في المنتدى يشرحها افضل مني RE: كيف أعمل ربط بن جدولين؟ - ALG2009 - 06-04-2020 جزاك الله خيرا وحفظك من كل سوء في انتظار الجواب من البقية وتوضيح الغموض وكيف يمكن الربط بين جدولين علاقة 1 الى 1 ؟ RE: كيف أعمل ربط بن جدولين؟ - larbiparadox - 06-04-2020 (06-04-2020, 09:14 PM)ALG2009 كتب : جزاك الله خيرا وحفظك من كل سوء شكرا اخي الكريم استعمل sql عن طريق SQL Joins كمثال كود : SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate توجد عدة خيارات
RE: كيف أعمل ربط بن جدولين؟ - ALG2009 - 07-04-2020 على ما أظن Join تستخدم مع الجدول المربوطه في قاعدة البيانات وهذا ما لم أجد له إجابة لحد الآن ؟ أنت قلت بأن إقتباس :[size=small]1 - نضغط مرة واحدة أو نحدد جدول الابن IBTable2[/size] وقلت بأن هذه الطريقة هي علاقة 1,n فكيف يمكن تمثيل العلاقة 1,1 ؟ هل تمثل بنفس الطريقة!! بهذا أعيد السؤال كيف أقوم بربط جدولين بعلاقة 1,N في قاعدة البيانات من نوع فايربيرد مع العلم أني أحاول الحصول على برنامج مجاني ولم أجد؟ RE: كيف أعمل ربط بن جدولين؟ - larbiparadox - 08-04-2020 (07-04-2020, 01:29 PM)ALG2009 كتب : على ما أظن Join تستخدم مع الجدول المربوطه في قاعدة البيانات وهذا ما لم أجد له إجابة لحد الآن ؟ بالنسبة للشرح السابق تكون النتيجة في الجدولين منفصلين لكن مربوطان مع بعضهما البعض و بالنسبة إلى Join تكون النتيجة في جدول واحد ، أي دمج عدة جداول مع بعضها البعض وفق شروط معينة |