powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Форма не закрывается по инструкции DoCmd.Close
23 сообщений из 23, страница 1 из 1
Форма не закрывается по инструкции DoCmd.Close
    #39763914
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Общий модуль читает URL и при некоторых условиях должен подождать.
В этот момент окрывается информирующая "формочка" с полем , где по умолчанию указано время открытия формы и две кнопки: "Продолжить" и "Завершить"

В общем модуле цикл:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 If NErrxxx > 3 Then
                NErrxxx = 0
                Dim t0 As Long, t1 As Long: t0 = Timer: DoCmd.OpenForm "Xpause"
                Do
                  t1 = Timer
                  If t1 > t0 + 1800 Or t1 < t0 Then DoCmd.Close acForm, "Xpause": Exit Do
                  DoEvents
                  If log2 > 0 Then DoCmd.Close acForm, "Xpause": Exit Do
                Loop
                If log > 0 Then log = 0: DoCmd.Close acForm, "Xpause": GoTo 90
            End If


Последняя инструкция
Код: vbnet
1.
.Close

даже лишняя.
Log, Log2 - глобальные управляющие переменные
Вот модуль формы:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Private Sub Form_Close()
log2 = 1
End Sub

Private Sub Кнопка2_Click()
log2 = 1
DoCmd.Close
End Sub

Private Sub Кнопка3_Click()
log = 1
log2 = 1
DoCmd.Close

End Sub


Почему форма не закрывается?
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39763941
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не ясна постановка вопроса. По подробнее можно? Не закрывается... Когда? По кнопке на форме? Из основного модуля? А пример базы? А под отладчиком прошли? Может программа в этот IF и не попадает?
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39763967
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss,

Я так думаю останавливается таймер на форме когда вызывается другая форма
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39763970
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoEvents должно помочь
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39763973
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Joss, спасибо за внимание.
Поподробнее
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
If NErrxxx > 3 Then  ' Условие начала ожидания
                NErrxxx = 0
                Dim t0 As Long, t1 As Long: t0 = Timer: DoCmd.OpenForm "Xpause" ' Форма открыта в момент t0
                Do
                  t1 = Timer
                 ' Если прошло полчаса, то форма закрывается и общий модуль продолжает работать
                  If t1 > t0 + 1800 Or t1 < t0 Then DoCmd.Close acForm, "Xpause": Exit Do 
                  DoEvents
                  ' Если нажали кнопку продолжить в форме "Xpause", выйти из цикла и продолжить работу
                  If log2 > 0 Then DoCmd.Close acForm, "Xpause": Exit Do
                Loop
                                                ' Это дубляж закрытия формы
                If log > 0 Then log = 0: DoCmd.Close acForm, "Xpause": GoTo 90
            End If



Пример "базы", полагаю не нужен, т.к. это однотабличная база (читаем URL, что-то выбираем и записываем в единственную таблицу).
Но форма не закрывается. Да, забыл, Акссесс 2010, но файл .mdb созданный в Аксессе 2003.
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39763975
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ROIJoss,
Я так думаю останавливается таймер на форме когда вызывается другая форма

Да нет, программа через положенное время выходит из цикла и нормально продолжает работу. А эта форма висит. Закрываю "руками" все нормально продолжается. Отладчиком пробовал с остановкой на инструкции Close. Остановилось, продолжил, процесс продолжился, форма открыта. Где-то что-то очень простое ...
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39764045
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь СROIJoss,
Я так думаю останавливается таймер на форме когда вызывается другая форма

Да нет, программа через положенное время выходит из цикла и нормально продолжает работу. А эта форма висит. Закрываю "руками" все нормально продолжается. Отладчиком пробовал с остановкой на инструкции Close. Остановилось, продолжил, процесс продолжился, форма открыта. Где-то что-то очень простое ...
Хмм Может активировать форму хотя.....
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39764064
Не понял вашу логику. В log2 пишется 1 перед перед DoCmd.Close по нажатию любой кнопки и даже на событии Form_Close. Т.е. форма уже закрывается, а в цикле снова команда DoCmd.Close. Может она лишняя и такой эффект? Если дождаться 30 мин., форма закроется?
Если форму просто открыть и нажать кнопку - закрывается?

Я бы в цикл добавил проверку - открыта ли форма.
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39764068
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь С,
if t1>t0+1800 or t1<t0... а будет ли это TRUE
t0=timer,t1=timer-до присвоения значения t1 может пройти,от начала выполнения (а при пошаговом выполнении в окне отладки это условие выполнится) менее 1800 милисек,а t1 никогда не будет меньше t0
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39764084
Игорь С, а почему бы вам не открыть форму в режиме acDialog? Тогда и никакого цикла не надо.
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39764335
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов Анатолий В log2 пишется 1 перед перед DoCmd.Close по нажатию любой кнопки и даже на событии Form_Close. Т.е. форма уже закрывается, а в цикле снова команда DoCmd.Close. Может она лишняя и такой эффект? Если дождаться 30 мин., форма закроется?
Если форму просто открыть и нажать кнопку - закрывается?

