PDA

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



Neeloofar
جمعه 20 بهمن 1385, 23:30 عصر
سلام

یک سوال از خدمت دوستان داشتم و اینه که:
در پروژه‌ام میخوام یک رکورد رو برای ویرایش باز کنم و در همین زمان کاربر دیگری در شبکه در صورت دسترسی به همان رکورد نتونه اونو ویرایش یا حذف کنه.
در واقع رکورد برای مدتی که در حال ویرایش هست تا وقتی که آپدیت بشه قفل باشه.
اینو بگم شیوه من برای مشاهده رکوردها در برنامه اینطوریکه که کاربر کد رکورد رو میده، سپس توسط یک SQLCommand رکورد سلکت میشه و توسط یک آداپتور در دیتاست ریخته میشه و اتصال قطع میشه.یعنی رکورد برای مشاهده موقتا در حافظه ریخته میشه و اتصال از بانک قطع میشه.


Dim cnn AsNew SqlClient.SqlConnection("Connection String")
Dim cmd AsNew SqlClient.SqlCommand("SELECT * FROM TB1 WHERE ID = '1200'", cnn)
Dim adp AsNew SqlClient.SqlDataAdapter(cmd)
Dim ds AsNew DataSet
adp.Fill (ds)

نحوه آپدیت هم بدینگونست که پس از تغییرات در Textها دوباره به بانک متصل شده و توسط یک SQLCommand دستور UPDATE بکار گرفته میشه.


Dim cnn AsNew SqlClient.SqlConnection("Connection String")
Dim cmd AsNew SqlClient.SqlCommand("UPDATE TB1 SET ...", cnn)

آیا با این روش میشه رکوردی رو قفل کرد که صددرصد نمیشه. چه روشی استفاده کنم؟
میشه بدون دیتاست به رکوردها دسترسی پیدا کرد؟
.
.

rezaei manesh
شنبه 21 بهمن 1385, 08:00 صبح
یه راهش اینه که می تونی یک فیلد بولیین به فیلدات اضافه کنی و اونو مقدار دهی کنی وقتی که درحالت ویرایش هستی اونو یک کن و بعد اینکه کارت توم شد صفر کن و هر موقع هم که می خوای اطلاعات رو تغیر بدی چک کن که مقدار اون صفر باشه و گرنه بگو رکورد در حالت فقل است
البته این روش یکسری مشکلات رو هم داره مثل زمانی که در حالت ویرایش هستی برق بره ، هنگ کنه و... که باید بازسازی رکورد ها داشته باشی و...

