www.map-info.ru :: Просмотр темы - Обработчик ошибок
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
Alex_47



Зарегистрирован: 01.07.2009
Сообщения: 66
Откуда: Н.Новгород

СообщениеДобавлено: Вт Фев 02, 2010 7:47 pm    Заголовок сообщения: Обработчик ошибок Добавить ответ со ссылкой на данный текст

Здравствуйте!!! Подскажите, пожалуйста, почему вот так работает
________________________________________________________
Dim put_ As String
OnError GoTo no_states
Open Table "states"

no_states:
put_=FileOpenDlg("","","TAB","Открытие таблицы states ")
resume after_mapfrom

after_mapfrom:
OnError GoTo 0
...
End Program
________________________________________________________
А так уже нет
________________________________________________________
Dim put_ As String
OnError GoTo no_states
Open Table "states"

no_states:
put_=FileOpenDlg("","","TAB","Открытие таблицы states ")
Open Table put_
resume after_mapfrom

after_mapfrom:
OnError GoTo 0
...
End Program
________________________________________________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
FedorinoFF



Зарегистрирован: 01.02.2007
Сообщения: 272
Откуда: Санкт-Петербург

СообщениеДобавлено: Ср Фев 03, 2010 12:08 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

было бы полезным озвучить что именно не работает или работает не так.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alex_47



Зарегистрирован: 01.07.2009
Сообщения: 66
Откуда: Н.Новгород

СообщениеДобавлено: Ср Фев 03, 2010 7:55 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Если при обработке ошибки стоит оператор OPEN TABLE, то насколько я понял таблица не открывается и выполнение программы переходит в начало, а не на метку и после этого выдает ошибку «Таблица states не найдена. Таблицу states открыть не удалось». А если не открывать таблицу то ошибки нет.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Чт Фев 04, 2010 9:33 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Блок обработки ошибок ничем не отличается от любого другого блока программы. Исполнение идет обычным образом - команды сверху вниз, с ветвлением, циклами и прочим. Если попали в блок обработки ошибки, то надо обеспечить выход из него - т.е. поставить goto в предполагаемом конце блока обработки ошибки. В блоке обработки ошибки может возникнуть другая ошибка, предыдущий OnError на нее уже на распространяется, надо ставить новый или пойдет обработка по умолчанию (появится сообщение об ошибке).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
FedorinoFF



Зарегистрирован: 01.02.2007
Сообщения: 272
Откуда: Санкт-Петербург

СообщениеДобавлено: Чт Фев 04, 2010 10:44 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Уважаемый Alex_47!
Вам надо проблему решить или просто поговорить ;-)
Имеем уже два ваших поста, но так и не понятно к чему речь.
Как говорят умные люди, в правильно поставленном вопросе содержиться половина ответа, или примерно так...

Может лучше как в школьных задачках, да и не только в школьных, пойти по простому пути:
1. Дано
2. Найти/доказать
3. мой вариант решения/понимания
4. Вопрос к форуму

Чем больше исходной информации - тем лучше. Это как на приеме у врача.
Тогда любой человек спокойно поймет что за проблема и окажет посильную помощь, в крайнем случае задаст наводящие вопросы. Иначе можно погрязнуть в чтении и сборе обрывочных сведений из последующих постов...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
reasonat



Зарегистрирован: 01.07.2009
Сообщения: 224
Откуда: Екатеринбург

СообщениеДобавлено: Чт Фев 04, 2010 1:02 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Для начала, перед тем как задаваться сложными вопросами, вставляйте в непонятных местах проверку значения:
print "получили вот такой вот путь к таблице - " + put_
Что дает? А то может программа путь не получила, потому и открыть не может. А потом уже Open Table

Ппро обработчик:
при возникновении ошибки в коде после объявления блока обработчика OnError.. программа идет к метке, которая объявлена в GoTo, т.е. к no_states, причем эта метка должны быть расписана в конце процедуры, после выхода из нее (Exit Sub), там и происходит вывод сообщения об ошибке и завершение обработчика, может переход на другую метку. Типа того:

ExitSub:
OnError Goto 0
Exit Sub

no_states:
Note Error$()
Resume ExitSub

