powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вложенный try
32 сообщений из 32, показаны все 2 страниц
Вложенный try
    #32132898
bigman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте !!
Есть некий блок кода :


try

try
except
on E: Exception do
begin
Raise Exception.Create(E.Message);
end;
end;
finally

end;


С великим удивлением обнаружил, что Exception генерится, но не показывается на мониторе, хотя в отладчике видно честно и затем честно отрабатывается блок finally ....
Или я не прав ?
...
Рейтинг: 0 / 0
Вложенный try
    #32132903
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычно так пишут

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
try 
...
  try 
...  
  except 
    on E: Exception do begin 
      ...
      raise
    end; 
  end; 
finally 

end;
...
Рейтинг: 0 / 0
Вложенный try
    #32132905
bigman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну а я как написал !!
так же :))
просто я не стал нагружать кодом !!
...
Рейтинг: 0 / 0
Вложенный try
    #32132924
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, ну отличия то есть, ты создаешь новое исключение с классом TException, а я делаю reraise для возникшего исключения. А обработчик TApplication.OnException у тебя есть?
...
Рейтинг: 0 / 0
Вложенный try
    #32132935
bigman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TApplication.Exception у меня нет
И как ты посоветовал, тоже не работает :(
...
Рейтинг: 0 / 0
Вложенный try
    #32132943
bigman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати в "твоем" случае Raise вообще ничего не пытается даже показать.
Except честно перехватывает ошибку и все ...
А в моем случае эта ошибка показывается в отладчике но не на мониторе ...
...
Рейтинг: 0 / 0
Вложенный try
    #32132950
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Положи на главную форму компонент TApplicationEvents и в обработчике события OnException напиши:

Код: plaintext
1.
2.
3.
procedure TfrmMDI.AppEventsException(Sender: TObject; E: Exception);
begin
  Application.ShowException(E);
end;

И теперь проверь.
...
Рейтинг: 0 / 0
Вложенный try
    #32132961
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати в "твоем" случае Raise вообще ничего не пытается даже показать.
Except честно перехватывает ошибку и все ...
А в моем случае эта ошибка показывается в отладчике но не на мониторе ...


Не уж то и finally не заходит?
...
Рейтинг: 0 / 0
Вложенный try
    #32132966
bigman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно но он даже не вызвался.
Я тут еще два try нашел выше.
Всего получилось 6.
Если все закоментарить, то exception показывается ...
...
Рейтинг: 0 / 0
Вложенный try
    #32132967
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут еще два try нашел выше.
Всего получилось 6.


Эт нафига их так много, давайвесь код. Интересно стало.
...
Рейтинг: 0 / 0
Вложенный try
    #32132968
bigman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в том то дело что доходит ...
но предыдущего exception тютю
...
Рейтинг: 0 / 0
Вложенный try
    #32132984
bigman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только сильно ногами не бейте :)

насчитал 4:
1. try/finally - BeginTrans/Rollback
2. BitBtn1.OnClick := Nil; / BitBtn1.OnClick := BitBtn1Click;
3. try/finally Обработка формы функции FormWait
4. сама обработка ошибки передачи



