ورود

View Full Version : جلوگیری از ویرایش یک رکورد تو سط چند تا کلاینت



DoDoklak
سه شنبه 10 شهریور 1388, 09:53 صبح
تو برنامه های تحت شبکه هنگام درج در جدول مشکلی به اون صورت به وجود نمیاد چون خود SQL قفلهایی رو تو جدول میزاره و کلاینتها میرن تو صف و اطلاعات به نوبت ثبت میشه

ولی مشکل تو ویرایش یک رکورد مشترک هستش
فرض کنید فاکتور شماره 1 با 10 رکورد وجود داره ویک کلاینت میخوان اونو ویرایش کنه قبل ذخیره تغییرات
کلاینت اطلاعات فاکتور رو میریزن تو یک Dataset برنامه ش و تغییرات رو تو DataSet اعمال میکنه

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

چطور میشه جلوی ویرایش کلاینت دوم رو گرفت ؟

البته میشه با گذاشتن یک جدول کنترلی در بانک این رکوردها رو موقتا قفل کرد فرضا وقتی یک کلاینت میخواد رکوردی رو ویرایش کنه ابتدا به جدول کنترلی نگاه میکنه اگر قفل نبود بعد ویرایش کنه و اگر قفل بود پیغامی از برنامه دریافت کنه مبنی بر اینکه رکورد مورد نظر در حال به روز رسانی است و بعدا امتحان کنه

حالا اگه کسی فکر بهتری داره لطفا بگه

با تشـــــــــــــــــــــــ ـــــــــــــــتکر

f.nabavi
سه شنبه 10 شهریور 1388, 11:40 صبح
سلام. همون طور که گفتی یه راه حل اینه که جدول در هنگام ویرایش قفل بشه ولی اینم مشکلاتی به وجود میاره مثلا کاربر یه مدت معطل میشه تا ویرایش کاربر اول تموم بشه
یه راه دیگه اینه که هر دو کاربر بتونن شروع به ویرایش کنن ولی نه از روی جدول اصلی بلکه بر روی یک view.
یک view از جدول اصلی میگیرن و اون رو ویرایش میکنن. فرض کنیم view کاربر دوم به اسم view2 باشه و این view به وسیله select2 ساخته شده باشه. کاربر اول تغییرات خودش رو ثبت کنه. حالا وقتی کاربر دوم میخواد تغییرات خودش رو ثبت کنه،برنامه یه بار دیگه درخواستselect 2 رو اجرا میکنه. اگر با اونی که کاربر روش کار کرده تفاوت داشت بهش اطلاع میده که جدول از آخرین باری که شما دید تغییر کرده آیا میخواید جدول جدید رو ببینید؟

DoDoklak
سه شنبه 10 شهریور 1388, 13:15 عصر
البته منظورم از قفل ، قفل اون رکورد مورد نظر بو نه کل جدول یعنی میشه چند کاربر روی یک جدول ویرایش کنن به شرطی که رکوردهاشون یکی نباشه

ولی در کل روش شما هم جالبه.ممنون

ولی آیا اجرای دوبار Select جهت بررسی درتراکنش بالای اطلاعات و کلاینتهای زیاد باعث کند شدن سرعت برنامه و ترافیک شبکه نمیشه

f.nabavi
سه شنبه 10 شهریور 1388, 14:07 عصر
تو برنامه های کوچیک که نه. ولی برای یه دیتابیس با تراکنش بالا چرا. تو اون حالت ها بهتر از روش قفل کردن و مقایسه به صورت ترکیبی استفاده بشه. اینکه یه کاربر برای ویرایش رکوردها منتظر باز شدن جدول بمونه به همون اندازه بده که طول کشیدن پروسه ویرایش. البته من هیچ وقت این روش ها رو عملی در تراکنش های با حجم بالا استفاده نکردم. نمیدونم نتیجه اش چی میشه.