Форум программистов, компьютерный форум CyberForum.ru

MS Access

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 71, средняя оценка - 4.73
Musette
8 / 8 / 1
Регистрация: 30.01.2010
Сообщений: 54
#1

Переход к последней записи в подчиненной форме - MS Access

17.02.2010, 17:19. Просмотров 9224. Ответов 20
Метки нет (Все метки)

В таблице можно сделать так, чтобы записи отображались по убыванию ключевого поля. А можно ли так сделать в одиночной форме? Смысл в том, чтобы "под рукой" всегда была запись, внесенная последней. Догадываюсь, что вместо этого имеет смысл поколдовать со счётчиком, но страшно
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2010, 17:19     Переход к последней записи в подчиненной форме
Посмотрите здесь:
Переход к последней записи подчиненной табличной формы при активации главной формы MS Access
MS Access Переход по записям в форме только до последней записи и возвращение к нулевой
Запрет на создание записи в подчиненной форме при отсутствии значения в поле главной формы( или в этой же подчиненной форме) Аксесс 2003 MS Access
MS Access Переход в подчиненной форме
Переход на новую запись в подчиненной форме MS Access
Переход по записям из главной формы в не подчиненной форме MS Access
Поиск в основной форме по записи в подчиненной форме MS Access
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
БурундукЪ
9534 / 2531 / 66
Регистрация: 17.02.2009
Сообщений: 10,364
17.02.2010, 17:54     Переход к последней записи в подчиненной форме #2
по открытию формы
Visual Basic
1
DoCmd.GoToRecord , , acLast
Musette
8 / 8 / 1
Регистрация: 30.01.2010
Сообщений: 54
17.02.2010, 19:22  [ТС]     Переход к последней записи в подчиненной форме #3
Спасибо! Правда, это не работает в подчиненной форме. Нашла вот что:

Недостатки DoCmd.GoToRecord и достоинства CodeContextObject
Пара камней в огород DoCmd
Как-то мне понадобилось перейти к последней записи в подчиненной форме. Перейти к последней записи можно разными способами, простейший – это вот эта команда: DoCmd.GoToRecord , , acLast. Вот с подчиненненными формами есть нюанс – нужно вызывать ее в обработчике события или методе подчиненной формы. В моем случае события не подходили, метод было реализовывать влом и очень хотелось реализовать это на главной форме.

Поэтому пришлось написать свою функцию. Благодаря тому, что функция принимает ссылку на форму, а не имя, то можно ее использовать для любой формы, подчиненной, созданной при помощи DoCmd.OpenForm или оператора New.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Public Sub CM_FormGoToLastRecord(Optional ByRef frm As Form = Nothing)
' перейти на последнюю запись
' frm можно не передавать, в этом случае она будет получена при помощи CodeContextObject
On Error GoTo Err_
 
    If frm Is Nothing Then
        Set frm = CodeContextObject
    End If
 
    If frm Is Nothing Then Exit Sub
 
    Dim rst As DAO.Recordset
 
    Set rst = frm.RecordsetClone
    If Not rst.EOF Then rst.MoveLast
    frm.Bookmark = rst.Bookmark
 
Exit_:
    Exit Sub
Err_:
    mc_Log.MC_LogErr ("CM_FormGoToLastRecord()")
    Resume Exit_:
End Sub
mc_Log.MC_LogErr ("FormGoToLastRecord()") - функция, которая логирует ошибку в текстовом файле.

CodeContextObject
В процедуре CM_FormGoToLastRecord() используется такая штука, как CodeContextObject, которое в справке называют свойством. Это свойство позволяет получить ссылку на объект, в рамках которого выполняется данный код. Если вызвать процедуру CM_FormGoToLastRecord() в событии подчиненной формы, то CodeContextObject выдаст ссылку на подчиненную форму. Этот же способ использует DoCmd.GoToRecord, когда не указывается имя объекта.



но не поняла, откуда эту процедуру нужно вызывать...
БурундукЪ
9534 / 2531 / 66
Регистрация: 17.02.2009
Сообщений: 10,364
17.02.2010, 19:35     Переход к последней записи в подчиненной форме #4
Цитата Сообщение от Musette Посмотреть сообщение
но не поняла, откуда эту процедуру нужно вызывать...
а ты ее можешь вообще в модулях записать, ведь ты передаешь в нее любую форму, а вызывать ее в подчиненной (при открытии)

Добавлено через 38 секунд

Не по теме:

приятно общаться с человеком, который хочет учиться

Musette
8 / 8 / 1
Регистрация: 30.01.2010
Сообщений: 54
17.02.2010, 19:56  [ТС]     Переход к последней записи в подчиненной форме #5
Цитата Сообщение от CyberБурундукЪ
а вызывать ее в подчиненной (при открытии)
так вот и не могу сообразить - в каком событии её вызывать? подчиненная форма не открывается - значит, не в открытии... в "загрузке" тоже не работает.

Цитата Сообщение от CyberБурундукЪ
приятно общаться с человеком, который хочет учиться
)) спасибо, хотеть-то хочу, но получается пока не очень...
БурундукЪ
9534 / 2531 / 66
Регистрация: 17.02.2009
Сообщений: 10,364
17.02.2010, 20:00     Переход к последней записи в подчиненной форме #6
Цитата Сообщение от Musette Посмотреть сообщение
подчиненная форма не открывается - значит, не в открытии
ошибка ваша как раз открывается, вместе с главной, причем даж раньше главной