try
Form1.ADO.BeginTrans;
try
BitBtn1.OnClick := Nil;
StartWait;
With QLocal do
begin
First;
While Not Eof do
begin
If DateIndex.IndexOf(QLocal.Fields.AsString) <> -1 then
begin
try
FormWait(0,'ПЕРЕДАЧА ДАННЫХ ЗА '+QLocal.Fields.AsString,False);
Application.ProcessMessages;
....
Close;
Sql.Clear;
Sql.Add('EXEC AddKartDate ');
try
Application.ProcessMessages;
Open;
If Fields[0].AsInteger <> 0 then
begin
StopWait;
Raise Exception.Create(' Ошибка передачи !!! Код ошибки: '+Fields[0].AsString);
end;
except
on E: Exception do
begin
StopWait;
Raise Exception.Create('ОШИБКА ВЫПОЛНЕНИЯ '+E.Message);
end;
end;
finally
FormWait(1,'ПЕРЕДАЧА ДАННЫХ ЗА '+Fields.AsString,False);
end;
end;
Next;
end;
end;
finally
BitBtn1.OnClick := BitBtn1Click;
StopWait;
end;
Form1.ADO.CommitTrans;
Form1.Memo.Lines.Add('OK');
Form1.Memo.Lines.Add(Chr(13)+Chr(10)+'Время завершения '+TimeToStr(Now));
ShowMessage('ГОТОВО !!!');
except
Form1.ADO.RollbackTrans;
end;
...
Рейтинг: 0 / 0
Вложенный try
    #32132998
bigman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
самое интересное, что тогда транзакция откатывается и userы начинают меня убивать ....
...
Рейтинг: 0 / 0
Вложенный try
    #32133042
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно - а еще лучше повесить :)

Нахрена ты из клиента транзакции вызываешь?
Напиши хранимую процедуру на сервере, в ней и открывай/закрывай транзакции. А уж из клиента просто вызывай ХП и все.


ЗЫ Нет, придется все же книгу писать :)
...
Рейтинг: 0 / 0
Вложенный try
    #32133044
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, ну ты намелчил. Че с форматированием то не сделал. Самый главный вопрос. Почему ты всю эту обработку делаешь на клиенте. Ей прямое направление на сервер.
...
Рейтинг: 0 / 0
Вложенный try
    #32133073
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 bigman

Вот тебе для примера кусок кода, которым я закрываю склады материального учета.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
...
try
  case StrucAttrib of
     15 : dmUMC.uspCloseUMC.ParamByName('@TaskID').AsInteger :=  7 ;
     17 : dmUMC.uspCloseUMC.ParamByName('@TaskID').AsInteger :=  13 ;
     18 : dmUMC.uspCloseUMC.ParamByName('@TaskID').AsInteger :=  14 ;
  end;
  dmUMC.uspCloseUMC.ParamByName('@Period').AsDateTime := Period;
  dmUMC.uspCloseUMC.ExecProc;
except
  on E: Exception do
    ShowDBError('Не удается произвести закрытие!', E);
end;
...


Обрати внимание. Всего один обработчик исключительной ситуации. Никаких транзакций с клиента. А в процедуре на самом деле куча данных перемалывается.

2 tygra на счет книги

Слушай, пора писать. Я уже и название придумал. :-)

Delphi & MS SQL Server.
Профессиональная разработка приложений в архитектуре клиент/сервер.
...
Рейтинг: 0 / 0
Вложенный try
    #32133117
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tygra
И начнешь ты ее (книгу), как всегда.
"Ну сколько раз вам можно объяснять..."
...
Рейтинг: 0 / 0
Вложенный try
    #32133253
bigman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну это еще не все ....
а когда куча хранимых процедур, то тогда и еще писать одну с общей транзакцией ??
не уж спасибо
лучше я их вызову из клиента в одной транзакции ...
но это все не по существу вопроса ....
try в любом случае не работает :)
...
Рейтинг: 0 / 0
Вложенный try
    #32133258
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 bigman

ну это еще не все ....
а когда куча хранимых процедур, то тогда и еще писать одну с общей транзакцией ??


А ты как думал. Данные то у тебя на сервере, там с ними и надо работать.

не уж спасибо
лучше я их вызову из клиента в одной транзакции ...


Никогда так не делай. Послушайся совета. Геморой в этом случаи обеспечен.

но это все не по существу вопроса ....
try в любом случае не работает :)


Да все работает. Обработчик то написал?
...
Рейтинг: 0 / 0
Вложенный try
    #32133260
bigman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а то не обработчик типа ...