А в Вашем случае обработчик, кажется, выйти не может, все возвращается на диалог открытия таблицы..
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alex_47



Зарегистрирован: 01.07.2009
Сообщения: 66
Откуда: Н.Новгород

СообщениеДобавлено: Чт Фев 04, 2010 8:36 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

1: Хочу открыть таблицу "states" - т.к. ее нет выполнение программы переходит на метку "no_states"
2: В обработчике ошибок хочу указать нужную таблицу при помощи "FileOpenDlg" возвратив имя файла в переменную put_
3: далее пытаюсь открыть таблицу именно тут и возникает проблема - открыть таблицу не получается

Вопрос: Почему не получается открыть таблицу из обработчика ошибок?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
reasonat



Зарегистрирован: 01.07.2009
Сообщения: 224
Откуда: Екатеринбург

СообщениеДобавлено: Пт Фев 05, 2010 10:25 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Sub ..
Dim put_ As String

OnError GoTo no_states
put_ = "states"

after_mapfrom:
Open Table put_
OnError GoTo 0

...
Exit Sub
no_states:
put_=FileOpenDlg("","","TAB","Открытие таблицы states ")
resume after_mapfrom
End Sub
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
FedorinoFF



Зарегистрирован: 01.02.2007
Сообщения: 272
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Фев 05, 2010 12:32 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

[quote="Alex_47"]
3: далее пытаюсь открыть таблицу именно тут и возникает проблема - открыть таблицу не получается

Вопрос: Почему не получается открыть таблицу из обработчика ошибок?[/quote]

А можно дословное сообщение об ошибке? ;-)

Может таблица уже открыта?
А может надо написать
open table put_ as States (т.е. принудительно задать алиас)?

Надо вдумчиво понять работу обработчиков, и понять причину ошибки неоткрытия выбираемой таблицы. и должно все заработать.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alex_47



Зарегистрирован: 01.07.2009
Сообщения: 66
Откуда: Н.Новгород

СообщениеДобавлено: Пт Фев 05, 2010 6:43 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

reasonat писал(а):
Sub ..
Dim put_ As String

OnError GoTo no_states
put_ = "states"

after_mapfrom:
Open Table put_
OnError GoTo 0

...
Exit Sub
no_states:
put_=FileOpenDlg("","","TAB","Открытие таблицы states ")
resume after_mapfrom
End Sub


Вот так работать должно. Но, к сожалению, мне нужно, что бы таблица открывалась из «no_states:», а не «after_mapfrom:»:

Sub Main
Dim put_ As String

OnError GoTo no_states
Open Table "states"
put_ = "states"

after_mapfrom:
OnError GoTo 0

...
Exit Sub

no_states:
put_=FileOpenDlg("","","TAB","Открытие таблицы states ")
Open Table put_
resume after_mapfrom
End Sub

А так уже не работает только я еще добавил "Open Table "states"" чтобы перейти в no_states Попробуйте у себя отткомпилировать
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
reasonat



Зарегистрирован: 01.07.2009
Сообщения: 224
Откуда: Екатеринбург

СообщениеДобавлено: Пн Фев 08, 2010 11:52 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

да у вас в другом проблема, в no-states процедура переходит, она не выполняет открытие таблицы с полученным адресом.
Говорю же, расставьте после каждого действия проверочные Print...
B почему, собственно открытие табилцы должно происходить именно из no_states, а не из after_mapfrom?
Пуще того, почему нельзя сразу явную проверку сделать, а не обработчиком:
Код:

OnError GoTo no_tab_open
put_ = "...\states.TAB"
If FileExists(put_)
Then
 Open Table put_
Else
 Open Table FileOpenDlg("","","TAB","Открытие таблицы states ")
End If

...
after_mapfrom:
OnError GoTo 0
Exit Sub

no_tab_open:
resume after_mapfrom
End Sub

У вас получается просто много повторов. Путь к таблице задается разными строками, да попытка открытия - в разных местах, от этого что-то и не работает.
Вот так попробуйте и проверьте, куда у вас не заходит:
Код:

no_states:
print "1: states не открылась"
put_=FileOpenDlg("","","TAB","Открытие таблицы states ")
print "2: теперь путь - " + put_
Open Table put_
print "3: сюда не доходит, а читает опять states"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru