powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Закрытие формы на Activate
48 сообщений из 48, показаны все 2 страниц
Закрытие формы на Activate
    #32240051
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выдаёт ошибку:
Run-time error '2585':

This action can't be carried out while processing a form or report event


как бы мне закрыть её, просто на Activate проверяються некоторые условия и в определённом случае надо прикрыть формочку...
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32240060
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
При выходе из Activate включаем таймер, в таймере закрываем форму.
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32240063
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извени никогда с таймером не работал, не покажешь?
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32240079
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub Form_Activate()
...
If ... Then Me.TimerInterval =  1000 
End Sub

Private Sub Form_Timer()
DoCmd.Close acForm, Me.Name
End Sub

' :^)
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32240093
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пасибки
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Закрытие формы на Activate
    #32691434
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, в каком событии, кроме таймера, форма может закрывать саму себя? Что-то у меня получается, что ни в каких готфокусах и афтерапдейтах нельзя и идет та же ошибка 2585. Неужели путь с таймером - единственный, чтобы разорвать эти дурацкие транзакции?
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32691489
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
Private Sub Form_Open(Cancel As Integer)
Cancel = True
End Sub
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32691493
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛифчикКстати, в каком событии, кроме таймера, форма может закрывать саму себя? Что-то у меня получается, что ни в каких готфокусах и афтерапдейтах нельзя и идет та же ошибка 2585. Неужели путь с таймером - единственный, чтобы разорвать эти дурацкие транзакции?

KeySend
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32691513
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АлексейК
Код: plaintext
1.
2.
Private Sub Form_Open(Cancel As Integer)
Cancel = True
End Sub
Спасибо, Алексей! Получил заряд бодрости до конца раб.дня:)

PS Понятно, альтернативы нет
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32691523
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Лифчик
Почему это на афтерапдейтах нельзя закрывать?
Код: plaintext
1.
2.
Private Sub Form_AfterUpdate()
    DoCmd.Close acForm, Me.Name
End Sub
и усе работает.
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32691675
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лох Позорный2 Лифчик
Почему это на афтерапдейтах нельзя закрывать?

Код: plaintext
1.
2.
Private Sub Form_AfterUpdate()
    DoCmd.Close acForm, Me.Name
End Sub
и усе работает.
Вот такой комплект событий не работает с ошибкой 2585
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub Form_AfterUpdate()
DoCmd.Close acForm, FormName, acSaveYes
End Sub

Private Sub HyperLinkControl_AfterUpdate()
...
Me.Refresh
End Sub