try
Application.ProcessMessages;
Open;
If Fields[0].AsInteger <> 0 then
begin
StopWait;
Raise Exception.Create(' Ошибка передачи !!! Код ошибки: '+Fields[0].AsString);
end;
except
on E: Exception do
begin
StopWait;
Raise Exception.Create('ОШИБКА ВЫПОЛНЕНИЯ '+E.Message);
end;
end;
...
Рейтинг: 0 / 0
Вложенный try
    #32133265
bigman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и еще по поводу трназакций ....

во первых все данные обрабатываются на сервере а главная транзакция клиента решает применить все или нет ...
очень удобно
во вторых когда куча разношерстных процедур то надо 50 параметров передавть туда с клинета
в третьих когда налету добавляются процедуры (в лучшем случае)

кто что скажет против ?
...
Рейтинг: 0 / 0
Вложенный try
    #32133271
bigman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я сначала тоже передавал параметры по "науке" через pararms
но как показала практика очень часто выскакивали совершенно бредовые сообщения по поводу этих самих же параметров, особенно выходных ...
и тогда я плюнул на все эти параметры ...
...
Рейтинг: 0 / 0
Вложенный try
    #32133273
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тебе уже писал, какой обработчик и куда надо добавить, чтоб эксэпшен вылетал.

Положи на главную форму компонент TApplicationEvents и в обработчике события OnException напиши:

Код: plaintext
1.
2.
3.
procedure TfrmMDI.AppEventsException(Sender: TObject; E: Exception);
begin
  Application.ShowException(E);
end;


во первых все данные обрабатываются на сервере а главная транзакция клиента решает применить все или нет ...
очень удобно
во вторых когда куча разношерстных процедур то надо 50 параметров передавть туда с клинета
в третьих когда налету добавляются процедуры (в лучшем случае)

кто что скажет против ?


Я скажу ПРОТИВ . Я уже замучился учить тебя, как надо делать, а как не надо.
...
Рейтинг: 0 / 0
Вложенный try
    #32133310
bigman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а я уже писал, что ЭТО ТОЖЕ НЕ РАБОТАЕТ !!!
...
Рейтинг: 0 / 0
Вложенный try
    #32133311
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 pkarklin

У меня через месяц времени побольше будет лишнего, вот тогда и начнем книгу писать.

Продавать будем, разбогатеем :)

А по поводу Ну сколько раз вам можно объяснять - конечно, для чего же книги пишутся :)
...
Рейтинг: 0 / 0
Вложенный try
    #32133523
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 tygra

У меня через месяц времени побольше будет лишнего, вот тогда и начнем книгу писать.

Давай, как освободишься, начнем. :-)
...
Рейтинг: 0 / 0
Вложенный try
    #32133626
nicnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bigman
У тебя конечный except все эксепшионы давит:
except
Form1.ADO.RollbackTrans;
end;
...
Рейтинг: 0 / 0
Вложенный try
    #32133658
bigman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nicnic

почему ? ведь они должны отрабатывать по цепочке ?
...
Рейтинг: 0 / 0
Вложенный try
    #32133665
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все правильно. Если надо обработать дальше, то добавь raise
...
Рейтинг: 0 / 0
Вложенный try
    #32133669
bigman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все спасибо, а в особенности nicnic
...
Рейтинг: 0 / 0
Вложенный try
    #32133878
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для того, чтобы видеть на экране Exception свои для этого надо вырубить exceptiob Delphi-ские Tools->Debugger Options->Language Exceptions->Stop on Delphi Exceptions
...
Рейтинг: 0 / 0
Вложенный try
    #32135884
Фотография MalkoLinge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое главное Try Except от Try Finally отличаються еще тем, что первый "глушит" исключение, в случае его обработки а второй НЕТ. Поэтомоу если в модуле try Finally возникнет исключение, то обрабатываться оно будет ЗА его пределами :)
...
Рейтинг: 0 / 0
32 сообщений из 32, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вложенный try
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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