Добавлено через 24 секунды
т.е. в открытии и вызывай
Musette
8 / 8 / 1
Регистрация: 30.01.2010
Сообщений: 54
17.02.2010, 20:06  [ТС]     Переход к последней записи в подчиненной форме #7
не, я проверяла, не работает. то есть если её отдельно открывать, как форму - работает, а из главной - нет.
БурундукЪ
9534 / 2531 / 66
Регистрация: 17.02.2009
Сообщений: 10,364
17.02.2010, 20:27     Переход к последней записи в подчиненной форме #8
Musette, попробуй еще так.
у подчиненной формы, как обьекта главной формы есть 2 события Вход и Выход
(Enter и Exit)
Musette
8 / 8 / 1
Регистрация: 30.01.2010
Сообщений: 54
17.02.2010, 20:54  [ТС]     Переход к последней записи в подчиненной форме #9
увы-увы... ещё и при переходе по записям подчиненной формы выдаёт ошибку.
БурундукЪ
9534 / 2531 / 66
Регистрация: 17.02.2009
Сообщений: 10,364
17.02.2010, 21:00     Переход к последней записи в подчиненной форме #10
Musette, слушай, все можно сделать гораздо проще
ведь данные в подчиненной форме можно сортировать

Добавлено через 1 минуту
и если есть идентификатор, то можно сортировать по нему
Musette
8 / 8 / 1
Регистрация: 30.01.2010
Сообщений: 54
17.02.2010, 21:13  [ТС]     Переход к последней записи в подчиненной форме #11
в смысле, написать id_... desc в поле "порядок сортировки"? попробовала, не работает
БурундукЪ
9534 / 2531 / 66
Регистрация: 17.02.2009
Сообщений: 10,364
17.02.2010, 21:17     Переход к последней записи в подчиненной форме #12
Musette, скинь еще раз свою базу в формате А2000
и имя формы
седня или завтра гляну
Musette
8 / 8 / 1
Регистрация: 30.01.2010
Сообщений: 54
17.02.2010, 21:33  [ТС]     Переход к последней записи в подчиненной форме #13
спасибо! скину завтра, т.к. в моей "анонимной" базе эту процедуру вообще не удалось запустить - ругается на "rst As DAO.Recordset", хотя в рабочей базе всё нормально...
БурундукЪ
9534 / 2531 / 66
Регистрация: 17.02.2009
Сообщений: 10,364
17.02.2010, 21:39     Переход к последней записи в подчиненной форме #14
Цитата Сообщение от Musette Посмотреть сообщение
ругается на "rst As DAO.Recordset"
а там надо в референсах подключить библиотеку
References
Musette
8 / 8 / 1
Регистрация: 30.01.2010
Сообщений: 54
18.02.2010, 00:08  [ТС]     Переход к последней записи в подчиненной форме #15
Ага, спасибочки, подключила.
Поняла, в чём была проблема Если прописать вызов процедуры в открытии и/или загрузке формы, то сортировка будет выполняться только в первично отфильтрованных записях подчиненной формы. При дальнейшем переходе по записям главной формы процедура больше не действует.
У меня в рабочей базе главная форма была отсортирована по убыванию через acLast, поэтому я сразу перемещалась на последнюю запись формы, а процедура сортировала только подчинённые данные первой записи, поэтому я и результата не видела...
Куда же прописать вызов, чтобы сортировалась каждая подформа?
Вложения
Тип файла: rar base.rar (43.0 Кб, 72 просмотров)
БурундукЪ
9534 / 2531 / 66
Регистрация: 17.02.2009
Сообщений: 10,364
18.02.2010, 00:24     Переход к последней записи в подчиненной форме #16
Musette, вот что с тобой сделать, за то что ты Бурундука не слушалась?
эт конечно не совсем то что хочется, но начало есть. я в главной форме кой-чо написал (обработку события вхождения в подформу)
base.rar
DoCmd.GotoRecord
правда к последней записи переходит только по входу в подформу, но я подумал и добавил при обработке события главной формы текущая_запись установку фокуса на подформу. терь все красиво
Musette
8 / 8 / 1
Регистрация: 30.01.2010
Сообщений: 54
18.02.2010, 00:40  [ТС]     Переход к последней записи в подчиненной форме #17
CyberБурундукЪ, спасибище!!!
БурундукЪ
9534 / 2531 / 66
Регистрация: 17.02.2009
Сообщений: 10,364
18.02.2010, 00:42     Переход к последней записи в подчиненной форме #18
на здоровье. приходи еще
Сергей1980
467 / 299 / 10
Регистрация: 17.12.2009
Сообщений: 742
21.02.2010, 17:32     Переход к последней записи в подчиненной форме #19
Можно кстати вообще не заморачиваться с макросами и фокусами и просто на открытие формы повесить следующую процедуру (если надо чтобы в починенной форме при открытии главной курсор ставился на последнюю запись)

Private Sub Form_Open(Cancel As Integer)
Me.подчиненная_форма.Form.Recordset.MoveLast
End Sub

И Усе..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2015, 06:49     Переход к последней записи в подчиненной форме
Еще ссылки по теме:
MS Access Новые записи в подчиненной форме
MS Access Повторяющие записи в подчиненной форме
Программное добавление записи в подчиненной форме... MS Access
Очистка строки записи в подчиненной форме MS Access
MS Access Проверить наличие записи в подчиненной форме

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
texnik-san
шапоклякистка 8-го дня
3537 / 2169 / 389
Регистрация: 26.06.2015
Сообщений: 4,626
Записей в блоге: 1
28.06.2015, 06:49     Переход к последней записи в подчиненной форме #20
Цитата Сообщение от Musette Посмотреть сообщение
При дальнейшем переходе по записям главной формы процедура больше не действует.
А чтобы действовала при переходах по записям - вешать нужно на событие Current главной формы. При этом с события Open можно уже убрать - Current все равно произойдет для первой же записи.
Yandex
Объявления
28.06.2015, 06:49     Переход к последней записи в подчиненной форме
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru