powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Событие Current - непонятное поведение
13 сообщений из 13, страница 1 из 1
Событие Current - непонятное поведение
    #39139705
Столкнулся с непонятным для меня поведением программы.

Есть форма и подчиненная форма на ней.
Разместил на главной элемент управления - список. Источник строк для него формирую по событию Current подчиненной формы.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub Form_Current()
Dim group_id As Long
Dim strsql As String
'èñòî÷íèê äàííûõ äëÿ spKeys
group_id = Me.id
    If group_id > 0 Then
        strsql = "SELECT id, mp_groups, key_name, frequency_WS, frequency_WS1, frequency_WS2 FROM keys WHERE mp_groups = " & CStr(group_id) & " ORDER BY frequency_WS DESC"
        Debug.Print strsql
        Forms("Card_project").Controls("spkeys").RowSource = strsql
    End If
End Sub



Непонятность заключается в том, что событие зацикливается: хотя список на главной форме формируется как надо, что-то дергает событие обновление подчиненной формы, она обновляет список, снова ...

Вот отладчик:
SELECT id, mp_groups, key_name, frequency_WS, frequency_WS1, frequency_WS2 FROM keys WHERE mp_groups = 9031 ORDER BY frequency_WS DESC
SELECT id, mp_groups, key_name, frequency_WS, frequency_WS1, frequency_WS2 FROM keys WHERE mp_groups = 9031 ORDER BY frequency_WS DESC
ну и так далее бесконечно
...
Рейтинг: 0 / 0
Событие Current - непонятное поведение
    #39139780
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автосрабатывающие события надо расцикливать. Ну как минимум (если потери событий не влияют на процесс) типа
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub Form_Current()
Static IsWorking As Boolean
If IsWorking Then Exit Sub
IsWorking = True
' код обработчика
IsWorking = False
End Sub
...
Рейтинг: 0 / 0
Событие Current - непонятное поведение
    #39139794
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей_030212,

Посмотри в хелпе "Order of events for database objects". По-видимому, где-то переводится фокус на форму или она активируется и потому наступает событие Current. В принципе, можно это выявить дебаггером если пройтись пошагово (F8) после остановки программы в процедуре Current
...
Рейтинг: 0 / 0
Событие Current - непонятное поведение
    #39139897
Алексей_030212Разместил на главной элемент управления - список. Источник строк для него формирую по событию Current подчиненной формы.
Непонятность заключается в том, что событие зацикливается: хотя список на главной форме формируется как надо, что-то дергает событие обновление подчиненной формы, она обновляет список, снова ... Как связаны главная и субформа. Участвует ли в этой связке ваш список?
...
Рейтинг: 0 / 0
Событие Current - непонятное поведение
    #39139930
Анатолий ( Киев ),
Основная форма и подчиненная - каждая на своей таблице. Связь один-много. Список ни к какому полю не привязан (свободный).
...
Рейтинг: 0 / 0
Событие Current - непонятное поведение
    #39139956
Алексей_030212Анатолий ( Киев ),
Основная форма и подчиненная - каждая на своей таблице. Связь один-много. Список ни к какому полю не привязан (свободный).Список может быть свободным, но при этом - участвовать в связке субформы (т.е. имя этого списка фигурирует в свойстве LinkMasterFields контрола субформы) - и тогда это вполне м.б. причиной за_Loop_ливания вашего кода - и именно об этом говорил Анатолий ( Киев ) .
...
Рейтинг: 0 / 0
Событие Current - непонятное поведение
    #39139990
непоймучка,
Нет список не указан в LinkMasterFields/LinkChildFields
...
Рейтинг: 0 / 0
Событие Current - непонятное поведение
    #39140000
Akina,
попрбовал Ваш код. Не помогло
...
Рейтинг: 0 / 0
Событие Current - непонятное поведение
    #39140007
Алексей_030212непоймучка,
Нет список не указан в LinkMasterFields/LinkChildFields
1) напишите, что там указано
2) есть ли какая-то обработка событий списка, которая затрагивает источник субформы?
...
Рейтинг: 0 / 0
Событие Current - непонятное поведение
    #39140011
Алексей_030212Akina,
попрбовал Ваш код. Не помогло
а так поможет?
Алексей_030212
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub Form_Current()
Dim group_id As Long
Dim strsql As String
'èñòî÷íèê äàííûõ äëÿ spKeys
group_id = Me.id
    If group_id > 0 Then
        strsql = "SELECT id, mp_groups, key_name, frequency_WS, frequency_WS1, frequency_WS2 FROM keys WHERE mp_groups = " & CStr(group_id) & " ORDER BY frequency_WS DESC"
        If Not Forms("Card_project").Controls("spkeys").RowSource = strsql Then '<----ВОТ ТАК
            Debug.Print strsql
            Forms("Card_project").Controls("spkeys").RowSource = strsql
        End If
    End If
End Sub
...
Рейтинг: 0 / 0
Событие Current - непонятное поведение
    #39140084
непоймучка,
Круто, огромное спасибо, получилось.
Правда, так и не понял - почему в подчиненной форме генерировался current.
...
Рейтинг: 0 / 0
Событие Current - непонятное поведение
    #39140329
Пщела
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или в стеке вызовов посмотреть откуда был вызов
Rivkin Dmitry,
...
Рейтинг: 0 / 0
Событие Current - непонятное поведение
    #39140331
Алексей_030212непоймучка,
Круто, огромное спасибо, получилось.
Правда, так и не понял - почему в подчиненной форме генерировался current.на здоровье, но это было не решение, а просто тест, подтверждающий, что причина зацикливания - в УЧАСТИИ вашего списка в цепочке автообновления. current в подчиненной форме дергает источник списка, а список затем, в свою очередь, дергает источник субформы, отчего там снова срабатывает current и т.д.

Предложенный мной дополнительный If запретил "лишний раз" дергать список, отчего список, в свою очередь, не стал дергать субформу - и зацикливание таким образом прервалось.
А вот для того чтобы разобраться, как и почему список у вас дергает субформу - для этого вопросы наводящие выше были, зря вы не ответили, но гадать не стану.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Событие Current - непонятное поведение
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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