PDA

View Full Version : Delete کردن Detail های یک شاخه از DBTreeView



shaghayegh_6113
یک شنبه 18 آذر 1386, 22:34 عصر
سلام
من می خوام وقتی یک شاخه از DBTreeview رو Delete میکنم اگر زیر شاخه های این شاخه توی جدول Detail ام دارای رکورد هستن ( جدول Detail با جدول اصلی PK دارد ) اون رکوردها هم حذف بشه.
اگر Detail نداشته باشم با Deletchild و Delete شاخه ها و زیر شاخه ها پاک می شن ولی اگر Detail داشته باشم بهم پیغام میده که 2 تا جدول با هم ارتبط دارن و نمی شه پاک کرد . یعنی اول باید Detail ها رو پاک کنم . حالا چه طور می تونم وقتی یک شاخه رو انتخاب می کنم Id آخرین Child اون رو پیدا کنم تا بتونم Detail اش رو پاک کنم
البته فکر می کنم این مشکل با Trigger حل بشه ولی من تا به حال Trigger ننوشتم
اگر کسی راه حل Delphi یا Trigger این مشکل رو میدونه می شه کمکم کنه :ناراحت:
(اگر Trigger باشه چه بهتر ):لبخند:

SYNDROME
دوشنبه 19 آذر 1386, 05:42 صبح
ولی اگر Detail داشته باشم بهم پیغام میده که 2 تا جدول با هم ارتبط دارن و نمی شه پاک کرد . یعنی اول باید Detail ها رو پاک کنم . حالا چه طور می تونم وقتی یک شاخه رو انتخاب می کنم Id آخرین Child اون رو پیدا کنم تا بتونم Detail اش رو پاک کنم
البته فکر می کنم این مشکل با Trigger حل بشه ولی من تا به حال Trigger ننوشتم
اگر کسی راه حل Delphi یا Trigger این مشکل رو میدونه می شه کمکم کنه :ناراحت:
(اگر Trigger باشه چه بهتر ):لبخند:
خوب شما می توانید خاصیت Cascade Delete Relation Records را در هنگام Relation زدن فعال کنید تا با Delete شدن رکورد اصلی ، رکورد فرزندان نیز حذف شود و پیغام خطا را هم ندهد.
می توانید از تابع بازگشتی نیز استفاده کنید تا به پیمایش کل ساختار به ترتیب زیر شاخه ها را از پایین تا به بالا حذف کند.
فقط یک پیشنهاد:اصولا در ساختارهای Tree چون کاربر درخت را از بالا به پایین می سازد پس موقع حذف هم باید از پایین به بالا حذف کند و قبل از حذف شاخه مادر باید فرزندان آن را حذف کرده باشد.
موفق باشید