powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Закрытие БД или окна Акцеса
25 сообщений из 26, страница 1 из 2
Закрытие БД или окна Акцеса
    #32384891
Фотография KV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как на закрытие БД или окна Акцеса повесить процедуру?
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32384907
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты хочешь контролировать закрытие самого Access?
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32384921
Фотография KV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Eternal
Бывает ведь базу закрывают закрыв Акцес
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32384929
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай невидимую форму, которая стартует вместе с Аксом и на ее onClose повесь свою процедурку.
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32384936
Фотография KV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Темный
А это единственный способ? Наверное так и сделаю. Спасибо
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32384937
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Бывает ведь базу закрывают закрыв Акцес
В смысле нажав крестик в заголовке родительского окна Access?
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32384945
Фотография KV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Eternal
И крестик тоже. Невидимая форма должна сдесь сработать
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32384968
Allll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему скрытую?
Можно и открытую :)
Если есть какая-либо "главная" форма, т.е. которая загружается первой и во время работы всегда открыта.
Событие Unload отслеживает любые попытки закрыть форму и при необходимости можно отменить закрывание.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub Form_Unload(Cancel As Integer)
   If MsgBoxQuery_Quit = False Then ' спросить пользователя
      Cancel = True  ' если скажет Нет, то отменить закрывание
   Else
' а здесь можно вызвать программы,
' которые нужно выполнить при закрывании
   End If
End Sub
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32384973
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блокируй данный крестик с помощью WinAPI. Здесь на форуме это рассматривалось.После юзер на него уже не кликнет,а кликнет туда где "выход",вот там и делай процедуру-шпионку.
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32384985
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Блокировать крестик:

1. не нужно, ибо OnUnload сработает в любом случае;

2. бесполезно, ибо есть еще Alt+F4, но все равно OnUnload сработает в любом случае.
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32384989
Фотография KV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да Unload самое оптимальное. Спасибо всем
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32385033
Чумаков А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, при событии UnLoad в форме свойство Dirty в любом случае = False, независимо от того производились изменения или нет (при этом никаких принудительных сохранений записей не производилось).
А если сделать кнопку в обработке которой анализировать Me.Dirty, то отрабатывается нормально и можно сделать Me.Undo при закрытии.
Но юзеру остается вариант Ctrl-F4, чтобы закрыть форму без проверок.

Как добиться того чтобы в UnLoad правильное Dirty было ?
Или при UnLoad запись автоматом сначала сохраняется ?
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32385041
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Или при UnLoad запись автоматом сначала сохраняется ?

Похоже, что так.
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32385057
Allll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что показывает Me.Dirty?
Что было событие изменения данных в записи.

Попробуйте изменить значение в поле, потом ввести его прежнее значение.
Т.е. фактически значение осталось прежним (не изменилось), но Me.Dirty покажет True.
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32385061
Чумаков А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если бы оно так было, то это было бы замечательно.
Но прикол в том, что при UnLoad Me.Dirty всегда False.

Как же тогда Undo делать при закрытии формы ?
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32385062
Фотография KV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вешаю на Form_Load и на Form_Open: Me.Visible=False
Все равно вижу
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32385118
Чумаков А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если нельзя на Unload проверку заполнения формы (проверку Dirty), то нехай будет закрытие формы по кнопке , кнопку закрытия окна убрал, но как отловить нажатие Ctrl-F4 ?
Некоторые сильно умные юзеры, чтобы обойти проверку заполнения формы давят Ctrl-f4 и усе. На UnLoad проверку повешать можно (для Ctrl-F4 срабатывает), но там, блин, нельзя сделать Me.Undo.
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32385136
Allll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вам так дорог Dirty, то вы можете сохранять его в переменной:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim flgDirty As Boolean

Private Sub Form_Timer()
    If flgDirty = False Then flgDirty = Me.Dirty
End Sub

Private Sub Form_Unload(Cancel As Integer)
    If flgDirty = True Then
    Else
    End If
End Sub

В предыдущем сообщении я пытался показать, что не стоит верить Dirty.
Он показывает, что данные ИЗМЕНЯЛИ, а не то, что они фактически ИЗМЕНИЛИСЬ.
Пользователь изменил данные, потом передумал и ввёл прежние данные, а программа при выходе из формы говорит, что данные изменились.
И пользователь спрашивает у ВАС - как же так, данные осталсь прежними, а программа говорит, что данные изменились.
После этого у пользователя теряется вера в умный компьютер и умную программу.
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32385150
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AllllОн показывает, что данные ИЗМЕНЯЛИ, а не то, что они фактически ИЗМЕНИЛИСЬ.
Но в вопросе ситуация была обратная - данные ИЗМЕНЯЛИ, а свойство этого НЕ ПОКАЗЫВАЕТ.
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32385159
Allll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если Dirty не показывает, данные изменились, то зачем тогда его использовать?
Нужны лишние вопросы и упрёки от пользователей?
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32385490
Чумаков А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мысль с таймером понятна. Факт изменения данных это отлавливает (пусть данные и вернули в первозданный вид), но тогда нельзя сделать Me.Undo, точнее оно не дает нужного эффекта, т.к. запись при UnLoad уже сохранена.
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32385575
Allll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем вам так дороги Dirty и Undo, что вы не хотите с ними расстаться?

Проще, это не всегда лучше.

Один из вариантов "правильной" проверки:
1. переписать редактируемую запись во временную таблицу;
2. форма редактирования подключена к этой временной таблице;
3. перед закрытием сравнить данные в полях этой записи во временной и в "главной" таблице. Если не совпало хотя бы одно поле, то спросить пользователя о сохранении.

Достоинство этого метода:
1. запрос о сохранении будет выдаваться, только если данные действительно изменились.
Не будет ложных запросов о сохранении, как при использовании Dirty;
2. кроме несовпадений можно проверять и правильность ввода данных.
Например, если в поле1 введена дата получения товара, то в поле2 должна быть фамилия получателя. Если это не так, то сообщить пользователю и предложить продолжить редактирование.

Недостаток этого метода - количество строк кода будет больше, чем просто Dirty и Undo.
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32385700
Фотография AlexJuice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чумаков А. как отловить нажатие Ctrl-F4 ?
Запихнуть в AutoKeys
и переопределить.
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32385839
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не путайте кислое с зеленым. Откат (проверку) изменений производите в BeforeUpdate. в unload вы их уже не увидите. Но при выгрузке, если происходили изменения, события сохранения (в т.ч. BeforeUpdate) все равно наступят. Там вы можете закопить данные о состоянии для употребления их в событии выгрузки (или просто отменить обновление - аксес выдаст запрос на подтверждение закрытия формы БЕЗ изменения данных (при подтверждении пользователем отмены закрытия отменятся и все последующие события).
...
Рейтинг: 0 / 0
Закрытие БД или окна Акцеса
    #32385913
Фотография KV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на Before_Update у меня проверяет изменения, но форму не закрывает...
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Закрытие БД или окна Акцеса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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