PDA

View Full Version : حذف از جدول



Masoome_das
یک شنبه 04 مهر 1389, 10:18 صبح
دوستان من یک راهنمایی کنید
من چطوری می تونم اطلاعات یک جدول را حذف کنم که کلید اصلی آن کلید خارجی در جداول دیگه است در حالی این کلید در جداول دیگه حذف نشود
اگه ارتباطاتش را با جداول دیگه پاک کنم خطای منطقی اتفاق نمی افته

حمیدرضاصادقیان
یک شنبه 04 مهر 1389, 13:00 عصر
سلام.خطایی رخ نخواهد داد.
اگر شما relation اونارو حذف کنید میتونید اطلاعات جدول اصلی رو پاک کنید.ولی چرا؟؟؟
مثلا شما دوجدول دارید یکی برای هدر سند و دیگری برای جزئیات سند. شما الان میخواهید هدر سند رو پاک کنید ولی جزئیات سند بمونه.خوب این به چه دردی میخوره؟؟

Masoome_das
دوشنبه 05 مهر 1389, 15:39 عصر
ولی چرا؟؟؟
مثلا شما دوجدول دارید یکی برای هدر سند و دیگری برای جزئیات سند. شما الان میخواهید هدر سند رو پاک کنید ولی جزئیات سند بمونه.خوب این به چه دردی میخوره؟؟

من می خوام کالاهایی که به فروش می رسه از لیست انبار خارج کنم ولی اطلاعات مربوط به اون کالا در مربوط به اسناد فروش باقی بمانه

tooraj_azizi_1035
دوشنبه 05 مهر 1389, 15:52 عصر
سلام اگه فرض کنیم که جدول اطلاعات کالا حاوی کلید اصلی (Table1) و جدول فروش حاوی کلید خارجی باشه (Table2) این کد :
DELETE Table2.*, Table1.name
FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.id
WHERE (((Table1.name)="a1"));
کد بالا فقط رکوردهای خاصی از جدول حاوی کلید خارجی رو حذف می کنه که در مورد شما کالا در Table1 و کالای فروش رفته در جدول Table2 قرار می گیره.

حمیدرضاصادقیان
دوشنبه 05 مهر 1389, 16:38 عصر
سلام اگه فرض کنیم که جدول اطلاعات کالا حاوی کلید اصلی (Table1) و جدول فروش حاوی کلید خارجی باشه (Table2) این کد :
DELETE Table2.*, Table1.name
FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.id
WHERE (((Table1.name)="a1"));
کد بالا فقط رکوردهای خاصی از جدول حاوی کلید خارجی رو حذف می کنه که در مورد شما کالا در Table1 و کالای فروش رفته در جدول Table2 قرار می گیره.

سلام.دوست عزیز این روش کاملا اشتباه هست.
شما کالایی که از انبار به فروش می رسونید باید نام کالاتون در انبار باشه که بعد بتونید از اون گزارش کاردکس تهیه کنید ببینید چقدر کالا ورود داشته و چقدر خروج داشته.
شما باید برای اون کالا یک واحد مقدار داشته باشید و هروقت چیزی فروش کردید یا چیزی خرید کردید مقدار اون فیلد موجودی رو بروز کنید نه اینکه کل کالا رو از انبار حذف کنید!!

Masoome_das
دوشنبه 05 مهر 1389, 21:51 عصر
کد بالا فقط رکوردهای خاصی از جدول حاوی کلید خارجی رو حذف می کنه که در مورد شما کالا در Table1 و کالای فروش رفته در جدول Table2 قرار می گیره.

و


شما باید برای اون کالا یک واحد مقدار داشته باشید و هروقت چیزی فروش کردید یا چیزی خرید کردید مقدار اون فیلد موجودی رو بروز کنید نه اینکه کل کالا رو از انبار حذف کنید

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

