Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

подавить показ сообщений об ошибках [access 2003]


anton773 ©   (2006-09-12 21:22:00) 

Здравствуйте! как подавить показ сообщений об ошибках.(ошибки обрабатывает моя программа)


Германн   (2006-09-15 01:51:00) [1]


> anton773 ©   (14.09.06 21:16) [10]
>
> А что есть варианты? try...except abort end; Что-то лучшее
> по моему здесь придумать сложно.
>

Именно тут ты и "вляпаешься"!
Имхо нужно так:
try
bla-bla-bla
except
 on что-то do...
 on что-то do...
а далее либо:
 else что-то
либо else raise;


Германн   (2006-09-15 01:38:00) [2]


> Anatoly Podgoretsky ©   (14.09.06 19:33) [9]
>
> Германн ©   (14.09.06 00:37) [8]
> А у него есть подобный код?
> А я о нем думал гораздо лучше.
>

Ну сами понимаете Анатолий, что "в лоб" такого кода у него нет. Во всяком случае я таких случаев не знаю.
Но есть код:
procedure TCustomWSocket.ASyncReceive(
   Error           : Word;
   MySocketOptions : TWSocketOptions);
var
   bMore  : Boolean;
   lCount : LongInt;
   TrashCan : array [0..1023] of char;
begin
   bMore := TRUE;
   while bMore do begin
       FLastError := 0;

       try
          if not TriggerDataAvailable(Error) then begin
              { Nothing wants to receive, we will receive and throw away  23/07/98 }
              if DoRecv(TrashCan, SizeOf(TrashCan), 0) = SOCKET_ERROR then begin
                  FLastError := WSocket_WSAGetLastError;
                  if FLastError = WSAEWOULDBLOCK then begin
                      FLastError := 0;
                      break;
                  end;
              end;
          end;

          { DLR Honor the socket options being passed as parameters }
          if wsoNoReceiveLoop in MySocketOptions then
              break;

          if FLastError <> 0 then
              bMore := FALSE
          {* Check if we have something new arrived, if yes, process it *}
          else if WSocket_ioctlsocket(FHSocket, FIONREAD,
                                      lCount) = SOCKET_ERROR then begin
              FLastError := WSocket_WSAGetLastError;
              bMore      := FALSE;
          end
          else if lCount = 0 then
              bMore := FALSE;
       except
          bMore := FALSE;
       end;
   end;
end;

Всё бы и ничего бы. Но в TriggerDataAvailable(Error) вызывается пользовательский обработчик OnXXXDataAvailable, в котором может возникнуть любоеисключение, вплоть до AV и иже с ним. Ведь пользуются этим компонентом в т.ч. и ламеры, вроде меня!
А ведь тут даже var параметр Error никак не используется.
И всё это у меня приводило к смерти программы без каких-бы то ни было сообщений об ошибках!
P.S. Код процитирован из
Description:  TWSocket class encapsulate the Windows Socket paradigm
Creation:     April 1996
Version:      4.30


anton773   (2006-09-14 21:16:00) [3]


> Если речь идёт об обработке ошибок возникающих не внутри
> "своего собственного кода", нужно очень много знать и очень
> тщательно продумать, прежде чем пойти на try..except.

А что есть варианты? try...except abort end;Что-то лучшее по моему здесь придумать сложно.


Anatoly Podgoretsky   (2006-09-14 19:33:00) [4]

Германн ©   (14.09.06 00:37) [8]
А у него есть подобный код?
А я о нем думал гораздо лучше.


Германн   (2006-09-14 00:37:00) [5]


> Anatoly Podgoretsky ©   (13.09.06 23:23) [7]
>
> Германн ©   (13.09.06 22:57) [6]
> Ни разу не делал.
>

А я насчет Вас Анатолий и не сомневался :-)
Но тот, кого я имел ввиду Вам точно известен! Это некий житель Бельгии, который за свои компоненты не требует денег, а только почтовую открытку с видами местности, где живет пользователь. И который, по Вашим словам, в своё время отказался продать Borland'у свою библиотеку компонентов.


Anatoly Podgoretsky   (2006-09-13 23:23:00) [6]

Германн ©   (13.09.06 22:57) [6]
Ни разу не делал.


Германн   (2006-09-13 22:57:00) [7]


> Desdechado ©   (13.09.06 21:53) [5]
>
> Германн ©   (13.09.06 02:26) [4]
> Взялся дополнять, скажи тогда "прежде чем пойти на try..
> except end;" с пустым except-end. Это действительно глупо
> будет.
>

Ну я вообще-то смотрел на вопрос шире. Кроме того try.. except end; с пустым except-end.- это диверсия. Хотя даже очень известные и уважаемые люди делают такие глупости.


Desdechado   (2006-09-13 21:53:00) [8]

Германн ©   (13.09.06 02:26) [4]
Взялся дополнять, скажи тогда "прежде чем пойти на try.. except end;" с пустым except-end. Это действительно глупо будет.


Германн   (2006-09-13 02:26:00) [9]

Дополню

> Anatoly Podgoretsky ©   (13.09.06 00:34) [3]

надеюсь АП не обидится! :-)
Очень умно "засовывать голову в песок", но задница-то при этом всё равно торчит!
Если речь идёт об обработке ошибок возникающих не внутри "своего собственного кода", нужно очень много знать и очень тщательно продумать, прежде чем пойти на try..except.


Anatoly Podgoretsky   (2006-09-13 00:34:00) [10]

Это умно, голову в песок.


anton773   (2006-09-12 21:34:00) [11]

Спасибо! почему- то не пришло в голову ;-)


Desdechado   (2006-09-12 21:26:00) [12]

try - except


Наверх

Титульная страница Поиск, карта сайта Написать письмо