easyDelphi Q&A
+1 تصويت
77 مشاهدات

السلام عليكم 
لدي جدولين رئيسين مربوطين يحتوي كلاهما على مفتاح رئيسي Session و Specialisation 
و جدول البريدج أو الابن 
etudier 
Session يحتوي على حقل رئيسي 'Nbr_Session' و Dat_Deb_Session و Dat_Fin_Session 
Specialisation يحتوي على حقل رئيسي ' Cod_Spc' و Cod_Brnch و Spc_Brnch و Niv_Brnch 
etudier  يحتوي على حقلين رئيسين  'Nbr_Session ' و 'Cod_Spc ' 
كيفية عمل insert أو ملأ معلومات لجدول etudier   و  Session معا علما أنهما يملاكان حقلا مشتركا 
و نفس الشيئ مع  جدول Specialisation  حقل مشترك أيضا . مملوء في الجدول Specialisation  و فارغ جدول  etudier   

جميع حقول Specialisation  مملوءة مسبقا بالمعلومات وقمت ب فلترتها ب dblooukupcobobox 
جميع حقول جدول 
Session وetudier  جدول فارغة 
الكود الذي استعملته 

with DataM.ADOTable2  do

begin

insert;

FieldValues['Nbr_Session'] := Edit1.Text;

FieldValues['Dat_Deb_Session'] := sDateEdit1.Date;

FieldValues['Dat_Fin_Session'] := sDateEdit2.Date  ;

Post;

 

 end;
وهذا الكود ملأ جدول Session فقط مع بعض الاخطاء //كالتكرار 

فيديو 
https://vimeo.com/285746148

سُئل في تصنيف vcl بواسطة (1,330 نقاط)
عُدل بواسطة | 77 مشاهدات
 

1 إجابة واحدة

+3 تصويتات

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

ثانيا إليك بعض الملاحظات :

  • لديك مشروع يبدو لي من حيث إسم جداوله هو تحت إسم ( تسيير المتربصين على مستوى المعهد أو التكوين المهني) ... وعلى ذكر الجداول التي قدمتها لنا في أسئلتك السابقة و كان من أهمها الجدولين ("TBranche" و "TSpecialite") و التي يجب على المبرمج ملأها مسبقا حتى يتسنى له إتمام الإنجاز و يعرف ماذا يضيف و ماذا يحذف كجداول أو "Attribut" .....

 لدينا الجدول "TBranche" بمعنى جدول الشعب و هو ببساطة عبارة عن جدول العائلة أو الأب لجدول "TSpecialite" أي جدول التخصصات:

و جدول "TSpecialite" كالأتي:

 

للأشارة أن الحقل "Branche" من الجدول "TSpecialite" أعلاه هو ليس من نوع نصي بل هو المفتاح الخارجي للجدول "TBranche" بمعنى أنه من نوع رقم و المحتوى الظاهر في الجدول أعلاه هو عبارة فقط عن "Lookup" للحقل "Nom" من الجدول  "TBranche" . المهم أنت طرحت في سؤالك عن كيفية الأضافة على مستوى الجدول الناتج بين الجدولين "TSpecialite" و التي تعني التخصص و "TSession" و التي تعني الدورة و قد سميت هذا الجدول الناتج بإسم "Etudier" مع العلم أنك لم تعطه أصلا محتوى قابل للأضافة بالأضاقة إلى أنك تستعمل طريقة "Meriseفي تحليل و تصميم قاعدة المعطيات و هذا ما جعلني أحاول تصحيح بعض التقاط في ما يخص هذا الجدول الناتج من علاقة many-to-many " للجدولين السالف ذكرهما . أولا دعني أضيف الجدول  "TSession" بمعنى الدورة و بعدها نتكلم عن الباقي :

لديناهنا الجدول  "TSession"في حالة "Restructure"

ملاحظة : كمثال إن هذا الجدول  "TSession" يمكن تشبيهه بجدول مدة السنوات أو مدة الدراسة "Schooling" أو "Formation" في قاعدة معطيات مثلا  تسيير الطلبة أو التلاميذ في جامعة أو مدرسة ...غير أن هذا الأخير يتكرر مرتين في السنة (دورة فيفري و دورة سبتمبر) و في الجامعة أو المدرسة يتكرر كل سنة ....

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

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