حمیدرضاصادقیان
دوشنبه 05 مهر 1389, 23:45 عصر
سلام.بازم نیازی به اینکار نیست.شما یک فیلد بولین قرار بده وقتی اون کالا فروش رفت مقدار اون رو false کن.

tooraj_azizi_1035
سه شنبه 06 مهر 1389, 07:45 صبح
سلام.دوست عزیز این روش کاملا اشتباه هست.
شما کالایی که از انبار به فروش می رسونید باید نام کالاتون در انبار باشه که بعد بتونید از اون گزارش کاردکس تهیه کنید ببینید چقدر کالا ورود داشته و چقدر خروج داشته.
شما باید برای اون کالا یک واحد مقدار داشته باشید و هروقت چیزی فروش کردید یا چیزی خرید کردید مقدار اون فیلد موجودی رو بروز کنید نه اینکه کل کالا رو از انبار حذف کنید!!

سلام آقای صادقیان،
در صورتی که هر وقت چیزی به انبار اضافه شد اگه بخوایم تاریخ اون رو ثبت کنیم مجبوریم برای هر افزایش به انبار یه رکورد ثبت کنیم و اگه بخوایم از انبار برداشتی داشته باشیم و در عین حال از این برداشت هم بعداً بخواهیم گزارشی داشته باشیم باز هم باید اون رو به صورت یه رکورد ثبت کنیم. در هر حال اگه بخوایم چیزی که به انبار وارد شده رو برداشت کنیم مثلاً کل تعداد باید رکورد رو حذف کنیم خود مشخصاتا کالا تو جدول اصلی باقی می مونه فقط ارجاع به اون تو جدول حاوی کلید خارجی حذف می شه.

حمیدرضاصادقیان
سه شنبه 06 مهر 1389, 08:02 صبح
سلام.نه منظور ایشون اینه که کلید خارجی بمونه و کلید اصلی حذف بشه. بعد در حسابداری ما چیزی رو حذف نمی کنیم.
بعد نیازی نیست برای هر ورود و خروج یک رکورد ثبت بشه.شما فقط کافیه در انبار موجودی اون کالا رو بروز کنید. در غیر اینصورت نمیتونید گزارشات مربوط به کاردکس و انبار و ورود و خروج و ... رو به درستی ملاحظه کنید.

tooraj_azizi_1035
سه شنبه 06 مهر 1389, 08:05 صبح
سلام.نه منظور ایشون اینه که کلید خارجی بمونه و کلید اصلی حذف بشه. بعد در حسابداری ما چیزی رو حذف نمی کنیم.
بعد نیازی نیست برای هر ورود و خروج یک رکورد ثبت بشه.شما فقط کافیه در انبار موجودی اون کالا رو بروز کنید. در غیر اینصورت نمیتونید گزارشات مربوط به کاردکس و انبار و ورود و خروج و ... رو به درستی ملاحظه کنید.

آقای صادقیان اینکه می گید کلید خارجی بمونه و کلید اصلی حذف بشه Referential Integrity رو در مورد اون رکورد از بین می بره و موجودیت اون کلید خارجی زیر سوال می ره یعنی اون کلید خارجی که هیچ معادلی در جدول کلید اصلی نداره، یه داده بی اعتبار محسوب می شه.

حمیدرضاصادقیان
سه شنبه 06 مهر 1389, 12:56 عصر
آقای صادقیان اینکه می گید کلید خارجی بمونه و کلید اصلی حذف بشه Referential Integrity رو در مورد اون رکورد از بین می بره و موجودیت اون کلید خارجی زیر سوال می ره یعنی اون کلید خارجی که هیچ معادلی در جدول کلید اصلی نداره، یه داده بی اعتبار محسوب می شه.
خوب دقیقا منظور من هم همین بود که گفتم روششون اشتباه هست.
ایشون هم همین مورد رو خواسته که گفته اگر Relation رو از بین ببرم میتونم اینکارو کنم که من گفتم کلا کارش اشتباه است.