Private Sub HyperLinkControl_GotFocus()
DoCmd.RunCommand acCmdEditHyperlink
End Sub
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32691700
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем тебе Me.Refresh на афтерапдейте контрола?
Может это такой модный способ запись сохранить?
Замени эту строчку на Me.Dirty = False и радуйся жизни :)
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32691783
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лох ПозорныйА зачем тебе Me.Refresh на афтерапдейте контрола?
Может это такой модный способ запись сохранить?
Замени эту строчку на Me.Dirty = False и радуйся жизни :)Это такой новомодный способ инициировать событие формы автерапдейт, в котором магическое действие закрытия осуществляется. Но я заменил на твое грязное дёти - и радуюсь жизни с тем же самым кодом 2585 :(

ЗЫ Могу закрыть только таймером, блин
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32691811
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это такой новомодный способ инициировать событие формы автерапдейт
Это весьма странный способ инициировать событие формы афтерапдейт. Через жопу автогеном.
Событие само инициируется - когда запись сохранится. Вот и сохраняй запись. Хоть через DoCmd.RunCommand acCmdSaveRecord, хоть через Dirty. Делать Refresh и перепрочитывать все данные - не нужно, хоть оно и запись сохранит тоже.

Но я заменил на твое грязное дёти - и радуюсь жизни с тем же самым кодом 2585 :(
у меня работает. аксес 97 и XP
чего-то ты не договариваешь.
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32691832
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лифчик
Вот такой комплект событий не работает с ошибкой 2585
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub Form_AfterUpdate()
DoCmd.Close acForm, FormName, acSaveYes
End Sub

Private Sub HyperLinkControl_AfterUpdate()
...
Me.Refresh
End Sub

Private Sub HyperLinkControl_GotFocus()
DoCmd.RunCommand acCmdEditHyperlink
End Sub


Код, который ты привел - страноватенький, конечно.
То, о чем говорил ЛП - работает:

Private Sub HyperLinkControl_AfterUpdate()
DoCmd.Close acForm, FormName, acSaveNo
End Sub

Видимо, ты пытаешьсяя сказать о ситуации, при которой код, размещенный
в afterUpdate контрола формы приводит к возникновению событий на другом контроле...
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32691834
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, после вызова DoCmd.RunCommand acCmdEditHyperlink - и у меня перестало работать :)
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32691865
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лох Позорный Это такой новомодный способ инициировать событие формы автерапдейт
Делать Refresh и перепрочитывать все данные - не нужно, хоть оно и запись сохранит тоже.
Но я заменил на твое грязное дёти - и радуюсь жизни с тем же самым кодом 2585 :(
у меня работает. аксес 97 и XP
чего-то ты не договариваешь.СанСаныч(?), принимаю все обвинения. Есть только одна отмаза - форма с одним контролом, контрол источник берет из таблы, состоящей из одной строки. И вообще, все что здесь делается - делается через ж.пу, потому что комбо не наследует нужных свойств.

ЗЫ Я все сказал и чист перед тобой. Тока может вот эта строка подло клинит - DoCmd.RunCommand acCmdEditHyperlink? Я этот диалог САМ не закрываю, только ОК ему нажимаю. Он запоминает то что надо где надо, но может не закрывается сразу и клинит транзакцию апдейта моего поля и формы?
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32691882
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
за что я и не люблю объект DoCmd
уж слишком он асинхронный :(
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32691911
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, точно. Помнишь, в прошлом году я тебе базу высылал? Там на форме в событии OnDelete пытался путем DoCmd просто запустить другую форму, и эта пакость ставила на запись какую-то лишнюю блокировку. Может это как-то для Фака сформулировать, типа "Поменьше используйте DoCmd в событиях апдейта и делита, и вообще поменьше ее используйте ":)
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692039
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лох Позорныйза что я и не люблю объект DoCmd
уж слишком он асинхронный :(

2 ЛП - !!!!!!! ЧТО ТЫ СКАЗАЛ ТЫ САМ ТО ПОНЯЛ????????
ЭТОЖЕ И ЕСТЬ ТО ЛЕКАРСТВО,
КОТОРОЕ ТЫ В СВОЕМ ПЕРВОМ ОТВЕТЕ ПРОПИСЫВАЛ...

ажно комментарии в глотке застряли...


2 Лифчик
блин, я уже потерялся - в какой поток тебе отвечать...

Я понял кажется наконец, о чем ты так долго спрашива.
САМОЕ ИНТЕРЕСНОЕ, ЧТО ТЫ ЭТО СДЕЛАЛ!!!
Осталась одна запятая... Кадется, её можно поставить...

(Я бы не додумался до твоей идеи)

Скажы - ты имитируешь вызов контрола ред. гиперлинк "по требованию"?

То есть, твоя форма нужна только для того, чтобы достучаться до контрола
редактирования гиперлинка - так?
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692044
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victosha2 ЛП - !!!!!!! ЧТО ТЫ СКАЗАЛ ТЫ САМ ТО ПОНЯЛ????????
ЭТОЖЕ И ЕСТЬ ТО ЛЕКАРСТВО,
КОТОРОЕ ТЫ В СВОЕМ ПЕРВОМ ОТВЕТЕ ПРОПИСЫВАЛ...
Это к чему?
Ну не люблю я DoCmd, чтож теперь поделать. Иногда им все-таки приходится пользоваться (ну не умею я по другому формы закрывать), менее асинхронным он от этого не становится.
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692059
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лох Позорный Victosha2 ЛП - !!!!!!! ЧТО ТЫ СКАЗАЛ ТЫ САМ ТО ПОНЯЛ????????
ЭТОЖЕ И ЕСТЬ ТО ЛЕКАРСТВО,
КОТОРОЕ ТЫ В СВОЕМ ПЕРВОМ ОТВЕТЕ ПРОПИСЫВАЛ...
Это к чему?
Ну не люблю я DoCmd, чтож теперь поделать. Иногда им все-таки приходится пользоваться (ну не умею я по другому формы закрывать), менее асинхронным он от этого не становится.

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

DoCmd - он в такой ситуации ОБЯЗАН и не может не быть асинхронный -синхронный он на х";ен никому не нужен. А такое впечатление - что он не полностью следует своей желательной и необходимой программисту асинхронности.

Не любить его легко - заменить непросто.
Подозреваю, что не любишь ты его именно в тех местах, где он твои АСИНХРОННЫЕ ожидания не оправдывает...
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692088
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Victosha
Ты знаешь, вот когда я форму закрываю с помощью DoCmd.Close (снаружи, а не из самой же формы), то я ожидаю, что после отработки этой команды - форма будет закрыта. События там всякие отработают, из коллекции Forms она пропадет. Вот такое вот у меня скромное желание. А аксесу с его DoCmd на мои желания плевать. Сколько раз сталкивался, что DoCmd.Close отрабатывает, причем без ошибок, а форма еще не закрыта, обработчик события закрытия не отработал, из коллекции не пропало. Свинство. Когда оно отработает целиком и полностью - одному DoCmd известно.

Вот и кажись подобное свинство. DoCmd.RunCommand acCmdEditHyperlink непонятно когда запись/форму освобождает, а без этого хрен закроешь.

Так что не люблю я DoCmd именно в тех местах, где он мои СИНХРОННЫЕ ожидания не оправдывает.
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692092
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, COM-овские объекты по определению синхронны
Внутри своих методов они могут вызывать ассинхронные куски кода на выполнения, но сами методы - синхронны.
Вот зачем DoCmd асинхронностью балуется - я понять не могу.
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692101
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victosha
Скажы - ты имитируешь вызов контрола ред. гиперлинк "по требованию"?

То есть, твоя форма нужна только для того, чтобы достучаться до контрола
редактирования гиперлинка - так?Иес. Раз контрол в подчиненной форме потерял нужные мне гиперлинковые свойства (в т.ч. - возможность вызова диалога), то я и хочу передать фокус на другой, подходящий контрол. Но самое интересное, что некто "бывает" в другой ветке подсказал, как подходящий контрол на главной форме устроить. Щас буду делать. Или есть еще какие-нить соображения? Всегда рад...

Блин, я на форуме в основном в роли просителя выступаю, стыдно, пора уже начать самому советы давать. Тока я не успеваю чаще всего :)
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692189
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лох Позорный2 Victosha
Ты знаешь, вот когда я форму закрываю с помощью DoCmd.Close (снаружи, а не из самой же формы), то я ожидаю, что после отработки этой команды - форма будет закрыта. События там всякие отработают, из коллекции Forms она пропадет. Вот такое вот у меня скромное желание. А аксесу с его DoCmd на мои желания плевать. Сколько раз сталкивался, что DoCmd.Close отрабатывает, причем без ошибок, а форма еще не закрыта, обработчик события закрытия не отработал, из коллекции не пропало. Свинство. Когда оно отработает целиком и полностью - одному DoCmd известно.

Вот и кажись подобное свинство. DoCmd.RunCommand acCmdEditHyperlink непонятно когда запись/форму освобождает, а без этого хрен закроешь.

Так что не люблю я DoCmd именно в тех местах, где он мои СИНХРОННЫЕ ожидания не оправдывает.

Твое "снаружи" - скорее всего - из "другой" формы и при этом в ответ на событие этой "другой" формы или афтерапдейт ее контрола.
В обычном модуле - маловероятно и в ответ на онКлик на кнопке - маловероятно.

Про синхронность и асинхронность КОМ-объектов.

ВО-ВО!!!! ЭТО И ЕСТЬ ОНО - ДЕРЕВО!
Когда ты подвязал СВОЮ функцию (Control_UfterUpdate) к исходящему интерфейсу ком - объекта
в качестве получателя Ком-события, то управление из точки подвязки (процедуры, по списку вызывающуей адреса всех "слушающих" функций)
не может быть возвращено, пока не отработают ВСЕ слушатели по списку.
Теперь, в своей подвязанной функции ты пытаешься дерныть за метод того же ком-объекта, который должен вызвать собственное событие. Возникает цепочка событий. Некоторые из таких цепочек "режимно совместимы" , некоторые нет. И наступление вызываемого из твоей подвязанной функции события допустимо, когда другие события отработали. Что очевидно не выполняется при дергании за некотроые методы внутри процедуры обработки события. Применительно к ДАННОМУ случаю, похоже на то,
что afterUpdate текстбокса - не его собственный, а происходящий в составе события, исходно-порожленного диалогом редактирования гиперлинка. Чо приводит вызову цепочки событий на форме фактически ВНУТРИ события по завершению работы диалога. Режимно это несовместимо с немедленным закрытием формы. И не оправдываются именно АСИНХРОННЫЕ ожидания.
Если бы в этом месте DoCmd работал асинхнронно,
он Сам бы "поставил в очередь" событие закрытия. Вот только видно, нет ее (очереди) и работает он СИНХРОННО, то есть в момент, когда управление достигает соответствующей строки кода.

2 Лифчик
Без таймера пока не обошелся.
Возможно, есть вариант не заканчивать им, а начинать - надо бы проверить.
Сейчас не смогу - может быть вечером.
По некторому размышлению - вариант с таймером мне нравится. Патамушта форма такая - это своего рода "акцессный актив-икс", и там он никому не мешает...
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692229
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Виктоша: и Dlookup у меня обломился. Так что видно придется форму отдельную вызывать и таймером ее закрывать. Занесем эту специфику в свое серое хранилище глюков

Зы вот только бы научиться еще управлять этим гиперлинковым диалогом. А то он всегда начальный путь к базе выдает. Может ChDir сделать?
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692255
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лифчик2 Виктоша: и Dlookup у меня обломился. Так что видно придется форму отдельную вызывать и таймером ее закрывать. Занесем эту специфику в свое серое хранилище глюков

Зы вот только бы научиться еще управлять этим гиперлинковым диалогом. А то он всегда начальный путь к базе выдает. Может ChDir сделать?

Можно попробовать заменить таймер на KeySend - это тоже "чисто асинхронный вариант" - щаз может и попробую.

ChDir обязан помочь...

Отдельная форма в твоей подкрутке - это как раз и есть, то, что меня так восхитило - всё-таки нашел винт...
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692409
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) KeySend - работает

2) Пришла такая мысль-
Своей формой (назовем ее Ф) ты все равно будеш пользоваться как вызывателем диалога внутри другой формы. Поэтому тебе как раз не нужно (не обязательно) закрывать Ф, пока "родительская" жива, а достаточно просто скрыть ее. Если Ф будет объявлена в модуле вызывающей ее формы
как Private (withevents) xForm as New Form_Ф то при закрытии формы-хозяина Ф закроется сама.
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692485
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Виктоша: я понял мысль. К таким конструкциям как описание формы на основе имеющейся для внутреннего потребления я только подхожу и пока это не прочувствовано. Но в данном случае ситуация такая - все ДблКлики по бывшим гиперлинковым полям у меня вынесены в функцию в глобальном модуле проэкта. Такое вот упрощение. Потому как могу в разных местах из разных подформ вызывать. И везде понатыканы Application.Screen.ActiveControl. Так что пусть пока формочка открывается и закрывается.
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692534
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лифчик2 Виктоша: я понял мысль. К таким конструкциям как описание формы на основе имеющейся для внутреннего потребления я только подхожу и пока это не прочувствовано. Но в данном случае ситуация такая - все ДблКлики по бывшим гиперлинковым полям у меня вынесены в функцию в глобальном модуле проэкта. Такое вот упрощение. Потому как могу в разных местах из разных подформ вызывать. И везде понатыканы Application.Screen.ActiveControl. Так что пусть пока формочка открывается и закрывается.
для реализации "мысли" есть два варианта
1) (Плохой)
в этом же модуле держать форму как переменную
Плохость в том, что, вообще говоря, надо заботится об итоговой очистке при завершении приложения - усложнение логики. Хотя реальные потери памяти небольшие и без "заботы" должно выдержать "много запусков". Предполагается, что компьютер рано или поздно выключат...

