PDA

View Full Version : سوال: تریگر-trigger



Modernidea
جمعه 25 اردیبهشت 1388, 19:52 عصر
:خجالت:خیلی خیلی شرمنده که تکراری است:خجالت:
من گشتم خیلی چیز هم پیدا کردم ولی هی چی نفهمیدم .
درخواست من:
برای مثال من چندتا جدول دارم که یکیش به نام tblusers و دیگری tblGroups .
در این دو جدول هم فیلدهایی است که بین آنها Relationship است.
مثلا در tblGroups فیلدی به نام Name است به صورت کلید اصلی تعریف شده و در tblUser فیلدی به نام Gname است که به صورت کلید خارجی به فیلد Name در جدول tblGroups ارتباط دارد.
زمانی که کاربر میخواد در برنامه از جودل گروه ها یعنی tblGroups رکوردی را حذف یا ویرایش کند، به علت اینکه این رکورد در جدول کاربران یعنی tblusers درج شده و به جدول گروه ها متصل است، پیغام خطا میده و حذف نمیشه.
تا اونجایی که من فهمیدم باید از تریگر ها استفاده کرد اما من هرچی گشتم به علت اینکه به دستورات sql وارد نیستم هیچ چیزی از اون ها نفمیدم.

لطفا تریگری که گفتم را بنویسید و توضیحی در مورد آن بدهید. درضمن از sql server 2000 استفاده میکنم.
باتشکر
--یاهوو--

mermaid
شنبه 26 اردیبهشت 1388, 10:04 صبح
اشکال کار شما در تعریف Relation های بین جداولتون هست و با تریگر هم کماکان مشکل خواهید داشت...

برای رفع مشکل Relation باید مشخص کنی وقتی یک کلید خارجی از جدولی حذف می شود چه چیزی باید به جای آن درج شود (Null و یا یک مقدار Default) متاسفانه من الان به SQL Server 2000 دسترسی ندارم که بتونم مراحل انجام این کار رو براتون بگم... شرمنده

arshia_m
جمعه 01 خرداد 1388, 15:34 عصر
با سلام
بدون تريگر هم ميشه اين مشكلو حل كرد
عبارت on delete caaced يا on update cascade رو در تعريف جدول tblUser (حاوي كليد خارجي)درج و دوباره اجرا كنيد تا جدول tblUser با اين كد ايجاد شود
كافيست كد Sql جدول tblUser را پيدا و يكي از اين دو عبارت را بنا به نياز بعد از تعريف F.K بدين صورت وارد كنيد



create table tblUser
(
.
.
.
primary key...
foreign key(Gname) references tblGroups
on delete cascade
on update cascade
.
.
.
)

در اين صورت تغييراتي چون update يا delete در كليد اصلي در جدول tblGroups، بصورت اتومات در كليد خارجي نيز اعمال ميشود.

Modernidea
جمعه 01 خرداد 1388, 23:10 عصر
با سلام
بدون تريگر هم ميشه اين مشكلو حل كرد
عبارت on delete caaced يا on update cascade رو در تعريف جدول tblUser (حاوي كليد .....

سلام
ممنونم arshia_m اما راحتر از این هم میشه یعنی به صورت دستی. کمکی که mermaid عزیز کرد یه جرقه مشتی توذهنم زد و از مسیر زیر این مشکل رو حل کردم . (مینویسم که اگه کسی مشکل من رو داشت...)
جدول مربوطه که دارای کلید اصلی است را در حالت طراحی (Design Table) باز کرده و بر روی آن کلیلک راست و بعد به RelationShip رفته و ارتباطی که بین کلید اصلی این جدول با کلید خارجی جدول دیگر است را انتخاب کرده و در قسمت پاینی این پنحره گزینه های

Cascade Update Related Fields
و
Cascade Delete Related Records
را تیک زده و از جودل خارج شده و مراحل را ذخیره (Save) میکنیم.
با این کار اگر کلید اصلی Update یا Delete شود بر روی تمامی کلید های خارجی هم تغییرات انجام میشود.
با تشکر از همه
--یاهو--