PDA

View Full Version : Master-Detail Relationship



مجید سینا
چهارشنبه 30 خرداد 1386, 18:06 عصر
سلام

دوستان یه مشکل دارم که منو :گیج: و :عصبانی++: کرده اگه بهم کمک کنید منو :خجالت: دادین.
مسئله از قرار زیره:
یه برنامه دارم که از دو AdoTable و دو Datasource و دو ِDbGrid تشکیل شده.
دو AdoTable به یه دیتابیس Ms Access وصل شدن که دو جدول با رابطه Master-Detail داره.
DbGrid اول محتوای جدول Master و DbGrid دوم محتوای جدول Detail رو نمایش میده.
بین دو جدول تو دلفی هم رابطه Master-Detail برقرار شده.
گاهی نیازه که مقدار فیلد کلید جدول مستر تصحیح بشه و بعد از تصحیح مقدار جدید باید به صورت آبشاری در جدول Detail ) کلید خارجی جدول ) هم اعمال بشه.
حالا مشکل اینه که وقتی مقدار فیلد کلید اصلی رو برای یه رکورد توی جدول Master تغییر میدم ، DbGrid دوم تا زمانی که AdoTable مربوط به Detail رو requery یا Close-Open نکنم اطلاعات بروز شده رو نمایش نمیده.
حالا requery کردن جدول Detail کاری نداره مشکل اینه که اعمال آبشاری تغییرات در جدول Detail کمی زمان میبره و من نمی دونم کی باید پایان این زمان رو مشخص کنم تا از تابع requery استفاده کنم.

اگه کسی میدونه چطور میشه به طور خودکار عملیات بروز رسانی محتوای DbGrid دوم رو انجام داد به من کمک کنه.

-------------------------------------------------------------------------------------------------------
جوینده دانش در کنف عنایت پروردگار متعال است. پیامبر اکرم (ص)

saman020
پنج شنبه 31 خرداد 1386, 15:58 عصر
صورت مسئله غلط است اصلا شما نباید کلید را دستکاری کنید تا این مشکل ایجاد شود یک فیلد
autoincreament در جدول master اضافه کنید در afterinsert هر رکورد از detail این مقدار را در فیلد int که در detail برای ارتباط اضافه میکنید قرار دهید . این کلیدها ثابتند و تغییر نمیکنند مقدار موجود در master هم هر وقت عوض شود تاثیری در detail ندارد و علاوه بر این دیگر نیازی به داشتن این مقدار در detail ندارید که هر وقت در master عوض شد نیاز به تغییر آن باشد . مقدار را از طریق lookup نمایش دهید

AFTABGARDAN2006
جمعه 01 تیر 1386, 00:33 صبح
دوست عزیز با دستور Update اطلاعات جدول دوم رو تغییر بده بعد دوباره detail رو بازکن
البته بهتره به قول دوسمون کلید رو دستکاری نکنی چون دردسرهای خاص خودش رو داره یکیش اینه که ممکنه بعد از تغییر Master یه دفعه برق بره و دومی Detail تغییرات روش اعمال نشه

ghabil
شنبه 02 تیر 1386, 01:19 صبح
صورت مسئله غلط است اصلا شما نباید کلید را دستکاری کنید تا این مشکل ایجاد شود یک فیلد
autoincreament در جدول master اضافه کنید در afterinsert هر رکورد از detail این مقدار را در فیلد int که در detail برای ارتباط اضافه میکنید قرار دهید . این کلیدها ثابتند و تغییر نمیکنند مقدار موجود در master هم هر وقت عوض شود تاثیری در detail ندارد و علاوه بر این دیگر نیازی به داشتن این مقدار در detail ندارید که هر وقت در master عوض شد نیاز به تغییر آن باشد .

کاملا درسته.