powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Переход подчиненной на первую запись после апдейта рекодсетклона главной
8 сообщений из 8, страница 1 из 1
Переход подчиненной на первую запись после апдейта рекодсетклона главной
    #32518039
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю в подчиненной (просто веду краткий лог):
Код: plaintext
1.
2.
3.
Private Sub Form_AfterUpdate()
    upUNames Me
    upUNames Me.PARENT, "_T"
End Sub
после исполнения
upUNames Me.PARENT, "_T"
курсор в подчиненной перескакивает на первую запись
где
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public Sub upUNames(frm As Form, Optional Suff As String)
On Error GoTo exit_upUNames
    Dim rst As DAO.Recordset
    Set rst = frm.RecordsetClone
    With rst
        If Not (frm.NewRecord) Then 'не добавление новой
            .Bookmark = frm.Bookmark
            On Error Resume Next
            .Edit
            .Fields("UserTime" & Suff) = Now()
            '... и так далее по кучке полей
            .Update
        End If
    End With
exit_upUNames:
On Error Resume Next
    rst.Close
    Set rst = Nothing
End Sub
борется ли это как-то в 97? (можно ли заставить вернуться на текущую, или подавить перескок?). Где-то кажется уже встречал схожий топик. Не нашел.

(не хотелось бы ветвить процедуры в зависимости от - открывать рекордсеты(не клоны) и прочая)

можно конечно оставить
upUNames Me.PARENT, "_T"
только на удаление (зачем и затевалось), но перескок на первую и там не радует.


ЗЫ: наткнулся при обратном порядке обновлений:
upUNames Me.PARENT, "_T"
upUNames Me
- вообще обновлялась не та запись подчиненки (а именно первая)
...
Рейтинг: 0 / 0
Переход подчиненной на первую запись после апдейта рекодсетклона главной
    #32519323
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
2Victosha :0)
lf b yt njrvj Cfysx pyftn rfrб z \' ujdjh.б abuy. hfpdjlbnm ghbltncz - j,hf,fnsdfnm dct ckexfb
1ю - gjkmpjdfntkm elfkbk pfgbcm - yflj gjgfcnm d , Cktle.oe..ghtlsleoe.б yj ghjbpdjkmysq ;ktvtynж
2ю Gjkmpjdfntkm ghjcnj nryek vsirjq d lheue. pfgbcmб d rjyrhtnysq rjynhjk - lheubt gbhjub - yflj (;nj dct lttncz d ФаеукГзвфеу.ФаеукВудСщташкь) cktlbnm pf vsirjqб xnj kb,

(ответить ввечеру, как всегда, не удалось, поэтому отвечаю в другом вечеру)

видимо, это сюда, хотя всплыло в чужой теме.

1. К сожалению, про 97й содержательно - сейчас - уже наверно не смогу. И нет желания "иметь под рукой". Прокрутка рекордсета в описанной ситуации при пользовании RecordsetClone, скорее всего, в любом случае будет происходить. Кажется, разумнее всего, на время проводимых изменений заморозить обновления экрана. в 2K типа Me.Painting=false в 97 что-то DOCMD.///()не помню)

2. К сожалению2 - соединив все, что есть в этом потоке и в "чужом" - не понял вполне, что же хочется получить - как будто о "логе проводимых в таблице изменений" идет речь - но не уверен окончательно. Содержательно здесь может идти речь о выборе наиболее удачного события формы для выбора
подобного перехвата. По этому поводу совета дать не возьмусь, поскольку слаб мозгою.
Что касается кликов мышой, то как будто достаточно в OnCurrent кэшировать в локальную переменную .AbsolutePosition . Тема про удаление, конечно, имеет тонкости, когда удаляется последняя в наборе запись - бегом не скажу как разрулить "правильно" - експиримента треба.

PS когда писал, что "Саныч знает как", подразумевал вот это:
/topic/91397&hl=#666046
...
Рейтинг: 0 / 0
Переход подчиненной на первую запись после апдейта рекодсетклона главной
    #32520330
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторто как будто достаточно в OnCurrent
не-а!
:0)
- в AfterUpdate и т.п., которые запускаются при попытке выхода, в т.ч. при тыканьи мышой в _другую_ запись подчиненки (и должны обрабатывать вставку лога в мастер-таблицу) Current еще не произошло :0). (Или я чего-то не понимаю в последовательности событий, что вообще-то наверняка имеет место, но касательно данной ситуации - вряд ли). И не произойдет, поскольку происходит отдача фокуса мастер форме (происходит кажется рекваери текущей записи мастер-формы). И стал быть мы уже не получим координаты записи подчиненки (и тем паче контрола) в которую только только пытались ткнуть. Т.ч. фигово-с.
Т.е. текущее положение мыша надо ловить не в Current?


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


ЗЫ. благодарю за участие.
...
Рейтинг: 0 / 0
Переход подчиненной на первую запись после апдейта рекодсетклона главной
    #32520354
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 assa
Прошу прощения, а зачем тебе вообще RecordsetClone дергать?
Почему бы не присваивать значения непосредственно полям формы? (причем лучше наверное на BeforeUpdate, а не на After)
...
Рейтинг: 0 / 0
Переход подчиненной на первую запись после апдейта рекодсетклона главной
    #32520430
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поля (парента) пробовал. плехо. - юзер жмет эскейп нескоко раз (после перехода в подчиненке на новую запись), и "лог" в паренте слетает на доисторический (а запись то в табличную часть документа вставлялась/удалялась/редактировалась). А это "полицейская ф-я (мне правда на фих не нужна :0) РОжаем-с триггеро-заменители.