2) ввести в своей функции входной параметр - типа твоей формы.
Появится возможность рабоать с конкретным экземпляром,
время жизни которого определяется формой-хозяином.
потенциальный минус - возможно, придется пересмотреть подход к источнику формы, индивидуализировав источник (то есть связанная табла не об одной записи окажется)
в любом случае на скорости отображения "диалога" выиграешь так заметно,
что отказываться не захочется, а захочется "причесывать"...
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692585
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Занес в список "Надо сделать в проге". Растет быстрее, чем "Уже сделано" :)

ЗЫ ChDir не помогает:( Этот гипердиалог, зараза, какими-то другими путями управляется. Как бы докопаться? Хотя это конечно уже совсем не по сабжу
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692617
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторв этом же модуле держать форму как переменную

Думается, что вся процедурина крутится внутри одной глобально функции, присвоенной свойствам типа он-клик (т.е. кликушникам -или даблкликлушникам). И если унутре ее что и вызывается, то вызовы отрабатывают "в одном потоке" (в вызовах этих процедур можно форму передавать как параметр).

Т ч. форму надо держать не в форме,как переменную, а в функции, как переменную, по выходу из функции она (переменная) благополучно сдохнет (когда отработают последние события в ей). И явного закрытия не потребуется.
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692638
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛифчикЗанес в список "Надо сделать в проге". Растет быстрее, чем "Уже сделано" :)

