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

مشكلة مع التعامل مع ترايجر التعديل

بدأه dream83it في 22 نوفمبر 2011 · 9 رد · 578 مشاهدة · في قسم قواعد البيانات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

ياجماعه عندي سؤال

قمت بعمل ترايجر للتعديل بحيت لو تعدل صف بالجدول الاول الذي عليه الترايجر يحدث التعديل بالجدول الثاني

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

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

وشكرا

#2

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

هل الحقول التي تعدلها في الجدول الأول مرتبطة بجداول أخرى (primary key, foreign key)؟

إذا أمكن، من الأفضل وضع كود الـ Trigger

لاتـُهيئ كفني ما متّ بعد = لم يزل في أضلعي برقٌ و رعدُ


أنــا اسـلامــي ..أنا عزّته = أنا خيل الله نحو النصــر تعــدو


أنــا تــاريـخـي …ألا تعــرفـه = خـالد ينبض في روحــي و سعدُ


لاتـــغرنـك منــي هدأتـــــي = لا يمــوت الثــأر و لــكن يســتعـدُ


لا يغرنـــك نصــلٌ موغـــلٌ = في عروقي …فـأنا منه أحـّـــدُ


إن ما ضُيع في ساح الوغى = في سوى ساحــاتـها لا يــستردُ


#3

