ورود

View Full Version : چگونه یک رکورد را قفل کنیم



rezaei
یک شنبه 26 فروردین 1386, 13:39 عصر
من در SQL تازه کار هستم میخواهم تا زمانی یک رکورد یا تعدادی رکورد با شرایط خاص را اصلاح می کنم کسی نتواند برای اصلاح (نه برای گزارش) این رکورد ها را SELECT نماید لطفا کمک نمایید

SabaSabouhi
یک شنبه 26 فروردین 1386, 19:10 عصر
با سلام
خیلى راحته:



BEGIN TRANS
...
...
...
COMMIT


صبا صبوحى

AminSobati
یک شنبه 26 فروردین 1386, 23:07 عصر
اساسا خواندن رکوردی که تحت ویرایش قرار داره، تنها در حالتی امکان پذیره که Isolation Level کاربر Select کننده روی Read Uncommitted قرار داشته باشه. همچنین در حالت ویرایش رکورد، کس دیگه نمیتونه اون رو ویرایش کنه.
ولی این برمیگرده به تعریف شما از "ویرایش"! اگر منظورتون اینه که رکورد رو به سمت کلاینت بیارین و در حالت ویرایش نگه دارین، باید حتما از سمت کلاینت Transaction رو شروع کنید اما این هم مشکل خودش رو داره؛ مثلا کاربر اگر معطل کنه بقیه هم کارشون Block میشه روی اون رکورد

rezaei
دوشنبه 27 فروردین 1386, 10:23 صبح
با تشکر از دوستان
مشکل را با یک مثال توضیح می دهم
فرض کنید کاربری در حال اصلاح یک سند حسابداری است(این سند وجود داشته است)
همزمان کاربر دیگری این سند را انتخاب کرده وشروع به اصلاح می نماید
اگر کاربر اول اصلاح وسپس ذخیره نما ید وبعد از ان کاربر دوم اصلاح وذخیره نماید تمام اصلاحات کاربر اول از بین می رود
واگر به کاربر دوم از طریق پیغام خطای sql اعلام کنیم که سند مورد نظر توسط کاربر دیگری اصلاح
شده واجازه ذخیره سند را ندهیم زحمات کاربر دوم ازبین می رود
پس بهتر است قبل از شروع به اصلاح سند توسط کاربر دوم پیغام لازم داده شود
با تشکر

DonetKarvb
دوشنبه 27 فروردین 1386, 15:09 عصر
شما میتونید یک ستون از جنس timestamp به جداضافه کنید. هر بار که یک فیلد آپدیت میشود محتوای این ستون نیز اتوماتیک تغییر میکند. وقتی که یک رکورد را به سمت کلاینت میفرستید هنگام ذخیره کردن این فیلد را کنترل کنید که آیا تغییر کرده است یا خیر . اگر تغییر کرده بود پیغام دهید که این فیلد قبلا" توسط کسی دیگر ویرایش شده است. آیا شما میخواهید تغییرات شما روی تغییرات قبلی ذخیره شود یا خیر

rezaei
چهارشنبه 29 فروردین 1386, 09:42 صبح
با تشکر از پاسختان
اما توجه نکردید که من میخواهم در زمان برداشت اطلاعات وقبل از هر گونه اصلاح متوجه اصلاح توسط کاربر دیگر بشوم