PDA

View Full Version : اشکال در درج اطلاعات در جداول Master/Detail



code_project
پنج شنبه 29 فروردین 1392, 07:19 صبح
با سلام خدمت دوستان
من یه برنامه دارم که به یه بانک با دوتا جدول وصله. توی یه جدول شماره ثبت کالاها میشینه که این جدول جدول master منه و توی جدول دوم ردیف های کالا قرار می گیره که این جدول جدول detail من میشه.
این برنامه تحت شبکه اجرا میشه و شماره ثبت را خود سیستم بسته به آخرین شماره ثبت کالای ثبت شده در جدول master می اندازه و کاربر می تونه ردیف های کالا را در یه جدول temp اضافه کنه(این جدول temp دقیقا ساختارش شبیه جدول detail ماست) و پس از زدن دکمه ثبت نهایی، اطلاعات توی جدول detail میشینه.
حالا مشکل من اینه:
فرض کنید یه کاربربرنامه را باز کرده و مثلا داره ردیف های کالا برای شماره ثبت کالای 100 را میزنه. در همین حین یه کاربر دیگه از یه سیستم دیگه وارد میشه و قاعدتا اون هم شماره ثبت 100 را می بینه(چون هنوز دکمه ثبت نهایی زده نشده که سطر جدیدی به جدول اصلی اضافه بشه و شماره ثبت یکی اضافه بشه). من چطور می تونم کاری کنم که شماره 100 برای کاربر اول قفل بشه و کاربر دوم شماره 101 را ببینه؟ البته میشه این کار را کرد که سیستم شماره ثبت را از جدول temp بندازه ولی یه مشکل بوجود می آد. اگه کاربر اول از زدن دکمه ثبت نهایی منصرف بشه اونوقت شماره ثبت 100 در جدول master خالی رد میشه که من این را نمی خوام. حالا شما میگید من چکار کنم؟

davood-ahmadi
پنج شنبه 29 فروردین 1392, 08:49 صبح
سلام
من خودم ترجیحا از این روش استفاده نمی کنم که ثبت نهایی داشته باشه. وارد مقولات پیچیده میشی. ( برای کار شبکه مناسب نیست )
من تک تک، اطلاعات را ثبت می کنم.

code_project
پنج شنبه 29 فروردین 1392, 11:19 صبح
سلام مجدد
توی جدول master شماره های ثبت میشینه که یه کد 5 رقمیه و برنامه آخرین کد این جدول را میخونه و یکی بهش اضافه میکنه و به کاربر نشون میده.
حالا کاربر برای اون شماره ثبت لیست کالا و مشخصات هر کالا را اضافه میکنه. که این ردیف کالاها یکی یکی اضافه میشه و توی یه جدول موقت نگهداری میشه.
مثلا:
واسه شماره ثبت 12423 سه ردیف کالای 1و2و3 ثبت میشه.
حالا کاربر کل موارد درج شده را چک میکنه و با زدن دکمه ثبت نهایی، شماره ثبت توی جدول master و شماره ردیف کالاهای مربوط به اون شماره ثبت توی جدول detail میشینه و جدول موقت کاملا خالی میشه. بعد از زدن دکمه ثبت نهایی، حالا کاربر شماره ثبت 12424 را می بینه و میتونه ردیف کالاهای این شماره را طبق روال قبل درج کنه.
اما مشکل وقتی بوجود میاد که دو تا کاربر از دوتا سیستم متفاوت وارد بشن و مشغول عملیات بشن که در این صورت ممکنه واسه یه شماره ثبت یکسان، ردیف کالاهای نادرستی به بانک اضافه بشه.
اگه ثبت موقت نداشته باشیم که نمیشه. اومدیم و کاربر ردیف کالاها را وارد کرد و اصلا پشیمون شد. اونوقت باید بریم و اون ردیف کالاها را از جدول detail حذف کنیم. در اصل یه جور rollback دستی!

davood-ahmadi
شنبه 31 فروردین 1392, 13:28 عصر
سلام.
شما از دو روش می تونید استفاده کنید:
1- شماره ثبت رو هنگام زدن کلید ثبت نهایی به سیستم بده که دیگر این مشکل پیش نیاد
2- برای جدول temp یک زمان اعتبار بگذار (timeout ) . یعنی اینکه مثلا وقتی شماره ای رو رزرو می کنی در جدول temp تا 15 دقیقه فرصت داره که کاربری که این شماره رو رزرو کرده اطلاعات رو وارد کنه و ثبت نهایی رو بزنه.
یک عیب بزرگ :
اگر کاربر شماره 1 یک شماره 100 رو رزرو کرد و کاربر شماره 2 هم بعد از 5 ثانیه شماره 101 رزرو کرد، ممکنه که کاربر 2 سریعتر اطلاعات رو ثبت کنه که اطلاعات 100 به نام کاربر 2 ثبت میشه. ( بخاطر همین مسئله روش اول رو پیشنهاد می کنم )

اگر خواستی نمونه بگذار تا راحتتر بتونم کمکت کنم