Alireza_Salehi
شنبه 21 بهمن 1385, 08:56 صبح
منبع کامل برای این کار:
Introduction to Data Concurrency in ADO.NET (http://msdn2.microsoft.com/en-us/library/cs6hb8k4%28VS.80%29.aspx)

Neeloofar
شنبه 21 بهمن 1385, 08:59 صبح
می تونی یک فیلد بولیین به فیلدات اضافه کنی و اونو مقدار دهی کنی وقتی که درحالت ویرایش هستی اونو یک کن و بعد اینکه کارت توم شد صفر کن و هر موقع هم که می خوای اطلاعات رو تغیر بدی چک کن که مقدار اون صفر باشه و گرنه بگو رکورد در حالت فقل است
البته این روش یکسری مشکلات رو هم داره مسل زمانی که در حالت ویرایش هستی برق بره کهخ باید بازسازی رکورد ها داشته باشی و...
نه این راهش نیست. گرچه دیگه الان دوران قطعی برق سر رسیده. البته این رو به عنوان راه حل آخر در نظر گرفتم.

من با وی بی 6 و ADODB کار میکردم و ADODB رکوردست رو برای ویرایش قفل میکرد. ولی در دیتاست تکنولوژی DisConnected بکار رفته که اصلا نمیشه این کار رو کرد. چون دیتاست اصلا آفلاین کار میکنه. درست میگم؟

دوستان دیگه راهی دارند؟ شاید من بد استفاده میکنم. اصلا شیوه استفاده من معقوله؟ اونی که در بالا گفتم؟ شما برای اتصال به دیتابیس و خواندن و نوشتن دیتا چه راهی استفاده میکنید؟

Alireza_Salehi
شنبه 21 بهمن 1385, 09:12 صبح
این لینکی که دادم برای ADO.NETاست و ضمنا اگر دقت می کردی می دیدی که MSDN مال سال 2005 و دات نت فریمورک 2 نه مال VB6.

در ضمن دیتا سورس های 2005 همشون از همین روش استفاده می کنند(هنگام تنظیم دیتا سورس چنین گزینه ای وجود دارد)!

Introduction to Data Concurrency in ADO.NET (http://msdn2.microsoft.com/en-us/library/cs6hb8k4%28VS.80%29.aspx)
Using Optimistic Concurrency (http://msdn2.microsoft.com/en-us/library/aa0416cz%28VS.80%29.aspx)

Neeloofar
شنبه 21 بهمن 1385, 09:20 صبح
اولا این لینکی که دادم برای ADO.NET است و ضمنا اگر دقت می کردی می دیدی که MSDN مال سال 2005 و دات نت فریمورک 2 هست نه مال VB6


در ضمن دیتا سورس های 2005 همشون از همین روش استفاده می کنند!

Introduction to Data Concurrency in ADO.NET (http://msdn2.microsoft.com/en-us/library/cs6hb8k4%28VS.80%29.aspx)
Using Optimistic Concurrency (http://msdn2.microsoft.com/en-us/library/aa0416cz%28VS.80%29.aspx)

آقا چرا ناراحت میشی.:متعجب:
هر دو همزمان پست دادیم. من پست شما رو ندیدم کههههههههه.
باشه مطالعه میکنم. باز میام. ممنون.

Hossein Bazyan
جمعه 25 مرداد 1387, 16:31 عصر
سلام
در asp.net من از دستورات زیر استفاده میکنم اما در وی بی نمیدانم میشه یا نه ؟



Application.Lock()
cmd.ExecuteNonQuery()
Application.UnLock()

rezaei manesh
شنبه 26 مرداد 1387, 09:15 صبح
. گرچه دیگه الان دوران قطعی برق سر رسیده.
شما حاضری این جمله تونو الان باز هم تکرار بکنی؟!!
ظاهراً ما داریم پس رفت می کنیم تو سال 85 زمان قطعی برق به سر رسیده بود اما در سال 87 ....
دوست عزیز تا اونجا که من می دونم شما وقتی که داری روی یک رکورد می نویسی خود sql اونو قفل می کنه تا موقعی که کارش تموم بشه یعنی اگه 2 یوزر همزمان 2 درخواست برای یک رکورد داشته باشن اولویت با اولی هستش و بعد از اولی دومی کارش رو شروع می کنه و مشکلی از این بابت پیدا نمی کنی
من فکر کردم شما می خوای وقتی یک رکورد رو میزنی که ویراش بشه و اطلاعات اون در فرم ویرایشت (اگه داری) باز می شه می خوای تا زمانی که این فرم بسته نشده کسی نتونه رو اون رکورد کار کنه که با روش که گفتم میشه
اما صرفاً اگه لحظه نوشتن اطلاعات در بانک مد نظرت هست که خود بانک مدیریت می کنه با تو کاری نداره نگران اون نباشید
موفق باشید

icegirl_f2r
یک شنبه 07 تیر 1394, 18:27 عصر
لطفا بیشتر راهنمایی کنید منم میخوام در زمان ویرایش یه رکوردی را قفل کنم اما نمیدونم چطور میشه این کار را کرد؟
"میخوام یک رکورد رو برای ویرایش باز کنم و در همین زمان کاربر دیگری در شبکه در صورت دسترسی به همان رکورد نتونه اونو ویرایش یا حذف کنه. "
لطفا راهنمایی کنید. مچکرم