ЗЫ ChDir не помогает:( Этот гипердиалог, зараза, какими-то другими путями управляется. Как бы докопаться? Хотя это конечно уже совсем не по сабжу

With WizHook
.Key = 51488399
Call .AccessWizFilePath("d:\Victosha")
End With

2 assa
твое предложение не экономит время загрузки формы в момент вызова функции...
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692666
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Виктоша:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub HyperLinkField_GotFocus()
On Error Resume Next
With WizHook
.Key =  51488399 
Call .AccessWizFilePath("C:\")
End With

DoCmd.RunCommand acCmdEditHyperlink
End Sub
не получается. При открытии диалога по-прежнему стартовая директория - директория с базой.

2 Assa: Сделал, спасибо! Таймер убрал - само все закрывается
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692679
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Лифчик
Действительно - проврался...



(с выражением лица)
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692688
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victosha2 Лифчик
Действительно - проврался...
(с выражением лица)Хрен с ним, в том поле, где мне нужен гиперлинковый диалог, запоминать не обязательно ибо тулз используется достаточно редко. А на остальных полях FileDialog стоит. Со временем может замена какая этому гипердиалогу подыщется.
Я и так беск.благодарен и при случае волью в вас во всех пива немеряно :)
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692717
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лифчик Victosha2 Лифчик
Действительно - проврался...
(с выражением лица)Хрен с ним, в том поле, где мне нужен гиперлинковый диалог, запоминать не обязательно ибо тулз используется достаточно редко. А на остальных полях FileDialog стоит. Со временем может замена какая этому гипердиалогу подыщется.
Я и так беск.благодарен и при случае волью в вас во всех пива немеряно :)