Я бы в цикл добавил проверку - открыта ли форма.

Все лишние Close - это результать попыток все-таки ее закрыть .

Форма не закрывается по истечении 1800 сек. Но алгоритм из цикла выходит и нормально продолжает работу. По нажатиям кнопок форма закрывается и тоже происходит все штатно.
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39764341
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов Анатолий

Цикл нужен, т.к. это основной режим работы. Программа подождет 30 мин и должна без вмешательства продолжить работу, что она и делает. Но форма висит и "немного мешает". Хотя можно закрыть руками.
Попробую в режиме диалога.
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39764432
Вместо
If t1 > t0 + 1800
укажите
If t1 > (t0 + 1800)

Но режим диалога - лучшее решение. Если вам нужно организовать таймаут, то в форме укажите TimerInterval и закрывайте на событии Form_Timer.
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39764556
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь С, если форму закрыть нельзя, значит метод docmd её не находит в коллекции Forms. попробуйте forms("Xpause").requery, goto control "Xpause"-вдруг поможет?
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39764741
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko,
Спасибо
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39764749
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko,
Код: vbnet
1.
2.
3.
 DoCmd.OpenForm "Xpause"
 Задержка_секунд(5)
 DoCmd.Close acForm, "Xpause"


Форма открылась, но не закрылась, без всяких таймеров и логики, с паузой по времени 5 секунд.
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39764751
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko,
Сейчас попробую как Вы посоветовали.
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39764773
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Сalecko,
Код: vbnet
1.
2.
3.
 DoCmd.OpenForm "Xpause"
 Задержка_секунд(5)
 DoCmd.Close acForm, "Xpause"



Форма открылась, но не закрылась, без всяких таймеров и логики, с паузой по времени 5 секунд.
Переведите фокус на форму и сделайте активной должно сработать.
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39764862
Игорь С DoCmd.OpenForm "Xpause"
Задержка_секунд(5)
DoCmd.Close acForm, "Xpause"
[/src]
Форма открылась, но не закрылась, без всяких таймеров и логики, с паузой по времени 5 секунд. Это какая-то аномалия. А любая другая форма? Если закрывается, то сделайте дубль формы "Xpause" и попробуйте с ним.
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39764880
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из статьи http://am.rusimport.ru/MSAccess/topic.aspx?ID=728

...
3. Использовать функцию SendMessage (API)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
'Разместите на форме CommandButton и вставьте следующий код:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
    (ByVal hwnd As Long, _
    ByVal msg As Long, _
    ByVal Param1 As Long, _
    Param2 As Any) As Long
    
Private Const GetClose = &H10

	Private Sub Command_Click()
               SendMessage Me.hwnd, GetClose, 0, vbNullString
	End Sub


Закрывается форма стандартно. происходят события Unload и Close .
Заменив определение Private на Public описание функции и константы можно поместить в общий модуль.

4. Использовать функцию DestroyWindow (API) - не рекомендуется
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
'Разместите на форме CommandButton и вставьте следующий код:
	Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long


	Private Sub Command_Click()
              DestroyWindow Me.hwnd
	End Sub


Описание функции можно поместить и в общем модуле как Public .
Особенности. При использовании функции DestroyWindow не происходит событие Unload . Событие Close происходит. Никакие изменения на форме не сохраняются. Запрос на сохранение изменений не выдаётся. По-этому и не рекомендуется использовать эту функцию для закрытия форм в Access .

---
Попробуйте
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39765031
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Joss, ой, спасибо.
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39765112
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов АнатолийИгорь С DoCmd.OpenForm "Xpause"
Задержка_секунд(5)
DoCmd.Close acForm, "Xpause"
[/src]
Форма открылась, но не закрылась, без всяких таймеров и логики, с паузой по времени 5 секунд. Это какая-то аномалия. А любая другая форма? Если закрывается, то сделайте дубль формы "Xpause" и попробуйте с ним.
Сделал форму "Всплывающее окно" - уже открыть, подождать, закрыть (вне цикла с таймером) сработало.
...
Рейтинг: 0 / 0
Форма не закрывается по инструкции DoCmd.Close
    #39765239
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть ещё открытие формы как модуля класса-в этом случае о таких проблемах можно забыть
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Dim frm as form
 If NErrxxx > 3 Then
set frm = new form_Xpause
frm.visible=true
' ...
set frm=nothing
end if
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Форма не закрывается по инструкции DoCmd.Close
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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