Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вложенный try / 25 сообщений из 32, страница 1 из 2
03.04.2003, 16:03
    #32132898
bigman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный try
Здравствуйте !!
Есть некий блок кода :


try

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

end;


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

Код: 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
03.04.2003, 16:11
    #32132905
bigman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный try
ну а я как написал !!
так же :))
просто я не стал нагружать кодом !!
...
Рейтинг: 0 / 0
03.04.2003, 16:23
    #32132924
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный try
Нет, ну отличия то есть, ты создаешь новое исключение с классом TException, а я делаю reraise для возникшего исключения. А обработчик TApplication.OnException у тебя есть?
...
Рейтинг: 0 / 0
03.04.2003, 17:06
    #32132935
bigman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный try
TApplication.Exception у меня нет
И как ты посоветовал, тоже не работает :(
...
Рейтинг: 0 / 0
03.04.2003, 17:11
    #32132943
bigman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный try
кстати в "твоем" случае Raise вообще ничего не пытается даже показать.
Except честно перехватывает ошибку и все ...
А в моем случае эта ошибка показывается в отладчике но не на мониторе ...
...
Рейтинг: 0 / 0
03.04.2003, 17:15
    #32132950
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный try
Положи на главную форму компонент TApplicationEvents и в обработчике события OnException напиши:

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

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


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


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

насчитал 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
03.04.2003, 17:48
    #32132998
bigman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный try
самое интересное, что тогда транзакция откатывается и userы начинают меня убивать ....
...
Рейтинг: 0 / 0
03.04.2003, 18:31
    #32133042
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный try
Правильно - а еще лучше повесить :)

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


ЗЫ Нет, придется все же книгу писать :)
...
Рейтинг: 0 / 0
03.04.2003, 18:33
    #32133044
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный try
Блин, ну ты намелчил. Че с форматированием то не сделал. Самый главный вопрос. Почему ты всю эту обработку делаешь на клиенте. Ей прямое направление на сервер.
...
Рейтинг: 0 / 0
03.04.2003, 19:19
    #32133073
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный try
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
03.04.2003, 21:12
    #32133117
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный try
Tygra
И начнешь ты ее (книгу), как всегда.
"Ну сколько раз вам можно объяснять..."
...
Рейтинг: 0 / 0
04.04.2003, 09:45
    #32133253
bigman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный try
ну это еще не все ....
а когда куча хранимых процедур, то тогда и еще писать одну с общей транзакцией ??
не уж спасибо
лучше я их вызову из клиента в одной транзакции ...
но это все не по существу вопроса ....
try в любом случае не работает :)
...
Рейтинг: 0 / 0
04.04.2003, 09:50
    #32133258
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный try
2 bigman

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


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

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


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

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


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


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
04.04.2003, 09:57
    #32133265
bigman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный try
и еще по поводу трназакций ....

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

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

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

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


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

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


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

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

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

А по поводу Ну сколько раз вам можно объяснять - конечно, для чего же книги пишутся :)
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вложенный try / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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