Ну, блин, ты даешь.
Ты же сам все это придумал!!!!!!!!!!!...
Мне понравилось очень....
Все просто, а у меня все загогулины давно выпрямились. И я бы просто не смог такую мыслю споймать.

А пиво - уже скоро...
Велосипедный сезон я вчера начал заново.
Скоро и пиво...
По планам - 31 декабря
:)

Пока устравиваю периодические глотковые разминки, чтобы вкус не забыть :)
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692848
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Лифчик

И все-таки
1) призадумавшись, не сумел себе представить, каким таким волшебным образом «настоящие» гиперрсылки у тебя заменились черт знает на что – кажется, это уже в тему «Проектирование БД»… Ну, уж ладно…

2) Вот прочитал еще раз все написанное и загрустил. Это же надо было весь день ахинею за хвост подергивать. Вместо того, чтобы оправиться и покурить…
Все вежливо промолчали, я, пожалуй тоже….

Вот твоя функция в «исходном виде»

Код: 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.
28.
29.
30.
31.
32.
33.
34.
Function tormentLinkEdit()
  On Error GoTo FLASTROW
  
    Dim stDocName As String, stLinkCriteria As String
     
    stDocName = "frm_torment"
    
   'следующая строка в твоем коде заменяется на что-то из актив контрола вытягиваемого 
    ' stLinkCriteria = "[descriptorID]=" & Me![ID] 
   Dim pActiveControl As Control
   
    stLinkCriteria = "[descriptorID]=" & Screen.ActiveControl.ItemData( 0 )
    DoCmd.OpenForm "frm_torment", , , stLinkCriteria
    
  
    DoCmd.SelectObject acForm, stDocName
    DoCmd.GoToControl "txtFilePosition"
    
    On Error GoTo CANCELERROR
    
    DoCmd.RunCommand acCmdEditHyperlink
    DoCmd.RunCommand acCmdSaveRecord
    
    DoCmd.Close acForm, stDocName
    
    Exit Function
