Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DoCmd.Quit первым делом обнуляет глобальные переменные что ли? / 16 сообщений из 16, страница 1 из 1
25.02.2018, 21:58
    #39607038
Wipeout2097
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.Quit первым делом обнуляет глобальные переменные что ли?
Народ, доброго всем времени суток! Столкнулся с проблемой: дал возможность пользователю изменять себе пароль. До этой формы (для смены пароля) он добирается последовательно, открывая другие формы. В общем, когда он все же произвел манипуляции с паролем (старый/новый/новый), есть необходимость приложение закрыть, чтоб он зашел в него уже под новым паролем. Соответственно, после поздравления его через МСГбокс с успешной сменой пароля, делаю DoCmd.Quit. И вот тут начинается...
Ошибка на ошибке, это не так, се не так... Короче, суть проблемы в том, что на момент DoCmd.Quit открыто порядка 5 форм. На события Form_Close некоторых из них написаны инструкции с использованием глобальных переменных. Все это дело начинает я так понимаю закрываться, и все эти Form_Close начинают срабатывать... Насколько я понял, DoCmd.Quit рушит в первую очередь те самые глобальные переменные? Мне просто это нужно как-то выяснить, чтобы обработать ошибки при пустых переменных...
...
Рейтинг: 0 / 0
25.02.2018, 23:03
    #39607051
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.Quit первым делом обнуляет глобальные переменные что ли?
Wipeout2097В общем, когда он все же произвел манипуляции с паролем (старый/новый/новый), есть необходимость приложение закрыть, чтоб он зашел в него уже под новым паролем.

Чаще всего разработчики после смены пароля просто выдают комментарий типа "Новый пароль вступит в силу после перезапуска приложения". Нет абсолютно никакого смысла сразу завершать приложение после смены пароля с точки зрения работающего пользователя...
Еще один подход - давать изменить пароль сразу после правильной идентификации прямо в форме вода пароля, то есть в самом начале, там же можно и ребутнуть приложение без спроса и ущерба юзеру.
...
Рейтинг: 0 / 0
25.02.2018, 23:51
    #39607056
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.Quit первым делом обнуляет глобальные переменные что ли?
А Вы допустите ситуацию-отошел пользователь, не выключая компьютер, на 3 минутки,а "доброжелатель" сменил ему пароль-фиг он войдет в базу при следующем запуске. Пароль должен меняться только владельцем пароля (то бишь обязательно подтвердив действующий-кстати везде так и делается)
...
Рейтинг: 0 / 0
26.02.2018, 02:11
    #39607065
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.Quit первым делом обнуляет глобальные переменные что ли?
Wipeout2097..., есть необходимость приложение закрыть, чтоб он зашел в него уже под новым паролем...
Нет такой необходимости.
Ну поменял он пароль, у него от этого поменялись права?
Нет.
...
Рейтинг: 0 / 0
26.02.2018, 07:56
    #39607087
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.Quit первым делом обнуляет глобальные переменные что ли?
Wipeout2097на момент DoCmd.Quit открыто порядка 5 форм. На события Form_Close некоторых из них написаны инструкции с использованием глобальных переменных. Все это дело начинает я так понимаю закрываться, и все эти Form_Close начинают срабатывать... Насколько я понял, DoCmd.Quit рушит в первую очередь те самые глобальные переменные? Мне просто это нужно как-то выяснить, чтобы обработать ошибки при пустых переменных...DoCMD.Quit запускает кучу процессов завершения работы и освобождения ресурсов. Асинхронно. Понятно, что выгрузка объектов (форм) с выполнением пользовательского кода выполняется дольше, чем тупо очистка памяти. Это как при куче запущенных программ с несохранёнными данными выполнить Пуск-Завершение работы...
Так что правильно - после MsgBox вручную корректно выгрузить все объекты, очистить все соотв. объектные переменные, и только потом (если выгрузка и очистка выполнены удачно) выполнять тот самый DoCMD.Quit.
...
Рейтинг: 0 / 0
26.02.2018, 08:56
    #39607110
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.Quit первым делом обнуляет глобальные переменные что ли?
[quot vmagЕще один подход - давать изменить пароль сразу после правильной идентификации прямо в форме вода пароля, то есть в самом начале, там же можно и ребутнуть приложение без спроса и ущерба юзеру.[/quot] За, обеими руками! Это правильный подход. По крайней мере для базы Access.
автор, делаю DoCmd.Quit. И вот тут начинается...
Ошибка на ошибке, это не так, се не так... Короче, суть проблемы в том, что на момент DoCmd.Quit открыто порядка 5 форм. На события Form_Close некоторых из них написаны инструкции с использованием глобальных переменных. Все это дело начинает я так понимаю закрываться, и все эти Form_Close начинают срабатывать... Насколько я понял, DoCmd.Quit рушит в первую очередь те самые глобальные переменные? Мне просто это нужно как-то выяснить, чтобы обработать ошибки при пустых переменных...

Неправильные действия. Сначала программно закрываешь открытые формы в порядке обратном порядку открытия. А затем уже закрываешь программу.

У меня были любители закрывать программу крестиком в правом верхнем углу при куче открытых форм. Пришлось заблокировать крестик.
...
Рейтинг: 0 / 0
26.02.2018, 09:23
    #39607126
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.Quit первым делом обнуляет глобальные переменные что ли?
Joss... У меня были любители закрывать программу крестиком в правом верхнем углу ...
Это стандартный для приложений MS Office (и не только) экшн, соответствующий концепции User Friendly interface.
И этого (де-факто стандарта) следует придерживаться в разработках приложений, а не гасить юзеров крестики.
:)
...
Рейтинг: 0 / 0
26.02.2018, 11:13
    #39607200
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.Quit первым делом обнуляет глобальные переменные что ли?
PredeclaredJoss... У меня были любители закрывать программу крестиком в правом верхнем углу ...
Это стандартный для приложений MS Office (и не только) экшн, соответствующий концепции User Friendly interface.
И этого (де-факто стандарта) следует придерживаться в разработках приложений, а не гасить юзеров крестики.
:) А вот фиг им (пользователям) во всю ...[censored]... !!! Как я отловлю событие закрытия программы средствами Access? А потом ещё надо пройти по стеку вызванных форм, периодически спрашивая "Хотите ли Вы сохранить изменения?" Нет крестика - нет проблем!!! ИМНО!
...
Рейтинг: 0 / 0
26.02.2018, 11:31
    #39607214
