ورود

View Full Version : rollback



DlphIran
دوشنبه 30 شهریور 1388, 14:12 عصر
سلام دوستان

من تو برنامه ام در هنگام ذخيره اطلاعات پس از زدن دكمه اينتر، اطلاعات درون چهار جدول به ترتيب به شماره هاي 1 و 2و 3و 4 ذخيره مي شوند .

سوال من اينه : اگه در هنگام ذخيره اطلاعات جدول 2 يا 3 يا 4 خطا رخ بده (البته نه از نوع موارد استثناء) و ‌برنامه متوقف بشه ، چطور مي تونيم به عقب بر گرديم ؟يعني اطلاعات ذخيره شده در جدول(هاي) قبلي رو حذف كرد. بخاطر اينكه اطلاعات جدولها مرتب به هم هستن و بايد اطلاعات وارد هر چهار جدول شوند.
بعنوان مثال در هنگامي كه برنامه به ذخيره اطلاعات جدول 3 ميرسد ،‌بعد از اينكه پيغام خطايي ظاهر شد ،‌برنامه متوقف مي شود و براي اجراي مجدد پس از حل مشكل بايد دوباره عمليات ذخيره با زدن اينتر صورت بگيره اما در اين حالت درون جدول 1 و 2 اطلاعات تكراري وارد ميشه.

اين مشكل به ظاهر مربوط به پردازش استثناء ها هست اما استثنائي كه تعريف نشده ،‌مثلا بجاي ورود اطلاعات عددي اطلاعات ناشناس وارد شود مثل خط تيره

آيا استفاده از دستور rollback مشكل رو حل ميكنه يا نه ،‌البته من فقط اسم اين دستور رو شنيده ام و اطلاعات ديگه اي ازش ندارم .لطفا راهنماييم كنيد ،‌

DlphIran
سه شنبه 31 شهریور 1388, 10:14 صبح
کسی نمی تونه مشکل من رو حل کنه

delphiprog3000
جمعه 03 مهر 1388, 01:18 صبح
با سلام. متوجه منظور شما شدم.

سوالم اینه آیا شناسه مشابهی یا index خاصی در جداول مشترک هست؟

merced
جمعه 03 مهر 1388, 05:21 صبح
ADOConnection1.BeginTrans ;
try
...
ADOTable1.Post ;
ADOTable4.Post ;
ADOTable2.Post ;
ADOTable3.Post ;

ADOConnection1.CommitTrans ;

except
ADOConnection1.RollbackTrans ;
end ;

DlphIran
جمعه 03 مهر 1388, 10:57 صبح
try ... except فقط مي تونه خطاي موارد استثنا رو كنترل كنه.
من مي خوام اگه به هر دليل ،‌مثلا پيام خطاي مقداري وارد شده از نوع اينتيجر نيست رو هم نشون بده ،‌در اين حالت كه توي مثلا 2 تا جدول اطلاعات وارد شده و پيام خطا ظاهر شده ،‌براي ادامه كار بايد آخرين اطلاعاتي كه قبل از ظاهر شدن پيغام خطا ذخيره شده اند از دو جدول اول حذف بشه و با ادامه كار اطلاعات درون هر چهار جدول ذخيره بشن.

من يه جايي شنيدم از rollback براي بازگشت تمام كارهاي بانك اطلاعاتي بصورت يك مرحله به عقب ميشه استفاده كرد ولي نمي دونم چطور ميشه استفاده كرد

vcldeveloper
جمعه 03 مهر 1388, 12:35 عصر
try ... except فقط مي تونه خطاي موارد استثنا رو كنترل كنه.
من مي خوام اگه به هر دليل ،‌مثلا پيام خطاي مقداري وارد شده از نوع اينتيجر نيست رو هم نشون بده
تمام اینها میشه Exception. بلوک try-except تمامی خطاهای برنامه میگیره.

merced
جمعه 03 مهر 1388, 13:07 عصر
try ... except
من يه جايي شنيدم از rollback براي بازگشت تمام كارهاي بانك اطلاعاتي بصورت يك مرحله به عقب ميشه استفاده كرد ولي نمي دونم چطور ميشه استفاده كرد


BeginTrans :: شروع يك مرحله

CommitTrans‌:‌:‌ تاييد و تثيبت مرحله جاري !

RollbakTrans‌‌‌ ::‌ برگشتن به وضعيت قبل از شروع مرحله جاري