BeforeUpdate? Интересная мысль. т.е. я могу собачить прямо в клон парента, но поскольку события в подчиненке не завершены, фокус она отдать не должна? Попробую, хотя не все нравится. (Одна проблема - если событие не завершилось удачей? проверки по таблицам не прошли и т.п.).
...
Рейтинг: 0 / 0
Переход подчиненной на первую запись после апдейта рекодсетклона главной
    #32520460
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если на AfterUpdate поля меняешь - то сразу же и запись сохраняй (Me.Dirty = False). И пусть юзер хоть заснет на эскейпе. Если на BeforeUpdate - то вообще такой проблемы нет.
Клон вообще не трогай

Теперь насчет того, что событие не завершилось удачей. В подчиненной это не проблема, т.к. не завершилось - и х с ним, лог тоже не запишется (если на BeforeUpdate его пишешь). В главной - да, беда.
Ну так твой вариант тоже не без греха: проапдейтил подчиненную, на AfterUpdate попытался лог записать - нарвался на блокировку.
Надо использовать транзакции по форме, но в 97-м их сделать невозможно.
...
Рейтинг: 0 / 0
Переход подчиненной на первую запись после апдейта рекодсетклона главной
    #32520736
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, но:

Me.Dirty = False (и т.п. бубны, вплоть до простого DoCmd.... acSaveЧтоТоТам)
в главной приводит к передаче ей фокуса (- т.е. тот же резалт что и при .Update ее клона. проверял в тяпницу).

Проблема токмо в том, что юзер тыкает в некоторый контрол подчиненной, а оказывается в 1-м контроле главной, или (если я потрахался и вернул выделение на запись подчиненки) - в 1-м (или активном на момент _выхода_/_перехода_ - это от реализации) контроле подчиненки, а не в том, куда тыкал. Вот с этим и борюсь.


______
ЗЫ клон удобен тем, что единообразно правятся все процедуры
(и работы с формой, и выписки документа через рекордсеты (в т.ч. массовые))
т.е. вместо куска кода
.Edit
'...по кучке полей
.Update
вызывается (одна на все случаи):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public Sub addUNames(rst As Recordset, Optional Suff As String, Optional tStamp As Date)
On Error Resume Next 'не все поля могут наличествовать
    If tStamp =  0  Then
        tStamp = Now()
    End If
    With rst
        .Fields("UserTime" & Suff) = Now()
        .Fields("UserName" & Suff) = CurrentUser()
        .Fields("UserNameW" & Suff) = UserNameEnv()
        .Fields("ComputerName" & Suff) = ComputerNameEnv()
    End With
End Sub
вот оттуда все и пошло.
_________

Проверил с BeforeUpdate (мастер) + AfterUpdate (сама) - все действительно работает тип-топ. Только запись в подчиненке, в которую "ткнули" перескакивает "под обрез" (как если бы я сам это все реализовал, но контрол правда нужной, и надуваться самому не надо). А если я пробовал открыть список в новой записи, то язычок списка "облизывается" (список чуть приоткрывается и тут же втягивается).
с удалениями получается полный абзац (хотя фокус тоже вертается, за счет разделения событий) - а именно - целых 3 процедуры:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Private Sub Form_Delete(Cancel As Integer)
    If Not fOp Then
        ApCnfrm = Application.GetOption("Confirm Record Changes")
        Application.SetOption "Confirm Record Changes", True
        fOp = True
    End If
End Sub
Private Sub Form_AfterDelConfirm(Status As Integer)
    If Not (Status = acDeleteOK) Then
        'отменить вставку, потеряв фокус?
    End If
    'DoEvents 'вертаем фокус в подформу
    Application.SetOption "Confirm Record Changes", ApCnfrm
    fOp = False
End Sub
Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
    Response = acDataErrContinue
    If MsgBox("удалить записи?", vbYesNo) = vbYes Then
        upUNames Me.PARENT, "_T"
    Else
        Cancel = True
    End If
End Sub

автортоже не без греха: - ну дак, не триггер, есс-но.

Т.ч. буду смотреть через запросы (мога там визуальных неожиданностей поменьше).
...
Рейтинг: 0 / 0
Переход подчиненной на первую запись после апдейта рекодсетклона главной
    #32521035
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обход тоже не удался :o[
при редактировании отдельного рекордсета (НЕ клона) главной таблицы в AfterUpdate перескок фокуса на главную форму происходит все равно.

Остался промежуточный вариант:
в BeforeUpdate редактировать:
контролы подчиненной
и клон главной
(в удаление - только клон)
работает, но минусы:
- в главной регистрируются незавершенные транзакции подчиненки

_
или принять волевое решение: - выбросить ТАКОЙ лог на фих, и за инфой лазать в архив. Так будет непротиворечивее, хоть и грузнее.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Переход подчиненной на первую запись после апдейта рекодсетклона главной
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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