View Full Version : ROLLBACK
DlphIran
سه شنبه 31 شهریور 1388, 14:12 عصر
سلام
من يه برنامه به زبان دلفي دارم و با adoquery كار ميكنم كه به بانك اس كيو ال سرور 2000 متصل هست .
من توي برنامه بايد با كليك روي يك دكمه ،اطلاعات رو درون 4 جدول ذخيره كنم ، ممكنه در بين ذخيره اطلاعات مثلا جدول 3 پيغام خطايي ظاهر بشه (خطاي ظاهر شده به موارد استثناء مربوط نميشه ) بعد از ظاهر شدن پيام خطا و بازگشت به برنامه ،اطلاعات درون 2جدول اول ذخيره شده اند اما جدول سوم و چهارم اطلاعات ذخيره نشده اند ، البته اينم بگم كه اطلاعات چهار جدول بهم مربوط هستند .
در اين زمان چطور ميشه از rollback استفاده كرد تا اطلاعات ذخيره شده در جدول 1 و 2 ،حذف و كاربر دوباره اطلاعات رو درون هر 4 جدول ذخيره كنه.
بهنام بهمنی
سه شنبه 31 شهریور 1388, 14:58 عصر
شبيه دستور زير
BEGIN TRANSACTION OuterTran;
INSERT INTO TestTran1 VALUES (1, 'aaa');
INSERT INTO TestTran2 VALUES (2, 'bbb');
INSERT INTO TestTran3 VALUES (3, 'ccc');
COMMIT TRANSACTION OuterTran;
DlphIran
چهارشنبه 01 مهر 1388, 13:40 عصر
ميشه كامل توضيح بدين .
يه سوال هم دارم ،آيا براي افزايش سرعت بانك اطلاعاتي در محيط شبكه بايد از دستور commit بعد از ذخيره يا بروز رساني استفاده كرد؟
amir_alaki
چهارشنبه 01 مهر 1388, 15:51 عصر
با سلام
کافی از همون راهی که آقا بهنام گفتن برین حل میشه ، من نمونه کامل تر از اونو میزارم.
تو این کد کمترل خطا هم می تونین انجام بدین و هر کار دیگه که فکر میکنین باید انجام بشه
SET @Valid=1
Begin Tran T
Begin Try
Insert Into dbo.Bank
(
BAName,
BABranche,
BABrancheCode,
CDIdBankCity,
BAAdress
)
values
(
@BAName,
@BABranche,
@BABrancheCode,
@CDIdBankCity,
@BAAdress
)
Commit Tran T
End Try
Begin Catch
SET @Valid=0
Rollback Tran T
Return ;
End Catch
DlphIran
پنج شنبه 02 مهر 1388, 13:54 عصر
لطفا توضيح بدين ،من متوجه نمي شم .
اخه خطوط برنامه اي كه نوشتين به سوال من نمي خوره
اول بگم كه خطايي كه ممكنه رخ بده جزو موارد استثنا نيست ،
تيكه برنامه خيلي خلاصه شده مي زارم تا بهتر متوجه بشين
insert into table1 .....
insert into table2
اينجا ممكنه پيغام خطايي ظاهر بشه كه مثلا مقدار وارد شده از نوع اينتيجر نيست.
insert into table3
insert into table4
خوب برنامه متوقف ميشه ، اطلاعات درون جدول 1 و 2 ذخيره شده اند ، حال بايد اطلاعات درون جدول 1 و 2 حذف بشه تا كاربر بتونه به كار خود ادامه بده .
چطور بايد از دستور Rollback استفاده كنم و در كجاها
لطفا استفاده از دستور commit رو هم بگين كه براي اين 4 insert چطور مي تونم استفاده كنم.
amir_alaki
جمعه 03 مهر 1388, 10:48 صبح
باسلام
ببین اگه از همین کد استفاده کنی میتونی مشکلت حل بشه .
داستان اینه اگه در یکی از Insert ها خطایی هرنوع اتفاق افتاد نباید ، ادامه بده و عملیات قبلی رو هم باید برگردونه این کدی که فرستادم دقیقا همین کارو میکنه .
حالا من روی مثال خودت کد را عوض می کنم
Begin Tran T
Begin Try
insert into table1
insert into table2
insert into table 3
insert into table 4
Commit Tran T
End Try
Begin Catch
Rollback Tran T
Return ;
End Catch
اکه به هر دلیلی در خط های Insert خطا بده به قسمت Catch میره و عملیات همه Rollback میشن
اگه خطا اتفاق نیفته که عالیه و همه عمل ها Commit میشن.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.