كيف أقوم بإدخال معلومات في جدول من نوع N,N
#1
Question 
السلام عليكم
هناك جدولين جدول التلميذ وجدول الدروس وقمت برط الجدولين مع بعض  في قاعدة البيانات حيث التلميد يدرس أكثر من درس والدرس يدرسه أكثر من تلميذ حيث كانت العلاقة مننوع n,n فتم إضافة جدول ثالث لتكون لتكون العلاقة 1,n 
المشكل أردت ربط الدروس مع التلميذ لإظهارها بالفاست ريبورت لم أستطع
كيف يمكن إدخال الدروس لكل طالب وإظهارها في الفاست ريبورت؟ احترت كيف يمكن إدخال الدروس لكل طالب مع العلم  أني أضفت جدول ثالث وضعت به معرف التلميذ  ومعرف الدروس Huh

[صورة: titled.jpg]
الرد
#2
لقد قمت بإنشاء الجداول وربطهم في قاعدة البيانات نوع القاعده فايربيرد
المشكل كيف يمكن إظافة اسم التلميذ واسم الدرس وعند القيام بالضغط على الاسم يظهر الدرس التابع له أو بإظهار  الاسم في الفاست ريبورت يظهر الدرس التابع له؟


الملفات المرفقة
.rar   Newfolder.rar (الحجم : 123.29 ك ب / التحميلات : 2)
الرد
#3
وعليك السلام

* لا أرى ضرورة للجدول الثالث الرابط بين الجدولين ، إضافة حقل التلميذ في جدول الدروس ، رقم 1 هو جدول التلاميذ و رقم 2 هو جدول الدروس
في خصائص الجدول رقم 2   FDTable2 في MasterSource نعطيه إسم DataSource الذي يتحكم في الجدول الثاني و نعطيه إسم الحقل المشترك ، أي يظهر فقط دروس التلميذ الذي انت عنده وعند حفظ الدروس يأخذ الحقل قيمته من جدول الرئيسي

[صورة: 204445319.png]


* أرى أنك نسيت Trigger فهو يقوم بزيادة القيمة عند إضافة الحقل و Generator يخزن أخر قيمة للحقل عند الاضافة يزيد عليها

[صورة: 544879631.png]


الملفات المرفقة
.rar   Newfolder.rar (الحجم : 64.84 ك ب / التحميلات : 11)
الرد
#4
أخ العربي، العلاقة n-n صحيحة، والذي قمت به يجعل لكل درس تلميذ واحد فقط.
أخ alg2009 يمكنك انشاء lookup field في الجدول الثالث وتظهر بها field التي تريدها من الجدولين الاخرين.
[-] كل من 1 user says قال شكرا ل sofiane201 على المشاركة المفيدة
  • ALG2009
الرد
#5
(13-07-2020, 08:11 PM)sofiane201 كتب : أخ العربي، العلاقة n-n صحيحة، والذي قمت به يجعل لكل درس تلميذ واحد فقط.
أخ alg2009 يمكنك انشاء lookup field في الجدول الثالث وتظهر بها field التي تريدها من الجدولين الاخرين.

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

_ في الحالة التي أتكلم عليها ، مفتاح الدرس ID_LESS يكون ثابت لا يتغير إلا بتغيير الدرس ، يجب أن يرقم يدويا هنا يجب التعديل على قاعدة البيانات يجب أن لا يكون تلقائيا


_ لو أردت معرفة التلاميذ الذين يدرسون درس معين ، عن طريق لغة sql الفلترة بواسطة رقم الدرس ID_LESS و الجمع بين القاعدتين عن طريق join بواسطة رقم التلميذ ID_STUDENT

[صورة: 392857383.png]

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


الملفات المرفقة
.rar   Newfolder.rar (الحجم : 64.81 ك ب / التحميلات : 11)
الرد
#6
لا يمكنني النظر في ملف قاعدة البيانات لأني بالهاتف حاليا، هلا وضعت هنا sql الخاص بجدوليك حتى يتضح جوابك
الرد
#7
بارك الله فيك أخي وأستاذي العربي

هل هذا يعني التعامل دائما مع العلاقة كثير لكثير بهذه الطريقة دون إضافة جدول آخر؟