CANCELERROR:
    ' Debug.Print Err.Number, Err.description 
   
    ' If Err.Number = 2501 Then 
      Err.Clear
      DoCmd.Close acForm, stDocName
    ' End If 
FLASTROW:
End Function

Надо ли комментировать? …


PS 1
2 ЛП
Любопытно, что наговоренная мною ахинея (чичас я другими словами на тему от 16:00 думаю) не меняет главного – DoCMD.Close обманывает в исходном варианте Лифчика именно асинхронные ожидания
:))

ЗЫ 2
прикладываю "обзазец"






(с выражением лица)
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692854
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VictoshaЛюбопытно, что наговоренная мною ахинея (чичас я другими словами на тему от 16:00 думаю) не меняет главного – DoCMD.Close обманывает в исходном варианте Лифчика именно асинхронные ожидания
:))
А DoCmd.RunCommand acCmdEditHyperlink - синхронные
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32692866
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лох Позорный VictoshaЛюбопытно, что наговоренная мною ахинея (чичас я другими словами на тему от 16:00 думаю) не меняет главного – DoCMD.Close обманывает в исходном варианте Лифчика именно асинхронные ожидания
:))
А DoCmd.RunCommand acCmdEditHyperlink - синхронные

:))

в моей голове эта история как-то связалась вот с этой темой
http://www.sql.ru/forum/actualthread.aspx?tid=115316&hl=close

и вот с этой
http://www.sql.ru/forum/actualthread.aspx?tid=117681&hl=winsock


В общем, с такой формулировкой ( авторА DoCmd.RunCommand acCmdEditHyperlink - синхронные) я соглашусь...
А именно - DoCmd.RunCommand acCmdEditHyperlink производит на свет свой поток "событий" - назовем его вложенным, в том числе завязанных на системную очередь оконных сообщений.
Некоторые (закрытие окна) из "вложенных" событий не могут быть завершены раньше, чем завершатся события "вызывающего объекта". Это сильно характерная для модальных, живущих в dll "связанных подформ" проблема.


DoCmd.RunCommand acCmdEditHyperlink
вызывает модальную форму, сидячую в какой-то Dll.
Управление возвращается в конце концов в строку следующую за
строкой вызова модального диалога. Вызывая по дороге "побочные" события типа афтерапдейт контрола. (В варианте Лифчика совсем занятная штука - после отработки афтерапдейт управление обязано вернуться в готфокус)

В момент возврата закрытие формы диалога уже назначено, но, судя по всему - не завершено. Запрет на Docmd.Close для текущей формы в этом состоянии виден невооруженным глазом. Точную природу запрета я не возьмусь определять.
Роль же таймера и/или SendKeys как раз заключается в предоставлении возможности свободного завершения текущих потоков событий и асинхронной инициализации событий, вызывающих переходы в новые состояния (формы) из текущего достигнутого.