[شكرا للاهتمام

اولا نعم الجدول الاساسي فيه حقول foreign key لكن انا لا اجعله يعدل فيها انا اجعله يعدل بحقل غير مرتبط بالاخرين

مثلا انا معي جدول فيه يخزن عدد ايام الدراسة في كل شهر ( جدول days_no ) من الدراسة وهناك جدول اخر

dyen

اعبي فيه عدد ايام الدراسة المجموع لكل الشهور لفصل معين يعني عمود العام والشهور والفصل يعتبرو foreign

ولكنني لا اعدلهم انا افترض انه عدل عدد الايام

create trigger [dbo].[ins_da] on [dbo].[days_no]

After update

As

declare @a smallint

declare @b tinyint

declare @c tinyint

declare @d int

declare @sum int

declare @x int

declare @tot int

declare @w int

begin

Select @a= year_id,

@b=mnth_id,

@c=sem_id ,

@d=daysno from INSERTED

begin

Select @sum=sum(daysno)

FROM dbo.days_no

where dbo.days_no.sem_id=@c

and dbo.days_no.year_id=@a

begin

delete from dayn where sem_id=@c and year_id=@a

insert into dbo.dayn(year_id,sem_id,noday) values (@a,@c,@sum);

end

end

end

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

وشكرا

#4
dream83it كتب:

اولا نعم الجدول الاساسي فيه حقول foreign key لكن انا لا اجعله يعدل فيها انا اجعله يعدل بحقل غير مرتبط بالاخرين

مثلا انا معي جدول فيه يخزن عدد ايام الدراسة في كل شهر ( جدول days_no ) من الدراسة وهناك جدول اخر

dyen

اعبي فيه عدد ايام الدراسة المجموع لكل الشهور لفصل معين يعني عمود العام والشهور والفصل يعتبرو foreign

ولكنني لا اعدلهم انا افترض انه عدل عدد الايام

dream83it كتب:

begin

delete from dayn where sem_id=@c and year_id=@a

insert into dbo.dayn(year_id,sem_id,noday) values (@a,@c,@sum);

end

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

يمكنك استخدام أمر Update كالتالي:

update dayn
set noday=@sum
where year_id=@a and sem_id=@b

ملاحظة:

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

السلام عليكم

لاتـُهيئ كفني ما متّ بعد = لم يزل في أضلعي برقٌ و رعدُ


أنــا اسـلامــي ..أنا عزّته = أنا خيل الله نحو النصــر تعــدو


أنــا تــاريـخـي …ألا تعــرفـه = خـالد ينبض في روحــي و سعدُ


لاتـــغرنـك منــي هدأتـــــي = لا يمــوت الثــأر و لــكن يســتعـدُ


لا يغرنـــك نصــلٌ موغـــلٌ = في عروقي …فـأنا منه أحـّـــدُ


إن ما ضُيع في ساح الوغى = في سوى ساحــاتـها لا يــستردُ


#5

السلام عليكم

شكرا للاهتمام

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

يعني انا الان بصدد لماذا لايجعلني الاسكيوال اعدل داخل الجدول الاساسي

لكي يتنفد كود الترايجر للتعديل

شكرا

#6

أظن أن المشكلة لا علاقة لها بالـ trigger و لا بالجدول الثاني. للتأكد يرجى تعطيل الـ trigger و محاولة القيام بالتعديل

ما هي صيغة الرسالة بالضبط؟

لاتـُهيئ كفني ما متّ بعد = لم يزل في أضلعي برقٌ و رعدُ


أنــا اسـلامــي ..أنا عزّته = أنا خيل الله نحو النصــر تعــدو


أنــا تــاريـخـي …ألا تعــرفـه = خـالد ينبض في روحــي و سعدُ


لاتـــغرنـك منــي هدأتـــــي = لا يمــوت الثــأر و لــكن يســتعـدُ


لا يغرنـــك نصــلٌ موغـــلٌ = في عروقي …فـأنا منه أحـّـــدُ


إن ما ضُيع في ساح الوغى = في سوى ساحــاتـها لا يــستردُ


#7

السلام عليكم

اشكرك على الاهتمام

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

ولكن ترايجر التعديل عندما احذفه استطيع التعديل ولكن بمجرد انا اعمله واحاول التعديل بالجدول الاساسي تطلع هذه الرسالة

no rows was updated

error source : Microsoft.sqlserver.management.data tools.

error message :the row valu(s) updated or deleted eigther do not make the row unique or they alter multiple rows ( 2) rows

make ESC to cancel the change

وشكرا

تم تعديل هذه المشاركة بواسطة dream83it في 22 نوفمبر 2011 في 17:43

#8

الأمر الآن أسهل قليلا..

الرسالة تقول أن سبب المشكلة هي أحد أمرين:

1- أنك تقوم بتعديل سطرين معا ( إن كنت تقوم بالتعديل من خلال الكود و ليس يدويا فعليك مراجعة الكود)

2- أن التعديل الذي تقوم به يسبب خرق في قيد: unique

معنى ذلك أنه لدينا إحدى حالتين:

- أنت تحاول التعديل في المفتاح الأساسي (primary key)

- لديك قيد (unique constraint) إضافي مطبق على الجدول و التعديل الذي تحاول القايم به يخرق هذا القيد

تأكد من القيود المطبقة على الجدول و ستجد سبب المشكلة إن شاء الله

لاتـُهيئ كفني ما متّ بعد = لم يزل في أضلعي برقٌ و رعدُ


أنــا اسـلامــي ..أنا عزّته = أنا خيل الله نحو النصــر تعــدو


أنــا تــاريـخـي …ألا تعــرفـه = خـالد ينبض في روحــي و سعدُ


لاتـــغرنـك منــي هدأتـــــي = لا يمــوت الثــأر و لــكن يســتعـدُ


لا يغرنـــك نصــلٌ موغـــلٌ = في عروقي …فـأنا منه أحـّـــدُ


إن ما ضُيع في ساح الوغى = في سوى ساحــاتـها لا يــستردُ


#9

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

اولا اشكرك للاهتمام وجزاك الله كل خير

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

ولاتوجد معي اعمدة primary

وعندما عملتها كما قلت لي (في البداية فهمت من كلامك انه يكفي وجود عمود foreign وليس primary ايضا )

اتنفد الكود والحمدلله واتعدلت السطور

وشكرا

#10

تمام.. الحمد لله

لاتـُهيئ كفني ما متّ بعد = لم يزل في أضلعي برقٌ و رعدُ


أنــا اسـلامــي ..أنا عزّته = أنا خيل الله نحو النصــر تعــدو


أنــا تــاريـخـي …ألا تعــرفـه = خـالد ينبض في روحــي و سعدُ


لاتـــغرنـك منــي هدأتـــــي = لا يمــوت الثــأر و لــكن يســتعـدُ


لا يغرنـــك نصــلٌ موغـــلٌ = في عروقي …فـأنا منه أحـّـــدُ


إن ما ضُيع في ساح الوغى = في سوى ساحــاتـها لا يــستردُ


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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…