إذا الجدول الناتج أصبح له إسما آخر منطقي و ذو محتوى مقنع أيضا أتدري ما هو ؟ إنه الجدول الذي بإسم "TSect_Ouverte"  بمعنى بالعربية جدول الفروع التابعة للتخصصات المفتوحة بمعنى الأقسام المتاحة في هده الدورة تحت نفس التخصص .و الذي أتى بمحتوى كنتيجة: عدد الأقسام المفتوحة "Nbr_SectionOuverte" و العدد الأقصى للتلاميذ أو المتربصين "Nbr_Max_Etudiants" و في الأخير عدد الأساتذة كحقل إختياري  "Nbr_Ensiegnants" .

  • لديك الأن هذه الصور الخاصة بهذا ال"MCD"  أعلاه في حالة "Restructure":

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

تم الرد عليه بواسطة (14,010 نقاط)
عُدل بواسطة
السلام عليكم و عيدكم مبارك
شرح أكثر من رائع الاخ bravesofts ربي يجازيك كل خير
تحية كبيرة ليك استاذ و جميع القائمين على الموقع //
المهم mcd الخاص بي فيه بعض التعقيدات التي نتج عنها أخطاء كثيرة التي أعلم بوجودها و لم استطع تصحيحها للأسف للأنني سبق و أعطيت mcd للأستاذ المؤطر و هو يشدد على على عدم التغيير فيه .
لذلك ما أتعلمه منكم الان ليس للمذكرة بل لما هو قادم  انا أحاول فقط التخلص من هذا المشكل الحالي
ملاحضة قمت بانشاء الmcd ب sap PowerDesigner
2-حسب فهمي لشرحك للجدول الابن استنتنجت أن ما تم جمعه من في الجدول الابن Etudier صحيح الى حد ما لماذا
لقد جمع لنا رقم الدورة والتي هي مفتاح رئيس لن يتكرر و نستطيع ايجاد رقم الدورة لاحقا ببحث بسيط في لجدول الاب
و جمع لنا رمز التخصص و هو ايضا مفتاح رئيس و به نستطيع ايجاد اسم التخصص في الجدول الاب و من ثم الشعبة التابع لها هذا التخصص

لدي عدة أسألة أرجو الرد عليها  قدر الامكان لانها مهمة جدا في سد الفراغات في تفكيري
1-هل عند ملأ رقم الدورة في الجدول الاب من المفروض أن تملأ  رقم الدورة في الجدول الابن تلقائيـــــــــــــــــــــــــا دون تدخل .
2-الجدول التخصص مملوء مسبقا لم أستطع ايجاد حل لملأ رمز التخصص في جدول الابن أقصد بحل هنا الكود المناسب للادخال
3-بعد القيام بكل هذا سأنتقل الى انشاء أفواج جديدة تنتمي للتخصص المفتوح سابقا والتي ستضم متمهنين  حسب mcd أردت فكرة عن كيفية
ذلك
عذرا على الاطالة و عيدكم أسعد و جزاكم الله عنا كل خير
السؤال الأول: هل عند ملأ رقم الدورة في الجدول الاب من المفروض أن تملأ  رقم الدورة في الجدول الابن تلقائيـــــــــــــــــــــــــا دون تدخل .؟
الجواب: ماذا تقصد بالأين هنا ؟ و إن قلنا فرضا أن هناك إبن ... فما دخل أن تضيف سجلا "Record" جديدا على مستوى الجدول الأب أو الدورة فينتج عنه أتوماتبكيا أو تلقائيـــــــــــــــــــــــــا إضافة جديدة على مستوى الجدول الأبن "Etudier" (هل فقط لأن من أحد حقوله الكود الخاص بالدورة ) ؟؟؟ و كذلك الأبن ما دخل الأضافات أو التعديلات أو حتى الحذف على مستوى الجدول الأبن لينتج عنها تغيرات أو إضافات على مستوى الجدول الأبن الثاني الخاص بالجدول الأبن الأول ؟؟؟ هذا ليس بالسقوط المتتابع لقطع الدومينو ... ههههه لا بل إنها مجرد جداول نتعامل معها على حسب فهمنا للبرنامج و مخطط البيانات و ما يريده الزبون .. فلا دخل للأبن في الموضوع بمعنى الأضافة و التعديل على مسنوى الأب لا تؤثر مطلقا على الجدول الأبن إذا ماكان هذا الأخير فارغا في الأصل .. أما إذا ما كان مملوءا فيتغير في الأبن فقط البيانات التابعة للحقل كود أو مفتاح الخاص بالجدول الأب "Session" إذا ما كان هذا الأخير فقط مسجلا من قبل في الجدول "Etudier"  ( بالمختصر المفيد لا يملأ أي جدول إبن بحقول ما دام الجدول الأب غير مملوء و العكس صحيح و هنا أشبر إلى ملاحظتين:
1) الجدول الأبن يملأ لوحده لا غلاقة له بتاتا بعملية الملأ في الجدول الأب بمعتى كود Session أو كود Specialisation لا يملأ أي منهما تلقائيـــــــــــــــــــــــــا في الجدول "Etudier" أثناء عملية الملأ أو الأضافة على أي من الجدولين Session أو  Specialisation
 2) قبل ملأ الجدول الأبن لابد له من محتوى إضافي غير مفتاحه الخاص و المفتاح الخارجى للحدول الأب)  