В любом случае пример хорош тем, что показывает
1) как НЕ НАДО рулить событиями
2) логика "асинхронного автоматного" программирования прилично отличается
от логики "последовательных алгоритмов". А специфика "асинхронности" Com-объектов придает случаю особую прелесть.
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32693305
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читал. Много думал. Ввел на вызываемой форме-имитаторе гиперлинкдиалога еще одно поле, в которое передаю фокус после апдейта первого (чтобы диалог не циклился).
Полностью осознал ущербность пути, по которому рулил событиями. Но почему папаша Билл не дает мне открыть гиперлинкдиалог в модальном виде? Я был бы ему бесконечно благодарен.
Прикладываю картинку и коды, а то я в посторонних с трудом разбираюсь (свое иногда не могу разобрать).

Суть поведения обновленных псевдогиперлинковых полей (на картинке At1, 2 итд+AnswerRef, которого не видно) такова: по Дблклику вызывается функция, которая смотрит, что за контрол.
1.Если контрол - комбобокс и в нем есть текст, то отправляемся по ссылке Application.FollowHyperlink Path

2.Если это комбобокс и нет ссылки, то смотрим, как зовут контрол
2а - зовут НЕ "IDAnswer" - запускаем обычный FileDialog
2б - если так, то запускаем форму-имитатор PID (не буду расшифровывать, почему такое название)
Поведение в поле IDAnswer отличается именно тем, что аттачменты всегда файлы, а в поле IDAnswer могут заноситься ссылки на директории с перепиской.

3. Если контрол - текстбокс, то выполняется файл-диалог с решетками, т.к. все такие текстбоксы у меня - гиперлинки (осталось немного в других таблицах)
В всех случаях если выбраный файл/папка - новый, то функция DestFileID вставляет строку в таблицу-справочник.
Щас ошибок найдем и раскритикуем. Велькам
Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
Public Function FileDialogDblClick() As Boolean
Dim fd As FileDialog, CntrlType As Integer, i As Long
Dim str As String, Path As String
Dim FormPID As Form
On Error Resume Next
CntrlType = Application.Screen.ActiveControl.Properties("ControlType")

Select Case CntrlType
Case  111      'Случай комбобокса 

If Application.Screen.ActiveControl =  1  Or IsNull(Application.Screen.ActiveControl) Then
    If Application.Screen.ActiveControl.Name <> "IDAnswer" Then
Set fd = Application.FileDialog(msoFileDialogFilePicker)
If (fd.Show = - 1 ) Then
str = fd.SelectedItems( 1 )
Application.Screen.ActiveControl = DestFileID(str)  ' Проверяем, заносим новый путь в справочник 
End If
    Else
    Set FormPID = New Form_PID
    DoCmd.OpenForm FormPID
    Set FormPID = Nothing
    End If
Else
 'Если ссылка уже есть (в комбо число > 1), то идем по ссылке 
Path = Application.Screen.ActiveControl.Column( 0 )
Application.FollowHyperlink Path
End If

Case  109      'Случай текстбокса 
Set fd = Application.FileDialog(msoFileDialogFilePicker)
If (fd.Show = - 1 ) Then
str = fd.SelectedItems( 1 )
Application.Screen.ActiveControl = str & "#" & str & "#"
i = DestFileID(str)  'Проверяем, заносим новый путь в справочник (если надо) 
End If

Case Else
MsgBox "Неизвестный тип контрола"

End Select
End Function

Public Function DestFileID(Path As String) As Long
Dim rst As DAO.Recordset, SQLString As String
repeat:
SQLString = "SELECT DestFiles.FileID FROM DestFiles WHERE [FilePath]=" & "'" & Path & "';"
Set rst = CurrentDb.OpenRecordset(SQLString)
If rst.RecordCount =  0  Then
DoCmd.SetWarnings False
SQLString = "INSERT INTO DestFiles(FilePath) SELECT '" & Path & "' AS Expr1;"
DoCmd.RunSQL (SQLString)
DoCmd.SetWarnings True
GoTo repeat
Else
DestFileID = rst( 0 )
End If
End Function

Форма PID

Option Compare Database

