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

مساعدة عااااااجلة في ال trigger

بدأه lord.s في 7 ديسمبر 2012 · 9 رد · 949 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

با انتظار ردودكم وشكرا

#2

الحل أن تقوم بعمل ترايجر عند الإدخال Insert في الجدول الأول وهو يقوم باستدعاء بروسيجر أو فنكشن

يبقى تمرير القيمة الجديدة

ولكن ما هي القيمة الجديدة

هل هي معتمدة على القيمة المدخلة في الجدول الأول ؟

أي هي ناتج عملية حسابية أم أنها مسبقة التعريف أم ماذا ؟

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#3
أبو أحمد المبرمج كتب:

الحل أن تقوم بعمل ترايجر عند الإدخال Insert في الجدول الأول وهو يقوم باستدعاء بروسيجر أو فنكشن

يبقى تمرير القيمة الجديدة

ولكن ما هي القيمة الجديدة

هل هي معتمدة على القيمة المدخلة في الجدول الأول ؟

أي هي ناتج عملية حسابية أم أنها مسبقة التعريف أم ماذا ؟

اولا شكرا لك

اجل قمة بعمل اجرائية ولكن لم اعرف كيف ساقوم بادخال القيم ؟

السوال هو :

لدية قاعدة بيانات قاموس تحوي جدولين

• جدول terms يخزن فيه معلومات المفردة الأساسية.

• جدول term_prop يخزن فيه المعلومات الإضافية للمفردات وترجماتها.

المطلوب

3. إنشاء قادح (trigger) على الجدول terms يضيف سطر مقابل في الجدول term_prop عند إضافة سطر في الجدول terms

يعني كل ما بدخل كلمة جديدة لازم دخل بالجدول term_prop كفاية المعلومات عنها

#4

اذا ممكن تعطيني مثال عن الاجرائية :)

#5

شو شباب مافي حدا ممكن يساعدنا :mellow:

#6

أخي لم تتضح الآلية

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

وخانة للتفاصيل

إذا كان كذلك فلا يحتاج ترايجر

وإنما قم بإدراج قيمة الخانة الأولى في الجدول ونفس الأمر بالنسبة للخانة الثانية قم بإدخالها للجدول الثاني

يبقى مسألة الربط

الأول يجب أن يكون فيه عمود ID بترقيم تلقائي ويكون حقل مفتاحي

والآخر تضيف له حقل اسمه BaseID لتضع فيه قيمة الID المتولدة بعد إدراج الخانة الاولى في الجدول الأول

ليكون مرتبط معه

وهناك خيار آخر

حيث يمكنك عمل علاقة "Relationship "One to One بينهما وتكون على On Insert Delete Update وبهذا أي تشكيل لسطر جديد أو حذفه أو تعديله سينعكس على مقابله في الجدول الثاني

1

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#7
أبو أحمد المبرمج كتب:

أخي لم تتضح الآلية

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

وخانة للتفاصيل

إذا كان كذلك فلا يحتاج ترايجر

وإنما قم بإدراج قيمة الخانة الأولى في الجدول ونفس الأمر بالنسبة للخانة الثانية قم بإدخالها للجدول الثاني

يبقى مسألة الربط

الأول يجب أن يكون فيه عمود ID بترقيم تلقائي ويكون حقل مفتاحي

والآخر تضيف له حقل اسمه BaseID لتضع فيه قيمة الID المتولدة بعد إدراج الخانة الاولى في الجدول الأول

ليكون مرتبط معه

وهناك خيار آخر

حيث يمكنك عمل علاقة "Relationship "One to One بينهما وتكون على On Insert Delete Update وبهذا أي تشكيل لسطر جديد أو حذفه أو تعديله سينعكس على مقابله في الجدول الثاني

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

اريد انشاء trigger يقوم باضافة سجل جديد في الجدول term_prop عند ادخال سجل في الجدول terms

