السلام عليكم ورحمة الله وبركاته
عندي جدولين اي قاعدتي بيانات اذا اردت ان احذف تسجيلة من الجدول الاول ارغب في ان تحذف التسجيلة من الجدول الثاني التي تحتوي على نفس محتوى الخانة (رقم الوصل) اي N_bon .
قمت بجعل N_bon في القاعدة الاولى ك index للجدول
واضفت للجدول الثاني N_bon وجعلته ك index ايضا
ثم ربطت الجدولين برابط intégrité référentielle بمعنى انه اذا حذقت تسجيلة من الجدول الاول تحذف تسجيلة من الجدول الثاني التي تحتوي على نفس N_bon (اي رقم الوصل) لكن تظهر هذه الرسالة عند اضافة تسجيلة الى الجدول الاول 'enregistrement maitre absent'
اين المشكل ؟او ماهو الحل؟ بارك الله فيكم
وعليكم السلام ورحمة الله وبركاته
يرجـى عند تقديم الأسئلة تحديد محرك قواعد البيانات المستعمل (أظن Paradox هنا) وكذلك نسخة Delphi.
بعد تطبيق فرض التكامل المرجعي (intégrité référentielle) هناك خيارين:
أحدهما يقضي بتحديث أحد السجلات تبعا للسجل المقابل
والآخر بحذف أحد السجلات بمجرد حذف السجل المقابل.
أيهما فعّلت بالتحديد؟ وما رسالة الخطأ تحديدا؟
الذي يبدو أن المشكل في كون الجدول الأول يحتاج (بالضرورة) إلى سجل مقابل في الجدول الثاني وهذا ينبغي حذفه، فكل عنصر من الجدول الأول يقابله 0/n من الجدول الثاني، بدلا من أن يقابله 1/n، وهذا يتوقف على نوع الربط الذي تريده. إذا أردت تفصيل أكثر أرفق ولو جزءا من المشروع.
بالتوفيق.
نعم اخي الكريم استعمل محرك ال paradox ودلفي 7
انا لا اعرف كثيرا حول فرض التكامل المرجعي (intégrité référentielle) لكن الذي فعلته هو الربط بين الجدولين بهذا الرابط حيث اختار Index الجدول الاول وبالمقابل index الجدول الثاني الذي هو نفسه N_bon ثم اعطي اسم للعلاقة .
الذي حدث هو لما رجعت الى الدلفي غلقت ثم فتحت جداول قواعد البيانات لكن التسجيلات الموجودة سابقا لم تظهر في dbgrid .وعند الاضافة او التغيير في الجدول الاول فان هذه الرسالة تظهر'enregistrement maitre absent'
وانا هدفي ان يتحقق الخياران اللذان ذكرتهما .انه اذا حدث تحديث في التسجيلة ذات الرقم n_bon في الجدول الاول فانه يحدث التحديث في الجدول الثاني ذو الرقم n_bon نفسه ونفس الشي للحذف.
فكيف افعل الخيارين واتخلص من مشكل الرسالة؟
اذا رغبت سارفق المشروع في المرة القادمة وشكرا لك اخي الكريم.
مر معي نفس الاشكال (لكني لا أذكر) و لا أضن المشكلة صعبة ، كما أنني لست متأكد من الإجابة التي بحوزتي
ممكن فقط ، ارفاق قاعدة البيانات (الجدولين فقط) ؟ و لنا عودة ****ــة ان شاء الله.
تفضلوا المشروع بالمرفقات
الجدول الاول موجود ب form1 وهو table1
,الجدول الثاني ب form8 وهو table2
اذا فهمتم عمل المشروع وعندكم اي اراء حوله لتحسينه اتمنى ان تطرحوها
شكراوانا بانتظار ردودكم
19-12-2009, 11:52 PM (آخر تعديل لهذه المشاركة: 23-12-2009, 10:34 AM بواسطة kachwahed.)
أخي kwahab...
أولا إجعل برنامج ذو محمولية أوسع (إن صح التعبير) أو أكثر ديناميكية.
لا تستعمل Alias إلا بشكل ديناميكي... أو أسهل من ذلك حدد جميع مكونات TTable واكتب في DatabaseName
كود :
.\BD
أو استعمل حلقة في OnCreate مثلا إذا كانت المكونات كثيرة.
لم يحدث معي الخلل الذي ذكرته، لأن الجدول المتعلق بـ DBGrid1 للنموذج Form8 أصلا لم يفتح!
وعندما فتحته في الحدث OnShow لم يحدث أي خلل وتم إدخال البيانات بشكل عاد.
للتوسع أكثر في قواعد البيانات راجع موضوع الأخ nabilkeb جزاه الله خيرا.
20-12-2009, 12:10 PM (آخر تعديل لهذه المشاركة: 22-12-2009, 05:40 PM بواسطة kachwahed.)
شكرا لك اخي kachwahed...
لقد غيرت ال alias ولكن المشكل لم يحل وما زالت الرسالة enregistrement maitre absent تظهر عند اضافة شخص جديد الى الجدول الاول.
اذا لم ينجح ربط الجدولين ناخذ محتوى N_bon من الجدول الاول ونقارنه مع جميع محتويات N_bon في الجدول التاني واذا وجدت مثيله نقوم بالعملية المرغوب فيها من تغيير او حذف فما هو الكود الذي يقوم بمسح الجدول الثاني لايجاذ نفس قيمة N_bon .
بارك الله فيكم
هل ربط الجدولين ضروري ليتحقق الهدف؟
ما ذا تريد ان تقول هذه الرسالة(table maitre avec enregistrements détail.impossible de modifier/supprimer)؟
إقتباس :ما ذا تريد ان تقول هذه الرسالة(table maitre avec enregistrements détail.impossible de modifier/supprimer)؟
أي: لا يمكن حذف أحد السجلات إذا كان له مقابل (فرض تكامل مرجعي) في جدول آخر...
أخي kwahab...
أعد كتابة البرنامج بلغة لاتينية (إنجليزية أو فرنسية) ثم أرفق الملفات: pas *. dpr*.dfm*. وقاعدة البيانات فقط في ملف مضغوط وسأحاول إن شاء الله.
بالتوفيق.
الأخ السائل على حق، المشكلة التي يعاني منها فعلية ، و لست أذكر سببها ، المهم المشكل بقاعدة البيانات بحد ذاتها ، السبب (الله أعلم) ؟ أما الحل: على الأقل مبدئيــا أعد إنشاء قاعدة البيانات مع الدقة في ادخال أسماء الحقول و خصائصها ، ثم قم باستبدالها بالملفات السابقة . أنا شخصيا سجلت نفس الاشكال المطروح بالملف المرق من طرفك ، وتم حل الاشكال كما ذكرت.
- على عجالة راجع المرفق . قمت بانشاء جديد لقاعدة البيانات المسماة recettes حذفت l'alias . الآن قم بادخال و حفظ البيانات الخاصة بارادات البلدبة و راقب النتيجة ---- عدم ضهور رسالة الاشكال المطروح .
- كملاحظة :
- لا تنسى تنبيه الأخ حول Alias هناك مايكفيك لتعرفه حول هذا الأمر بالمنتدى أبحث و طالع ماكتب .
- هناك الكثير من الأخطاء التي يرجع سببها لعد التقييد اللازم للشروط برمجيـا ، يعني كنصيحة دومـــا
اجعل من نفسك مستخدما للبرنامج و ليس لك أي علاقة بالبرمجة ، ستجد أخطاء و نقائص منهــا :
أولا و قبل كل شيء مظهر البرنامج لابد أن يكون جميل يريح المستخدم+سهولة الاستغلال (تنظيم العناصر و الأزرار و تباعدها و تجميعها إذا أمكن حسب الحاجة) - إذا أراد المستخدم مثلا مسح كل البيانات ، أين هذه الخاصية؟ - إذا استعمل زر الإضافة و أراد إلغاء الأمر ، أين زر الإلغاء ؟ - إذا فتحت المشروع و قمت بالضغط (الفأرة) على DBGRID ماذا سيفهم المستخدم من رسالة الخطأ التي ستظهر ؟ - إذا أردت التعديل : ستضغط على زر التعديل+ادخال البيانات اللازمة للتعديل+ضغط زر " أضف " ، ليس هناك حلول أو بدائل.أولا ستظهر رسالة تأكيد على أساس إضافة جديدة بينما المستخدم يريد فقط التعديل.ثانية النتيجة هل هي إضافة أو تعديل فعلي ؟ ...... و أمور أخرى .
أنا حقا أشجعك ،و هذه ملاحظات بسيطة ، لأضعك على الطريق ، و نحن بالخدمة سيدي ، و إن لم نكن لها فهي لنا ، أقصد إن لم أستطع مد يد العون لك ، فالمنتدى مليء بالأساتذة و الخبراء الكرام الذين يساعدونني و إياك .