السؤال الثاني: الجدول التخصص مملوء مسبقا لم أستطع ايجاد حل لملأ رمز التخصص في جدول الابن أقصد بحل هنا الكود المناسب للادخال ؟؟؟
الجواب:
أولا:  أي جدول إبن لا يملأ ما دام أحد الجداول المتعلقة به كأب غير مملوءة مسبقا ..و أعني هنا بجدول الدورة.
ثانيا: لابد من أن تفهم جيدا كيف تتم عملية الملأ أو الأضافة على مستوى الحداول و خصوصا الجدول الأبن وكمثال لدينا هنا الجدول أسميته أنت ب"Etudier" و سميته أنا ب"TSect_Ouverte" بمعنى لا إصافة تكون عليه مادام أحد الجدولين (Session و Specialisation) فارغا و ذلك لأن إضافة أي سجل جديد على هذا الجدول "Etudier" تشترط ذلك و إن حصل و كان الأثتان مملوئين من قبل فهنا بيت القصيد و لابد لك من فهمه فعند الأضافة فنحن لا نملئ أكواد الجدولين (Session و Specialisation) كتابيا في الجدول "Etudier" بل نملؤهما بالأختيار بمعنى باللوكاب و المكون المستعمل في هذه العملية هو DbLookupCombobox و لهذا السبب كان سؤالك(-الجدول التخصص مملوء مسبقا لم أستطع ايجاد حل لملأ رمز التخصص في جدول الابن). فقط قم باللوكاب لهذين المفتاحين بواسطة DbLookupCombobox و لكن لا تنسى أن تقوم بالتعديل على الجدول "Etudier" يإضافة المحتوى إذ لا يعقل أن نملأ في الجدول فقط كود (Session و Specialisation)  دون أن يكون هناك حقل خاص بالجدول أو دعني أسميه بناتج العلاقة many-to-many يبن الجدولين (Session و Specialisation) ..؟؟؟ إذا فكر جيدا في هذا الموضوع لكي يسهل عليك فهم الباقي ...
السؤال الثالث:  جوابه يبقى على حسب فهمك للأجوبة أعلاه .... و شكرا.
ربي يبارك فيك الاخ الكريم

اسئلة متعلقة

+5 تصويتات
2 إجابة
سُئل أغسطس 19 في تصنيف SQL Server بواسطة Yamada Fakir (1,330 نقاط) | 80 مشاهدات
+4 تصويتات
2 إجابة
+6 تصويتات
3 إجابة
سُئل يونيو 27 في تصنيف Delphi بواسطة مجهول | 186 مشاهدات
+4 تصويتات
1 إجابة
سُئل أغسطس 29 في تصنيف vcl بواسطة Yamada Fakir (1,330 نقاط) | 36 مشاهدات
+4 تصويتات
1 إجابة
ادعُ اصدقائك في الفايسبوك لمشاركتك

مرحبًا بك إلى EasyDelphi Q&A، حيث يمكنك طرح الأسئلة والحصول على الإجابة عليها من المستخدمين الآخرين.

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

267 سؤال
476 إجابة
833 تعليق
163 مستخدم