PDA

View Full Version : سوال: کددهی توسط سیستم وامکان ویرایش کد



star shine
یک شنبه 02 اسفند 1388, 20:27 عصر
با سلام خدمت اساتید
قبل از هرچیز بگم خیلی توی سایت جستجو کردم ولی مطلبی که کمکم کنه پیدا نکردم. اگه سوالم مبتدی هم هست به بزرگی خودتون ببخشید. من توی جدولم دو تا فیلد دارم که یکیش identity هست و فیلد دیگه هم نباید تکراری باشه درواقع نام شرکت و کد شرکت وقتی که کاربر شرکتی را اضافه می کند به صورت خودکار کد اختصاص پیدا میکند می خوام کاربر امکان ویرایش کدو داشته باشه یعنی کددهی توسط سیستم باشه ولی کاربر امکان ویرایش داشته باشه ولی فیلد identity را نمی شود update کرد چطور می توانم این قابلیت را برای سیستم بوجود بیارم.اگر لطف کنید و کمک کنید خیلی ممنون میشم

AminSobati
دوشنبه 03 اسفند 1388, 23:25 عصر
سلام دوست عزیزم،
همونطور که اشاره کردین فیلد Identity قابل ویرایش نیست و شما باید خودتون عدد رو تولید کنین. میتونین در یک جدول دیگه آخرین عدد رو ذخیره کنین و موقع تولید، یکی بهش اضافه کنین و در جدول مربوطه Insert انجام بدین. فقط یادتون باشه هنگام خواندن آخرین عدد، باید از Hint استفاده کنین و جدول رو Lock کنین، چون به صورت همزمان ممکنه دو کاربر فرضا عدد 10 رو بخونن و بخوان 11 رو Insert کنن

star shine
سه شنبه 04 اسفند 1388, 12:50 عصر
با سلام
خیلی ممنون از پاسختون.همونجور که گفتم اطلاعات من در سطح مبتدی هست .جدول اصلی من فقط دوتا فیلد داره خیلی زمان بر نیست که یک جدول دیگه فقط به خاطر یک مقدار اضافه کنم.اگه یک فیلد درهمین جدول برای آخرین مقدار درست کنم که در هر بار insert کردن مقدارش update بشه با ویرایش اون مشکل دارم مثلا اگه تا کد 5 تو جدول ذخیره بشه و کاربر کد 5 را به 100 تغییر بده اگه مقدارmax به 100 تغییر کنه کد دهی از 101 شروع می شه واز 5 تا 100 خالی می مونه . در ضمن برنامه تحت ویندوزه و در یک زمان فقط یک کاربر دسترسی دارد.ممنون می شم بیشتر راهنمایی کنید.

mostafa_zainy
سه شنبه 04 اسفند 1388, 13:38 عصر
دوست عزیز یه راه خیلی ساده این هست که یک فیلد دیگه تعریف کنید تا کدهای وارده توسط کاربرها رو تو خودش نگهداری کنه و برحسب نیاز میتونید جستجو ها رو از فیلدهای مورد نظر آغاز نمایید

DataMaster
سه شنبه 04 اسفند 1388, 18:54 عصر
سلام دوست عزیزم،
همونطور که اشاره کردین فیلد Identity قابل ویرایش نیست و شما باید خودتون عدد رو تولید کنین. میتونین در یک جدول دیگه آخرین عدد رو ذخیره کنین و موقع تولید، یکی بهش اضافه کنین و در جدول مربوطه Insert انجام بدین. فقط یادتون باشه هنگام خواندن آخرین عدد، باید از Hint استفاده کنین و جدول رو Lock کنین، چون به صورت همزمان ممکنه دو کاربر فرضا عدد 10 رو بخونن و بخوان 11 رو Insert کنن
جناب ثباتی میشه در مورد Hint توضیح بدین؟

Modernidea
سه شنبه 04 اسفند 1388, 20:18 عصر
اگه یک فیلد درهمین جدول برای آخرین مقدار درست کنم که در هر بار insert کردن مقدارش update بشه
نه این کار باعث میشود که به تعداد رکورد های جدول این عدد تکرار شود!
آیا این کار به نظر شما منطقی است.
بهترین کار روشی است که جناب AminSobati (http://barnamenevis.org/forum/member.php?u=6345) گفتند.

البته خاصیت Identity فیلد کد جدول اصلیتون را برابر با No قرار بدید تا از حالت مقدار دهی خودکار خارج شود.

موفق باشید.

star shine
سه شنبه 04 اسفند 1388, 23:21 عصر
نه این کار باعث میشود که به تعداد رکورد های جدول این عدد تکرار شود!
آیا این کار به نظر شما منطقی است.
بهترین کار روشی است که جناب AminSobati (http://barnamenevis.org/forum/member.php?u=6345) گفتند.




خیلی ممنون از توجهتون
بله حرف شما درست است .یعنی استفاده از یک جدول دیگه بهتر از تکرار یک عدد در همین جدوله.مشکل اصلی در ویرایش کد هاست امکان ویرایش طوری که کدها مرتب باشند با توجه به اینکه من استفاده از Hint را که آقای ثباتی فرمودند نمی دونم آیا از طریق اون این کار عملی می شه ؟

AminSobati
سه شنبه 04 اسفند 1388, 23:30 عصر
البته اگر دست کاربر تا این حد بازه که PK رو تغییر بده، پس خیلی اتفاقات ناگوار دیگه هم میتونه بیفته. تولید PK خوبه که دست شما باشه.
در مورد Hint:



begin tran
select Pk_col from AutoNumTable with(xlock,tablock,holdlock)
update AutoNumTable set Pk_col=Pk_col+1
commit tran