Private Sub HyperAnswer_AfterUpdate()
Dim str As String
str = HyperlinkPart(Me.HyperAnswer, acAddress)
str = Replace(str, "..", "O:")
str = Replace(str, "/", "\")
Forms!MailLists.Child6.Form.IDAnswer = DestFileID(str)
Forms!MailLists.Child6.Form.IDAnswer.Requery
Forms!MailLists.Child6.Form.IDAnswer.Text = str
Me.Refresh
Me.Vspom.SetFocus
End Sub

Private Sub HyperAnswer_GotFocus()
On Error Resume Next
DoCmd.RunCommand acCmdEditHyperlink
Exit Sub
End Sub
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32693585
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Лучше сделать отдельную функцию, по работе с твоей формой-диалогом.
Вот вариант, встроенный в твой код – Убери код из своей формы СОВСЕМ. Оставь пустой модуль формы

HasModule у формы д.б. = Истина


Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
Public Function FileDialogDblClick() As Boolean
<…>
    Else
‘кусок работы с твоей формой
     Dim str As String
     Set FormPID = New Form_PID
      ‘----------------------------
      FormPID.Visible = True
      FormPID.SetFocus
      DoCmd.GoToControl " HyperAnswer"
    
      ‘следующая строка для обработки отказа от редактирования гиперссылки        
      On Error GoTo CANCELERROR
    
      DoCmd.RunCommand acCmdEditHyperlink
      DoCmd.RunCommand acCmdSaveRecord
        
      ‘ошибко-зависимый участок пройден

      On Error Resume Next 
      str = HyperlinkPart(Me.HyperAnswer, acAddress)
      str = Replace(str, "..", "O:")
      str = Replace(str, "/", "\")

‘следующие  3  строки мне осознать тяжело, особенно последнюю.
‘Осторожнее с нею – это, не то, чтобы АХТУНГ, а просто АФТЕРАПДЕЙТ.
‘
      Forms!MailLists.Child6.Form.IDAnswer = DestFileID(str)
      Forms!MailLists.Child6.Form.IDAnswer.Requery
     ‘без специальной надобности – лучше Value
      Forms!MailLists.Child6.Form.IDAnswer.Text = str
      ‘Me.Refresh – это я не знаю, зачем , было
     ‘Me.Vspom.SetFocus – это тоже    

       GoTo FLASTROW: 

 CANCELERROR:
      ‘ 2501  – отмена диалога     
      If Err.Number =  2501  Then

        Err.Clear
      End If
 FLASTROW:
‘-------------------------------------
    Set FormPID = Nothing
‘--------------------------------------
    End If
Else
<…>
End Function

...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32693659
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victosha‘следующие 3 строки мне осознать тяжело, особенно последнюю.
‘Осторожнее с нею – это, не то, чтобы АХТУНГ, а просто АФТЕРАПДЕЙТ.
Подформа Child6 - это и есть подчиненная табличная форма, изображенная на слипе (3 записи)
Forms!MailLists.Child6.Form.IDAnswer = DestFileID(str)
Текст из гипердиалога передаю в функцию, которая возвращает ID файла, при необходимости добавляет новый путь в таблицу-справочник

Forms!MailLists.Child6.Form.IDAnswer.Requery
Рекверит комбобокс
‘без специальной надобности – лучше Value
Forms!MailLists.Child6.Form.IDAnswer.Text = str
Заносит в текстовый столбец комбо путь, который выбран в диалоге (соответствующий ID файла гарантированно есть в присоединенном столбце
‘Me.Refresh – это я не знаю, зачем , было
Этим событие афтерапдейт вызывал
‘Me.Vspom.SetFocus – это тоже
Это - ответ на Victosha(В варианте Лифчика совсем занятная штука - после отработки афтерапдейт управление обязано вернуться в готфокус)
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32693689
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:))
в общем, дело к пиву продвигается...



(с выражением лица)
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32693721
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victosha:))
в общем, дело к пиву продвигается...
(с выражением лица)Определенно...Вот тока с письмами Биллу разберусь, которые меня в другом месте зафакали :(
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32714068
Фотография natalitvinenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не подскажете ли. а есть ли WizHook в 97 Аксесе?
...
Рейтинг: 0 / 0
Закрытие формы на Activate
    #32714143
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
natalitvinenkoНе подскажете ли. а есть ли WizHook в 97 Аксесе?
нет.
там используют экспорт функций.
кое-что есть здесь
http://www.trigeminal.com/codes.asp?1033
...
Рейтинг: 0 / 0
48 сообщений из 48, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Закрытие формы на Activate
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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