PDA

View Full Version : خروج غیر اصولی از برنامه و Record Unlock



ealvandi
چهارشنبه 14 شهریور 1386, 10:27 صبح
با سلام خدمت دوستان و اساتید محترم
بنده روی یک برنامه تحت شبکه کار می کنم که مشکل Record Lock رودارم(جلوگیری از ویرایش همزمان یک رکورد توسط چند کاربر) راه حلی که برای حل این موضوع درپیش گرفتم این بودکه هنگام ویرایش رکورد توسط اولین کاربر شماره رکورد موردنظردریک Table دیگر ثبت کردم حالا اگر کاربر دیگری بخواهد همان رکورد را ویرایش کند ابتدا برنامه ، شماره رکورد رو در Table دوم جستجو می کند ، اگر نتیجه مثبت بود یعنی شماره رکوردی که می خواهیم ویرایش کنیم در Table دوم پیداشد که نشان از ویرایش رکورد توسط کاربر دیگری میدهد دراین صورت به کاربر دوم اجازه ویرایش رکورد رو نمیده ودر انتها وقتی کاربر اول اطلاعات رو ویرایش و ذخیره کرد هنگام خروج ، برنامه شماره رکورد را از Table دوم پاک می کند و بدین ترتیب رکورد دوباره آزاد میشه(Unlock) حالا مشکل اصلی من اینه که اگر برنامه هنگام ویرایش رکورد قبل از ذخیره ، به طور غیراصولی بسته شد( قطع شبکه ، قطع برق ، Reset یا End Task ) تکلیف شماره رکوردی که در Table دوم ثبت شده بود چی می شه ؟ که در اینصورت رکورد برای همیشه Lock می مونه.
البته راه حل هایی نظیر expire کردن رکورد و Unlock توسطAdminstrator رو تست کردم ولی هر کدوم مشکلاتی دارن .
حالا اگه دوستان راه حلی برای این مشکل دارن لطفاً ارائه کنند.
با تشکر فراوان

MNosouhi
چهارشنبه 14 شهریور 1386, 12:17 عصر
البته راه حلی که در پیش گرفتید خیلی اصولی نیست و اینکار (مدیریت دسترسی به رکوردها) رو معمولا خود موتور بانک اطلاعاتی انجام میده (حالت قفل شدن رکورد به صورت خوشبینانه و بدبینانه) . اما به هر حال برای مورد شما بهتره که برای قفل شدن رکوردها یک زمانی رو به عنوان طول عمر قفل ماندن رکورد در نظر بگیرید . مثلا این زمان رو 60 ثانیه در نظر بگیرید و اگر در این زمان 60 ثانیه رکورد از حالت قفل به صورت عادی خارج نشد خود برنامه اصلی (سرور) ، کامپیوتری که رکورد را قفل کرده رو تست کنه که قابل دسترس هست یانه و اگر مشکلی در شبکه نیست ، آیا برنامه روی آن در حال اجرا هست یا نه و اگر مشکلی بود رکورد را از حالت قفل شدن خارج کنه.

ealvandi
چهارشنبه 14 شهریور 1386, 23:33 عصر
با تشکر از شما



البته راه حلی که در پیش گرفتید خیلی اصولی نیست


شما چه راه حلی پیشنهاد میکنید ؟



معمولا خود موتور بانک اطلاعاتی انجام میده


موتور بانک اطلاعاتی فقط هنگام ذخیره با نمایش پیغام خطا جلوش رو میگیره ، ولی ما باید قبل از ورود این کار رو بکنیم.

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

MNosouhi
پنج شنبه 15 شهریور 1386, 19:11 عصر
شما چه راه حلی پیشنهاد میکنید ؟
حتمالا شما از ado استفاده می کنید ، شاید بد نباشه که ابزارهای دیگه ای رو هم امتحان کنید مثل dbisam یا dbexpress .

موتور بانک اطلاعاتی فقط هنگام ذخیره با نمایش پیغام خطا جلوش رو میگیره ، ولی ما باید قبل از ورود این کار رو بکنیم.
Ado اینطوریه ، اما مثلا dbisam قابل تنظیمه که کی پیغام رو نشون بده ، البته ado هم قابل تنظیمه ، اما جواب نمیده.

به نظر میرسه سر بار این روش کمی زیاد باشه
بستگی به برنامت داره و اینکه چند کلاینت داری ، اگر برنامت خیلی بزرگ نباشه و تعداد کلاینت ها هم کم باشه ، از همین روشی که استفاده می کنید می تونید به نتیجه برسید .

hedi
پنج شنبه 15 شهریور 1386, 20:04 عصر
دوستان من هم مشکل هزمانی ویرایش رکورد توسط کاربران را دارم اگر می توانید یک راه حل مفیدی را ارائه دهید خیلی ممنون می شوم من قبلا جایی که برنامه تحت شبکه نوشتم به دلیل همین مشکل مجبور شدم که تقسیم کار کنم به طوری که هر کاربر با Table مورد نظر خود کار کند ولی در کل به طور غیر همزمان کاربران دیگر می توانستند اثرات را مشاهده کنند

ealvandi
شنبه 17 شهریور 1386, 14:26 عصر
Ado اینطوریه ، اما مثلا dbisam قابل تنظیمه که کی پیغام رو نشون بده ، البته ado هم قابل تنظیمه ، اما جواب نمیده.


فکر میکنم روشی که من ارائه کردم در کارکردن با ado بهترین روش باشه فقط نمیدونم با قطع ناگهانی برنامه چه کار کنم. لطفا اساتید نظراتشون رو بدن . من واقعا کارم گیره این مشکله .
با تشکر.

MNosouhi
شنبه 17 شهریور 1386, 15:36 عصر
نمیدونم با قطع ناگهانی برنامه چه کار کنم.
در این رابطه که جوابت رو دادم

dkhatibi
شنبه 17 شهریور 1386, 22:55 عصر
از نظر تئوری
برنامه ای روی سرور اجرا کنید (یا از امکانت sql استفاده کنید!!!)
1- سرور اتصال یوزر ها را چک کند. در صورتیکه هیچ یوزری به سرور متصل نبود سرور تمام رکوردهای قفل را آزاذ کند.
یک مشکل کوچیک داره...

2- سرور نام کاربری که در خال ویرایش است را به خاطر بسپارد. در صورتیکه این کاربر ارتباطش قطع شد بلافاصله رکورد را آزاد کند.

ealvandi
شنبه 17 شهریور 1386, 23:27 عصر
سرور نام کاربری که در خال ویرایش است را به خاطر بسپارد. در صورتیکه این کاربر ارتباطش قطع شد بلافاصله رکورد را آزاد کند.


قطع ارتباط با کاربر رو باید چک کرد . اون هم نباید client رو بررسی کرد باید اجرا بودن برنامه رو بررسی کرد چجوری ؟ آیا بوسیله indy ؟