PDA

View Full Version : Transaction ها در شبكه



nedata
پنج شنبه 22 مرداد 1388, 14:58 عصر
سلام
يك برنامه اي دارم كه تحت شبكه كار مي كند. در اين برنامه از Transaction استفاده كردم. در صورتيكه چند كاربر با هم قصد اصلاح يا اضافه در يكي از جداول را داشته باشد يكي از آنها در حالت Busy قرار مي گيرد و تا زمانيكه كاربر اولين كاربر خارج نشود كس ديگري قادر به انجام كاري نمي باشد.
در اين برنامه از دلفي و sql server 2000 استفاده مي كنم.
ممنون

vcldeveloper
پنج شنبه 22 مرداد 1388, 15:56 عصر
خب، حالا مشکل چیه؟

nedata
جمعه 23 مرداد 1388, 18:26 عصر
ممنون از توجهتون
مشكل اينجاست كه من مي خوام تمام كاربران با هم همزمان بتونند كار كنند هيچ كس كارش وابسته به ديگري نباشد يعني اگر كاربر1 قصد اصلاح دارد انجام دهد و در همين زمان هم اگر كاربر2 قصد انجام كاري را دارد بدون منتظر بودن پايان كار كاربر 1 كارش را انجام دهد.در حال حاضر برنامه اينگونه است كه كاربر1 عمل اصلاح را تا تكميل نكند هيچ كاربر ديگري نمي تواند به كارش پايان دهد به طوريكه به صورت Busy مي شود تا كاربر 1 كارش انجام شود

vcldeveloper
جمعه 23 مرداد 1388, 19:18 عصر
خب چرا از Transaction استفاده کردید؟ تا زمانی که Transaction کامل نشده، رکوردهایی که توسط آن تغییر کردند قفل هستند. البته میشه به دیتابیس گفت که در زمان کار Transaction هم اجازه دسترسی به رکورد ها را بده، ولی این کار چندان با مفهوم استفاده از Transaction سازگار نیست.

برای اینکه سایر کاربران بتونند بدون مشکل با رکورد در حال ویرایش کار کنند، باید از ltOptimistic به عنوان LockType مربوط به Dataset خودتان استفاده کنید.

nedata
شنبه 24 مرداد 1388, 08:45 صبح
بازهم ممنون اما در اين پروژه از Sdac استفاده مي شود.
به غير از Transaction از چه چيز ديگري مي توان استفاده كرد؟

vcldeveloper
یک شنبه 25 مرداد 1388, 00:02 صبح
به غير از Transaction از چه چيز ديگري مي توان استفاده كرد؟
شما اول توضیح بدید که هدفتان از استفاده از Transaction چی بوده، تا بعد بشه جایگزینی معرفی کرد.

nedata
یک شنبه 25 مرداد 1388, 08:33 صبح
در اين پروژه چند جدول باهم ارتباط دارند كه يك سري اطلاعات در اين جداول وارد مي شود من ميخواهم وقتي كه دكمه ثبت را مي زند اطلاعات ثبت شود اما اگر انصراف داد تمام تغييرات به حالت اول برگردد

vcldeveloper
چهارشنبه 28 مرداد 1388, 02:19 صبح
در اين پروژه چند جدول باهم ارتباط دارند كه يك سري اطلاعات در اين جداول وارد مي شود من ميخواهم وقتي كه دكمه ثبت را مي زند اطلاعات ثبت شود اما اگر انصراف داد تمام تغييرات به حالت اول برگردد

می تونید بجای استفاده از Transaction، از حالت BatchOptimistic برای LockType استفاده کنید. به این ترتیب، با ویرایش داده ها چیزی روی بانک ثبت نمیشه، تا زمانی که شما متد UpdateBatch را فراخوانی کنید.

nedata
دوشنبه 09 شهریور 1388, 09:03 صبح
بازهم ممنون از توجهتون
با توجه به اينكه در اين پروژه از sdac استفاده مي شود UpdateBatch را پيدا نكردم. اگر امكان دارد لطفا يك مثال كوچك بزنيد
ممنون

vcldeveloper
دوشنبه 09 شهریور 1388, 23:50 عصر
با توجه به اينكه در اين پروژه از sdac استفاده مي شود UpdateBatch را پيدا نكردم. اگر امكان دارد لطفا يك مثال كوچك بزنيد
در SDAC از ApplyUpdate استفاده کنید. البته باید خصوصیت CachedUpdates مربوط به اون دیتاست را True کرده باشید. در راهنمای SDAC بطور مفصل درباره CachedUpdates و ApplyUpdates توضیح داده شده.