Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проверка кода на успешное выполнение до этого / 7 сообщений из 7, страница 1 из 1
20.02.2019, 11:03
    #39776623
elimpion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка кода на успешное выполнение до этого
Всем привет, задача такая если в "часть1" возникает ошибка сохранения, то "часть2" не должна выполнятся, я решил что это можно сделать так: при ошибке сохранения присваиваем переменной res := -1, а в "части2" проверяем чему равна эта переменная. Вопрос, правильна ли такая реализация будет? "Строка 1", "Строка 2" "Строка 3", во всех ли строках нужно переменной res присваивать значение, или можно в одной какой то строке присвоить значение?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
//////////// часть1
if ... then begin
  try
    if ... then begin
	  if ... then begin
	    if ... then begin
          TransMgr[FQI.DataBase].Commit;
          self.Close;
		end else begin
		  res := -1; //строка 1
          TransMgr[FQI.DataBase].RollBack;
          ShowError('Ошибка сохранения'); 
		end;
	  end else begin
        TransMgr[FQI.DataBase].Commit;
        self.Close;
      end;
    end else begin
	  res := -1; //строка 2
      TransMgr[FQI.DataBase].RollBack;
      ShowError('Ошибка сохранения');  
    end;
  except
    on E:Exception do begin
	  res := -1; //строка 3
      TransMgr[FQI.DataBase].RollBack;
      ShowError('Ошибка сохранения'+E.Message); 
    end;
  end;
end;
////////////// часть 2
if res <> -1 then begin
...
TransMgr[FQI.DataBase].Commit;
else 
exit;
...
Рейтинг: 0 / 0
20.02.2019, 11:17
    #39776629
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка кода на успешное выполнение до этого
elimpionзадача такая если в "часть1" возникает ошибка сохранения, то "часть2" не должна выполнятся
Код: pascal
1.
2.
3.
4.
5.
try
  Задача1;
  Задача2;
except
end;


Задача2 не выполнится, если при выполнении Задача1 произойдет ошибка.
...
Рейтинг: 0 / 0
20.02.2019, 11:18
    #39776631
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка кода на успешное выполнение до этого
elimpion,

просто проверить if Transaction.Active then Transaction.Commit?
...
Рейтинг: 0 / 0
20.02.2019, 11:37
    #39776645
elimpion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка кода на успешное выполнение до этого
wadman,
спасибо такой вариант работает
...
Рейтинг: 0 / 0
20.02.2019, 11:38
    #39776647
elimpion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка кода на успешное выполнение до этого
makhaon,

можете объяснить как работает этот код в текущей реализации?
...
Рейтинг: 0 / 0
20.02.2019, 13:53
    #39776731
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка кода на успешное выполнение до этого
elimpion,

у тебя есть некая транзакция которая либо активная либо нет. безотносительно конкретной компоненты. если транзакцию откатили или не начали, значит она не активная и подтверждать соответственно нечего. если активная - значит подтверждаем. без всяких флагов.
...
Рейтинг: 0 / 0
20.02.2019, 17:10
    #39776852
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка кода на успешное выполнение до этого
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Transaction.StartTransaction;
try
  if not Condition1 then
    raise Exception.Create('Condition1 failed');
  if not Condition2 then
    raise Exception.Create('Condition2 failed');
  Save;
  Transaction.Commit;
  Close;
except
  on E: Exception do begin
    Transaction.Rollback;
    ShowError('Ошибка сохранения: ' + E.Message); 
  end;
end;
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проверка кода на успешное выполнение до этого / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]