ما اسم البرنامج الذي تتعمل به مع قاعدة البيانات
الرد
#8
(13-07-2020, 11:52 PM)sofiane201 كتب : لا يمكنني النظر في ملف قاعدة البيانات لأني بالهاتف حاليا، هلا وضعت هنا sql الخاص بجدوليك حتى يتضح جوابك

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

وفكرت بأن يكون الجمع بين الجدولين كتالي في حالة إضافة حقل التلميذ للدروس
PHP كود :
SELECT  STUDENT.ID_STUDENT, STUDENT.NAME
FROM STUDENT
LEFT JOIN LESSONS 
ON LESSONS
.ID_STUDENT = STUDENT.ID_STUDENT
where  LESSONS
.ID_LESS = 1 

لك الحق الأخ sofiane201 ، سأعيد النظر في قاعدة البيانات و الربط

بالنسبة للأخ  ALG2009 العلاقة صحيحة فأنتظر الإجابة
[-] كل من 1 user says قال شكرا ل larbiparadox على المشاركة المفيدة
  • ALG2009
الرد
#9
بالنسبة لـ : ما اسم البرنامج الذي تتعمل به مع قاعدة البيانات

البرنامج هو : Firebird Maestro

* تم اضافة Trigger و هذا لترقيم الالي ، وهذا ليس ضروري يمكنك حجزها يدويا
[صورة: 891448635.png]


* تم ربط المكونات مع كل جدول حسب الارقام
[صورة: 748678573.png]

- بالنسبة لـ DBLookupComboBox1 الخاصة بقائمة الدروس ، مصدر قائمة الدروس من جدول رقم 4 ، أما الحفظ في الجدول رقم 3

- بالنسبة للجدول رقم 3 كما يظهر في خصائص FDTable2 ربطناه مع جدول الاول كإبن للجدول رقم 1  FDTable1، إسم الحقل المتحكم ID_STUDENT

- العملية رقم 5 عن طريق SQL جمعت بين الجداول الثلاث وفق شرط التصفية للدرس
PHP كود :
     with FDQuery1 do
    begin

    sql
.clear;
    sql.add('SELECT  STUDENT.ID_STUDENT, STUDENT.NAME ');
    sql.add('FROM STUDENT ');
    sql.add('JOIN STUDLESSON ');
    sql.add('ON STUDLESSON.ID_STUDENT = STUDENT.ID_STUDENT ');
    sql.add('JOIN LESSONS ');
    sql.add('ON LESSONS.ID_LESS = STUDLESSON.ID_LESS ');
    sql.add('where  LESSONS.ID_LESS = :ID_LESS');

    ParamByName('ID_LESS').asString:=   FDTable4.FieldByName('ID_LESS').AsString;



     Open ; 

[صورة: 584504851.png]

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

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

تكون كأتي
PHP كود :
     with FDQuery1 do
    begin

    sql
.clear;
    sql.add('SELECT  STUDENT.ID_STUDENT, STUDENT.NAME ');
    sql.add('FROM STUDENT ');
    sql.add('JOIN STUDLESSON ');
    sql.add('ON STUDLESSON.ID_STUDENT = STUDENT.ID_STUDENT ');
    sql.add('where  STUDLESSON.ID_LESS = :ID_LESS');

    ParamByName('ID_LESS').asString:=   FDTable4.FieldByName('ID_LESS').AsString;



     Open ;


    end; 


الملفات المرفقة
.rar   FB_v3 ALG2019.rar (الحجم : 95.08 ك ب / التحميلات : 11)
[-] كل من 1 user says قال شكرا ل larbiparadox على المشاركة المفيدة
  • ALG2009
الرد
#10
لكن مازال هناك مشكل وهو عند إضافة تلميذ جدديد وإختيار من الكومبوبكس إسم الدرس والضغط على حفظ يضاف التلميذ فقط دون الدرس الذي تم إختياره من الكومبوبوكس
حيث لو تم الضغط على التلميذ في الديبيقريد ثم الضغط على إضافة لإضافة تلميذ سيتم إضافة الدرس المحدد في الكمبوبوكس للتلميذ الذي الذي تم إختياره
هناك خطب ما
لماذا عند الضغط على إضافة تلميذ جديد وإختيار الدرس في الكمبوبوكس والضغط على حفظ لا يتم حفظ الدرس أيضا؟
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم