PDA

View Full Version : سوال: مشکل در ذخیره ForeignKey ها



shokrmhd
یک شنبه 30 آبان 1389, 16:25 عصر
سلام دوستان
من 2تاجدول دارم که در یکی از آنها اطلاعات یک نامه ذخیره می شود و در جدول دیگر کلیدواژه ها .
مشکل اینجاست که به هنگام ذخیره شماره نامه در جدول کلیدواژه ها با این پیغام مواجه می شوم

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_SM_Automation_KeyWord_SM_Automation_ImportLette r". The conflict occurred in database "MyDNN", table "dbo.SM_Automation_ImportLetter", column 'IMLetterID'. The statement has been terminated.
کسی میتونه کمکم کنه؟

shokrmhd
یک شنبه 30 آبان 1389, 16:39 عصر
سلام دوستان
من 2تاجدول دارم که در یکی از آنها اطلاعات یک نامه ذخیره می شود و در جدول دیگر کلیدواژه ها .
مشکل اینجاست که به هنگام ذخیره شماره نامه در جدول کلیدواژه ها با این پیغام مواجه می شوم

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_SM_Automation_KeyWord_SM_Automation_ImportLette r". The conflict occurred in database "MyDNN", table "dbo.SM_Automation_ImportLetter", column 'IMLetterID'. The statement has been terminated.
کسی میتونه کمکم کنه؟

ممنون از این همه پاسخگوییتون

mahdi87_gh
یک شنبه 30 آبان 1389, 18:03 عصر
دوست عزیز این خطا به این دلیل رخ میده که شما سعی میکنی توی جدولی که دارای کلید خارجی است، مقداری رو در فیلد کلید خارجی قرار بدی که در جدول اصلی این مقدار موجود نیست. مثلا در جدول اصلی فقط کد های 1و 2 رو داریم و شما داری در جدول حاوی کلید خارجی کد 53 رو قرار میدی( که کد 53 در جدول اصلی وجو نداره!!)

shokrmhd
یک شنبه 30 آبان 1389, 18:13 عصر
دوست عزیز این خطا به این دلیل رخ میده که شما سعی میکنی توی جدولی که دارای کلید خارجی است، مقداری رو در فیلد کلید خارجی قرار بدی که در جدول اصلی این مقدار موجود نیست. مثلا در جدول اصلی فقط کد های 1و 2 رو داریم و شما داری در جدول حاوی کلید خارجی کد 53 رو قرار میدی( که کد 53 در جدول اصلی وجو نداره!!)

ممنون
خوب من میخوام شماره نامه که از نوع عدد هست داخل فیلد LetterGuid که Foreign Key هست بیافته که معلوم بشه هر نامه چندتا کلیدواژه داره؟
راهی سراغ دارین که این کارو انجام بده؟

mahdi87_gh
یک شنبه 30 آبان 1389, 18:24 عصر
فکر میکنم در طراجی جداولتون اشکالی وجود داره. شما ابتدا بیاید شرح بدید که هدفتون چیه؟ (البته یکم توضیح دادین ولی کافی نیست). بعد بگین که چه جدولهایی رو براش ایجاد کردین ( با ذکر فیلدها). تا راه حلی اصولی برای کار پیدا کنیم

shokrmhd
یک شنبه 30 آبان 1389, 18:27 عصر
ممنون
خوب من میخوام شماره نامه که از نوع عدد هست داخل فیلد LetterGuid که Foreign Key هست بیافته که معلوم بشه هر نامه چندتا کلیدواژه داره؟
راهی سراغ دارین که این کارو انجام بده؟

مهدی جان تقزیبا با راهنمایی که کردی متوجه شدم مشکلم سر چی هست.
بخاطر اینکه من با زدن یک Button میخوام تمام اطلاعات در تمام جداول با هم ذخیره شود
خوب تا زمانی هم که جدول اول پر نشده و ذخیره نشده شماره نامه نمی خوره که بخواد در جداول دیگه هم این شماره بیافته. ولی من راهی ندارم و نمیشه که جدا جدا جداول را ذخیره کنم
چه راهی به نظرت میرسه که به هنگام ورود اطلاعات نامه اول شماره نامه بخوره بعد این شماره در جداول دیگه هم استفاده بشه؟

mahdi87_gh
یک شنبه 30 آبان 1389, 18:33 عصر
از Transaction استفاده کن
جستجو کن. بهتره اول توی گوگل جستجو کنی. بعد تو سایت. اگه بازم نتونستی به جواب دلخواهت برسی دوباره بپرس
موفق باشید

shokrmhd
یک شنبه 30 آبان 1389, 18:51 عصر
از Transaction استفاده کن
جستجو کن. بهتره اول توی گوگل جستجو کنی. بعد تو سایت. اگه بازم نتونستی به جواب دلخواهت برسی دوباره بپرس
موفق باشید

راستش من Search کردم اما موضوع مفیدی بدست نیاوردم و یکم هم عجله دارم. شما میشه یکم توضیح بدین.
راستی نظرت چیه اول یک رکورد توی دیتابیس ذخیره کنم و بعد که شماره رو گرفتم رکورد رو آپدیت کنم؟

mahdi87_gh
یک شنبه 30 آبان 1389, 19:29 عصر
دوست عزیز
شما ابتدا یک ترانزاکشن ایجاد میکنید و با یک کامند یک رکورد در جدول اصلی ایجاد میکنی و مقدار درج شده در کلید اصلی رو بدست میاری ( اگه کلید اصلی Identity تعریف شده باشه، با دستور @@IDENTITY میتونی مقداری که در رکورد حاری درج شده رو بدست بیاری) بعد با کلید بدست اومده توی جدول دوم رکورد درج کنی. اگه همه چیز بخوبی پیش رفت، transaction رو commit میکنی و اگه نه Rollback میکنی تا همه تغییرات اخیر undo بشه
به لینک زیر نگاه کن
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqltransaction.aspx
موفق باشی