ROI
ROI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.Quit первым делом обнуляет глобальные переменные что ли?
JossPredeclaredпропущено...

Это стандартный для приложений MS Office (и не только) экшн, соответствующий концепции User Friendly interface.
И этого (де-факто стандарта) следует придерживаться в разработках приложений, а не гасить юзеров крестики.
:) А вот фиг им (пользователям) во всю ...[censored]... !!! Как я отловлю событие закрытия программы средствами Access? А потом ещё надо пройти по стеку вызванных форм, периодически спрашивая "Хотите ли Вы сохранить изменения?" Нет крестика - нет проблем!!! ИМНО!
Дык и лави событие, а крестики-то зачем?
...
Рейтинг: 0 / 0
26.02.2018, 12:33
    #39607254
Wipeout2097
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.Quit первым делом обнуляет глобальные переменные что ли?
Необходимость в перезагрузке есть. Дело в том, что если пользователь продолжит работать с программой, он будет своими действиями инициировать ADODB подключения к файлам аксесса, защищенного этим же MDW, что и файл, в котором сидит пользователь. В строке подключения необходимо указывать имя пользователя и пароль. Обычно, я это делаю через WizHook.Key. Так вот, после смены пароля через DBEngine, новый пароль прописывается в MDW, а Wizhook в этом случае возвращает ещё старый. Соответственно, ADO провалится...
...
Рейтинг: 0 / 0
26.02.2018, 13:00
    #39607269
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.Quit первым делом обнуляет глобальные переменные что ли?
ROIJossпропущено...
А вот фиг им (пользователям) во всю ...[censored]... !!! Как я отловлю событие закрытия программы средствами Access? А потом ещё надо пройти по стеку вызванных форм, периодически спрашивая "Хотите ли Вы сохранить изменения?" Нет крестика - нет проблем!!! ИМНО!
Дык и лави событие, а крестики-то зачем? Это не ко мне. Вопрос: как отследить закрытие базы "крестиком"?
...
Рейтинг: 0 / 0
26.02.2018, 13:05
    #39607274
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.Quit первым делом обнуляет глобальные переменные что ли?
Для ТС. Жестко забить изменение пароля только при входе, с последующей перезагрузкой базы с новым паролем.
...
Рейтинг: 0 / 0
26.02.2018, 13:35
    #39607290
ROI
ROI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.Quit первым делом обнуляет глобальные переменные что ли?
JossROIпропущено...

Дык и лави событие, а крестики-то зачем? Это не ко мне. Вопрос: как отследить закрытие базы "крестиком"?
Создаешь скрытую форму у нее и ловишь событие закрытия.
Я так делаю.
...
Рейтинг: 0 / 0
26.02.2018, 13:36
    #39607294
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.Quit первым делом обнуляет глобальные переменные что ли?
Wipeout2097.. До этой формы (для смены пароля) он добирается последовательно, открывая другие формы. В общем, когда он все же произвел манипуляции с паролем (старый/новый/новый), есть необходимость приложение закрыть, чтоб он зашел в него уже под новым паролем.

...И вот тут начинается...

.. Короче, суть проблемы в том, что на момент DoCmd.Quit открыто порядка 5 форм.

... Насколько я понял, DoCmd.Quit рушит в первую очередь те самые глобальные переменные? Мне просто это нужно как-то выяснить, чтобы обработать ошибки при пустых переменных...

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

Вы при смене пользователем пароля просто присваивайте глобальным переменным новое значение, и все. При закрытии тех же самых форм (открытых на момент смены пароля), если есть подсос в событии к этим самым переменным, то просто пойдет ссылка на их новые значения.

Аксесс сначала закрывает объекты внутри, а потом уже закрывается сам при выходе. Проверял)
...
Рейтинг: 0 / 0
26.02.2018, 16:42
    #39607382
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.Quit первым делом обнуляет глобальные переменные что ли?
ROIJossпропущено...
Это не ко мне. Вопрос: как отследить закрытие базы "крестиком"?
Создаешь скрытую форму у нее и ловишь событие закрытия.
Я так делаю. У меня бывает открыто цепочкой 5-6 форм. И что даст отслеживание закрытие скрытой формы? Поймать закрытие Access не цель. Цель - правильно в обратном порядке закрыть формы. А использование скрытой формы это не гарантирует.
...
Рейтинг: 0 / 0
26.02.2018, 17:58
    #39607434
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DoCmd.Quit первым делом обнуляет глобальные переменные что ли?
JossУ меня бывает открыто цепочкой 5-6 форм. И что даст отслеживание закрытие скрытой формы? Поймать закрытие Access не цель. Цель - правильно в обратном порядке закрыть формы. А использование скрытой формы это не гарантирует.Вот пример, формы закрываются в обратном порядке. Применён пример стека из книги Геца и Гилберта "Программирование на VB6 и VBA".
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DoCmd.Quit первым делом обнуляет глобальные переменные что ли? / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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