جلوگیری از همزمان وارد کردن اطلاعات
سلام دوستان
برنامه من تحت شبکه هست و کلاینت ها اطلاعات رو در بانک سرور ذخیره میکنند . حال من نمیخوام
که رو یک جدول همزمان چند کلاینت اطلاعات رو وارد کنند .
برای اینکه در آن واحد فقط یک کلاینت بتونه در جدول کار عملیات انجام بده باید جیکار کرد؟
با تشکر از دوستان
نقل قول: جلوگیری از همزمان وارد کردن اطلاعات
شما چرا می خواهی محدودیت ایجاد کنی
اگه هم با هم وارد کنن فکر نکنم هیچ مشکلی پیش بیاد.
مگر این که در برنامه نویسیتون درست عمل نکرده باشید.
نقل قول: جلوگیری از همزمان وارد کردن اطلاعات
کسی نیست جواب بده؟:ناراحت:
نقل قول: جلوگیری از همزمان وارد کردن اطلاعات
ببین دوست عزیز ، وارد کردن اطلاعات به طور دقیقا همزمان اتفاق نمی افته و حتما یه اختلاف چند صدم ثانیه داره و 2 عمل جدا به حساب میاد . شما اگر بانکت رو درست طراحی کرده باشی قطعا مشکلی نخواهی داشت . فرض کن توی جدولی کلید اصلی شما یه فیلد Identity هستش ، اگر 2 رکورد براس ثبت ارسال بشن قطعا یکی اول درج میشه و بعد رکورد دوم ثبت میشه . یا برای مثال دیگه فرض کنم یه فیلد رو عنوان کلید انتخاب کرده باشیم ، 2 رکورد هم برای این فیلد یک مقدار شبیه هم ارسال کردن ، اولی که درج شد دیگه sql از رکورد دوم خطا میگیره و اجازه ثبت نمیده . اما اگر شما فیلد رو توی جدولتون به عنوان کلید انتخاب نکنی و فقط توی فرم چک کنی که رکوردی با شرط وجود این فیلد وجود داره یا و بعد عمل ثبت رو امجام بدی ممکنه تو فاصله چک کردن فیلد تکراری تا ارسال رکورد ، رکورد دیگه ای با اون شرط ارسال بشه . پس اگر بانکتون درست طراحی بشه مشکلی در ورود اطلاعات نیست .
اما موضوع دیگه ویرایش و یا حذف اطلاعات هستش . یه وقت پیش میاد که اطلاعات یک جدول برای 2 کاربر نمایش داده میشه و کاربر 1 میاد از مثلا تعداد یک کالایی 5 تا کم میکنه و تغیرات رو توی فرم محاسبه میکنه و فقط مقدار جدید رو توی بانک ذخیره میکنه و کاربر دوم هم میخواد به تعداد 3 تا اضافه کنه و اون هم تغیرات رو توی فرم محاسبه میکنه و فقط مقدار نهایی رو آپدیت میکنه . اینجا کاربر شماره 2 ، اعداد 3تارو به مقداری که موقع نمایش جدول دریافت کرده اضافه میکنه نه اون مقداری که بعد از تغیرات کاربر شماره 1 توی جدول قرار گرفته .
نقل قول: جلوگیری از همزمان وارد کردن اطلاعات
دوستمون درست مي گن...
من هم برنامه داشتم كه 4 تا سيستم با هم اطلاعات وارد مي كردن و هيچ مشكلي نداشتن...
اما اگر روي اين كار اصرار داري مي توني وقتي يكي از كلاينت ها فر مي رو باز كرد مقداري رو در رجيستري يا بانك (مثلا 0 و 1)قرار بدي و هنگان باز كردن فرما چك كني كه اگه 1 بود يعني فرم در يكي از كلاينتها باز است و اجازه ادامه كار بهش ندي
راه ديگه اي به ذهنم نمي رسه..
نقل قول: جلوگیری از همزمان وارد کردن اطلاعات
بهترین راه استفاده از عکس العملیه که اجرای 1 تراکنش در پی داره.یعنی Lock کردن 1 رکورد در زمان اجرای تراکنش.اگه اطلاعات کامل بخای کلی توضیح داره و اصلا 1 بحث تخصصی در زمینه پایگاه اطلاعاتیه.اگه به بخش SqlServer سری بزنی آستاد ثباتی توضیحات کاملی رو برای این مورد دادن.
Xlock,Rlockو.....
نقل قول: جلوگیری از همزمان وارد کردن اطلاعات
در ضمن اون بحث 0و1 از بیخ و بن کار غلطیه .اگر برق حین کار قطع شد یا سرور Crash کرد چیکار میکنین؟خب اون 1 همیشه 1 میمونه!!!!!!!!!!!!!!!!!:متعجب::متعج ب::متعجب:
نقل قول: جلوگیری از همزمان وارد کردن اطلاعات
با سلام
Lock کردن جدول راه حل شما است. ولی در این صورت همزمانی رو در سیستم خودتون از بین می برین.
آیا واقعا در سیستم شما نیازی به چنین کاری هست؟
نقل قول: جلوگیری از همزمان وارد کردن اطلاعات
نقل قول:
نوشته شده توسط
hooooman
در ضمن اون بحث 0و1 از بیخ و بن کار غلطیه .اگر برق حین کار قطع شد یا سرور Crash کرد چیکار میکنین؟خب اون 1 همیشه 1 میمونه!!!!!!!!!!!!!!!!!:متعجب::متعج ب::متعجب:
ممنون از راهنماييتون دوست عزيز
نقل قول: جلوگیری از همزمان وارد کردن اطلاعات
نقل قول:
نوشته شده توسط
hooooman
بهترین راه استفاده از عکس العملیه که اجرای 1 تراکنش در پی داره.یعنی Lock کردن 1 رکورد در زمان اجرای تراکنش.اگه اطلاعات کامل بخای کلی توضیح داره و اصلا 1 بحث تخصصی در زمینه پایگاه اطلاعاتیه.اگه به بخش SqlServer سری بزنی آستاد ثباتی توضیحات کاملی رو برای این مورد دادن.
Xlock,Rlockو.....
با تشکر از شما تو اون تالار هم پست دادم ولی شما ebook در مورد این قفل کردن ها ندارید؟