الجدول terms هو للمفردات اما الجدول term_prop فهو معلومات اضافية عن المفردة يعني كل مرة يتم استدعاء ال trigger سيقوم بادخال قيم مختلفة في جدول term_prop اقوم انا باعطائها حسب المفردة المدخلة

كيف ساقوم باعطاء قيم لل trigger اثناء تفعيله؟

#8

يرجى من من لديه الحل مساعدتي وساكون له من الشاكرين :sad:

#9

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

أخى المبارك

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

وبناء عليه

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

مثال

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

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

أما في حالتك فأنت تحتاج إلى أمرين إدخال أحدهما في حدول المفردات والآخر في جدول الخصائص لأنك مجبر على إدخال الخصائص، هذا هو الأسلوب الصحيح

ولكن

إذا كنت مصمماً على استخدام التريجر لأداء نفس المهمة يمكنك التحايل على هذا

كيف؟

1- أولا سيكون نوع التريجر instead of وليس After

2- ستقوم بأمر insert بكل البيانات التى سوف تحتاجها فى كلا الجدولين (أرجو أن تكون هذه النقطة مفهومة) - بمعنى أنك ستتخيل أن أعمدة الجدول الأول زادت لتشمل الجدولين الذين عندك وتقوم بأمر insert على هذا الجدول (لاحظ أن جملة insert ستكون غير مطابقة لهيكل الجدول وهذا لن يهم لأن التريجر لن يسمح اصلا بتنفيذها)

3- الخطوة الثالثة سوف تقوم بداخل التريجر بعمل أمرين insert الأول على جدول المفردات والأمر الثانى على جدول الخصائص ...والسؤال هنا من أين يستطيع التريجر الحصول على البيانات؟

الإجابة:

من جملة insert الأولى التى كنت تحاول تنفيذها ستجد كل البيانات مخزنة فى جدول مؤقت اسمه Inserted يمكنك التعامل مع هذا الجدول بالاستعلام

مثال

insert into terms (term_name) select term_name from inserted

insert into properties (prop_name) select prop_name from inserted

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

أدعو الله بالاستفادة

4

أدعو الله أن يجعل أعمالنا خالصة لوجهه الكريم --- وأن ينفعنا بما علمنا

Dr Sayed Tohamy

Programming Instructor

مدرب برمجة

---------------

EmaSoft2000

-------------------

#10
ema2000_t كتب:

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

أخى المبارك

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

وبناء عليه

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

مثال

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

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

أما في حالتك فأنت تحتاج إلى أمرين إدخال أحدهما في حدول المفردات والآخر في جدول الخصائص لأنك مجبر على إدخال الخصائص، هذا هو الأسلوب الصحيح

ولكن

إذا كنت مصمماً على استخدام التريجر لأداء نفس المهمة يمكنك التحايل على هذا

كيف؟

1- أولا سيكون نوع التريجر instead of وليس After

2- ستقوم بأمر insert بكل البيانات التى سوف تحتاجها فى كلا الجدولين (أرجو أن تكون هذه النقطة مفهومة) - بمعنى أنك ستتخيل أن أعمدة الجدول الأول زادت لتشمل الجدولين الذين عندك وتقوم بأمر insert على هذا الجدول (لاحظ أن جملة insert ستكون غير مطابقة لهيكل الجدول وهذا لن يهم لأن التريجر لن يسمح اصلا بتنفيذها)

3- الخطوة الثالثة سوف تقوم بداخل التريجر بعمل أمرين insert الأول على جدول المفردات والأمر الثانى على جدول الخصائص ...والسؤال هنا من أين يستطيع التريجر الحصول على البيانات؟

الإجابة:

من جملة insert الأولى التى كنت تحاول تنفيذها ستجد كل البيانات مخزنة فى جدول مؤقت اسمه Inserted يمكنك التعامل مع هذا الجدول بالاستعلام

مثال

insert into terms (term_name) select term_name from inserted

insert into properties (prop_name) select prop_name from inserted

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

أدعو الله بالاستفادة

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

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

:)

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