powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Обработка исключений
15 сообщений из 15, страница 1 из 1
Обработка исключений
    #37190424
EmilRegis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Сразу оговорюсь, я с вижлбейсиком раньше почти не сталкивался, но вот пришлось..

Порылся в интернете и такое впечатление, что нету в нём толковой обработки ошибок!!
То есть всё, что нашёл - это или
Код: plaintext
1.
2.
3.
4.
5.
6.
On Error Resume Next

...
Select case Err.Number

и дальше перебор кодов ошибок
или
Код: plaintext
1.
On Error GoTo Error1
То есть при ошибке посылаем к оставленной метке.
Но вот у меня задача в цикле выполнять определённые действия и при ошибке записывать эту ошибку, а если всё ок, то записывать результат выполнения функции.
Так вот, я не возьму в толк, как при такой обработке ошибок быть? Если оставить метку вне цикла, то при ошибке из цикла вылетает естественно, но нужно, чтобы цикл работал дальше.
Если использую Resume Next, то цикл отрабатывает, но обработки ошибок не происходит. Заранее скажу, что всех возможных кодов ошибок я не знаю и хотелось бы повесить один обработчик на любую возможную ошибку.

Как быть подскажите пожалуйста?
...
Рейтинг: 0 / 0
Обработка исключений
    #37190438
EmilRegis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм...разве что при ошибке посылать к метке вне цикла, там выполнять нужные действия, а потом посылать к метке в самом конце цикла...
Но кажется будто это как-то через одно место))
...
Рейтинг: 0 / 0
Обработка исключений
    #37190470
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EmilRegisЕсли использую Resume Next, то цикл отрабатывает, но обработки ошибок не происходит.
В вашем случае логичнее использовать первый вариант, а почему "обработки ошибок не происходит" мы без приведения вашего кода не угадаем.
...
Рейтинг: 0 / 0
Обработка исключений
    #37190471
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProEmilRegisЕсли использую Resume Next, то цикл отрабатывает, но обработки ошибок не происходит.
В вашем случае логичнее использовать первый вариант, а почему "обработки ошибок не происходит" мы без приведения вашего кода не угадаем.

Надо помнить, что Err.Number нужно анализировать СРАЗУ после возможной строки с ошибкой, иначе последующие выполняемые операции без ошибок сбрасывают его в 0
...
Рейтинг: 0 / 0
Обработка исключений
    #37190488
EmilRegis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вот примерный код

Код: plaintext
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.
Sub Main
  On Error GoTo Err
  Dim ResultSet,contxt,basa,Connection,Statement,InteractionHandler
  Dim n, i, sShow

  oSheet = ThisComponent.getSheets().getByIndex( 0 )
  contxt = CreateUnoService("com.sun.star.sdb.DatabaseContext")
  basa = contxt.getByName( "postgkh" )
  InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler") 
  Connection = basa.ConnectWithCompletion(InteractionHandler)
  Statement = Connection.CreateStatement
  i =  0 
  err =  0 
  for n =  1  to  100 
    i = i +  1 
 	oCell=oSheet.getCellByPosition( 1 ,n)
	ResultSet = Statement.executeQuery(oCell.String)
	WriteResult(ResultSet, i)
	nextstep:	
  next n
  Exit Sub
  Err: 
    oSheet2 = ThisComponent.getSheets().getByIndex( 1 )
	oCell=oSheet2.getCellByPosition( 1 ,i)
        oCell.String="Ошибка"
	GoTo nextstep
End sub
Если использовать первый вариант Resume Next, то там насколько я понял ошибки надо обрабатывать с помощью
Select Case Err.Number

End Select

но тут надо знать всевозможные коды ошибок. А мне надо один обработчик на все возможные ошибки повесить. Если использовать Resume Next без Err.Number, то ошибка просто пролетает и переходит к очередной итерации цикла
...
Рейтинг: 0 / 0
Обработка исключений
    #37190494
EmilRegis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати в приведённом примере несмотря на обработчик, который я повесил, исключение вылетает на строчке
ResultSet = Statement.executeQuery(oCell.String)
если туда передаётся sql процедура с ошибочным числом параметров
...
Рейтинг: 0 / 0
Обработка исключений
    #37190501
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EmilRegisно тут надо знать всевозможные коды ошибок.
Зачем?
Код: plaintext
If Err.Number<> 0  Then Msgbox Err.Descriptions
...
Рейтинг: 0 / 0
Обработка исключений
    #37190506
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EmilRegisну вот примерный код
Код неверный, потому что возврат из обработчика ошибок должен осуществляться командой Resume, а не Goto
...
Рейтинг: 0 / 0
Обработка исключений
    #37190521
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EmilRegis

в VB Tools-Option-General
для обработчика ошибки выбери последнее

может поможет при вызове sql
...
Рейтинг: 0 / 0
Обработка исключений
    #37190548
EmilRegis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага,спасибо добрые люди) попробую)
...
Рейтинг: 0 / 0
Обработка исключений
    #37190553
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы как-то так сделал

Код: plaintext
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.
Sub Main
  'On Error GoTo Err
  Dim ResultSet,contxt,basa,Connection,Statement,InteractionHandler
  Dim n, i, sShow

  oSheet = ThisComponent.getSheets().getByIndex( 0 )
  contxt = CreateUnoService("com.sun.star.sdb.DatabaseContext")
  basa = contxt.getByName( "postgkh" )
  InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler") 
  Connection = basa.ConnectWithCompletion(InteractionHandler)
  Statement = Connection.CreateStatement
  i =  0 
  err =  0 
  for n =  1  to  100 
    i = i +  1 
 	oCell=oSheet.getCellByPosition( 1 ,n)
	On Error Resume Next
           ResultSet = Statement.executeQuery(oCell.String)
           If Err.Number <>  0  Then
             oSheet2 = ThisComponent.getSheets().getByIndex( 1 )
             oCell=oSheet2.getCellByPosition( 1 ,i)
             oCell.String="Ошибка"
           Else
             WriteResult(ResultSet, i)
           End If
        On Error GoTo  0 
  next n
End sub
...
Рейтинг: 0 / 0
Обработка исключений
    #37190554
basicv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EmilRegisНо вот у меня задача в цикле выполнять определённые действия и при ошибке записывать эту ошибку, а если всё ок, то записывать результат выполнения функции.


В подобных случаях я поступал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub Main
  On Error GoTo Err
    ...
  Exit Sub
  Err: 
    MsgBox("Error")
    Resume Next
  End sub

...
Рейтинг: 0 / 0
Обработка исключений
    #37190633
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProShocker.Proпропущено...

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

Надо помнить, что Err.Number нужно анализировать СРАЗУ после возможной строки с ошибкой, иначе последующие выполняемые операции без ошибок сбрасывают его в 0 Откуда эта деза? Сбрасывает только err.clear или другой on error.
...
Рейтинг: 0 / 0
Обработка исключений
    #37190644
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proя бы как-то так сделалМало. До цикла происходит куча объектных вызовов, любой из которых теоретически может завершиться ошибкой. В начале нужно on error goto.
...
Рейтинг: 0 / 0
Обработка исключений
    #37190727
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyShocker.Proя бы как-то так сделалМало. До цикла происходит куча объектных вызовов, любой из которых теоретически может завершиться ошибкой. В начале нужно on error goto.
Я дорабатывал код автора. Его код предполагает ошибку на выполнении запроса - ее я и отследил. Остальное сам додумает, после тех ошибок резюмирование явно не требуется, так как ошибки будут фатальными.

Насчет сброса кода ошибки... возможно я спутал с кое-чем еще. Проверять лень, верю на слово.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Обработка исключений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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