powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как вернуться к определенной записи?
21 сообщений из 21, страница 1 из 1
Как вернуться к определенной записи?
    #36276114
DavidKats
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В табличной форме провожу по событиям BeforeUpdate и AfterUpdate некоторые операции с таблицей-источником. (Добавление записи, удаление записи) После чего выполняю Me.Requery. Курсор перескакивает на первую запись таблицы-источника. А как сделать так, чтобы форма автоматически возвращалась к той записи, на которой пользователь находился непосредственно ПЕРЕД началом события AfterUpdate? Либо, если эта запись только что была удалена, то к следующей.
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36276122
шмордень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поиск и ф1
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36276478
DavidKatsВ табличной форме провожу по событиям BeforeUpdate и AfterUpdate некоторые операции с таблицей-источником. Если форма позволяет сделать "Добавление записи, удаление записи", то и делайте это прямо там, используя ее св-во RecordsetClone. Тогда и Requery.не понадобится.
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36277515
nrg_fly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DavidKatsВ табличной форме провожу по событиям BeforeUpdate и AfterUpdate некоторые операции с таблицей-источником. (Добавление записи, удаление записи) После чего выполняю Me.Requery. Курсор перескакивает на первую запись таблицы-источника. А как сделать так, чтобы форма автоматически возвращалась к той записи, на которой пользователь находился непосредственно ПЕРЕД началом события AfterUpdate? Либо, если эта запись только что была удалена, то к следующей.

Bookmark в рекордсете тоже помогает для поиска необходимой строчки, помимо обычного поиска по рекордсету.
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36277557
nrg_flyBookmark в рекордсете тоже помогает для поиска необходимой строчки, помимо обычного поиска по рекордсету. После Requery все Bookmark-и меняются. Использовать сохраненное ранее значение Bookmark нельзя.
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36328533
DavidKats
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев )используя ее св-во RecordsetClone. Тогда и Requery.не понадобится.
А расскажите, пожалуйста, как этим пользоваться.
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36332114
DavidKats
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, подскажите как в данном случае использовать это свойство? В хелпе совершенно другой пример. В поиске тоже не могу найти похожее.
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36332316
OMi as Quest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DavidKats,
В таблице-источнике явно есть ключевое поле (первичный ключ).
Вытащи его в источник записей формы. Можно никакому контролу формы не присваивать.
Перед изменением запомнить значение поля:
Me.Recordset.Fields("имя поля-ключа").Value
После:
Me.Recordset.Find "имя поля-ключа=" & <то,что запомнили (зависит от типа поля)>,,1
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36332579
Странник-s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Про табличную форму не знаю, а в ленточной делаю так:
присваю переменной значение ключевого поля нужной строчки
ncode = Forms!татата!Code

после чего выполняю необходимые операции и Me.Requery
а затем клонирую форму, в рекордсете ищу строчку с нужным значением ключевого поля
и перехожу на нее
With Forms!татата
Set rstCL = .RecordsetClone
rstCL.MoveLast
rstCL.FindFirst "Code = " & ncode
.Bookmark = rstCL.Bookmark
rstCL.Close
End With
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36332625
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странник-s
With Forms!татата
Set rstCL = .RecordsetClone
rstCL.MoveLast
rstCL.FindFirst "Code = " & ncode
.Bookmark = rstCL.Bookmark
rstCL.Close
End With

В этом коде 3 лишние строчки.
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36334175
DavidKats
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OMi as QuestDavidKats,
В таблице-источнике явно есть ключевое поле (первичный ключ).
У меня ЗАПРОС-источник. Ключевого поля в нем нет. Пытался запомнить значение конкретного поля до обновления и присвоить это значение Me.Recordset.Fields(strField). Но не получается. Пишет, что не может найти значение
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36334783
DavidKats
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
Me.Recordset.Bookmark = Me.Recordset.LastModified
Тоже не работает... Что ж делать-то, люди??
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36334788
_raddd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DavidKats...
У меня ЗАПРОС-источник. Ключевого поля в нем нет....

ну а добавить в "ЗАПРОС-источник" ключ - невариант?
(выводить его никто не заставляет)
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36334792
DavidKats
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытался по-разному. И поиском. Все находит правильно, но текущая запись все равно не перескакивает... И закладкой пробовал. Как советовали выше после Me.Requery искал в клоне нужную запись и приравнивал закладки. строчки проходят без ошибок, но результата нет. Текущая запись по-прежнему первая.. что за хрень?
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36334795
DavidKats
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_radddDavidKats...
У меня ЗАПРОС-источник. Ключевого поля в нем нет....

ну а добавить в "ЗАПРОС-источник" ключ - невариант?
(выводить его никто не заставляет)
Какой в этом смысл? найти запись можно и по другому полю. Проблема в том, что даже когда
Код: plaintext
Me.Recordset.FindFirst "Обозначение=" & intOldValue
находит нужное значение, ТЕКУЩАЯ ЗАПИСЬ НЕ ПЕРЕХОДИТ К НАЙДЕНОЙ ЗАПИСИ.
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36334811
_raddd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DavidKats
Код: plaintext
Me.Recordset.FindFirst "Обозначение=" & intOldValue

1.
DavidKats
находит нужное значение,

2.
DavidKats
ТЕКУЩАЯ ЗАПИСЬ НЕ ПЕРЕХОДИТ К НАЙДЕНОЙ ЗАПИСИ.
одновременно эти 2-а утверждения - не могут быть Тру
одно из них - гонево
похоже - первое
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36334847
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DavidKats,
запись, которая ищется это старая запись или только что добавленная? Если новая, то как добавленная - в рекордсете, вручную, запросом?
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36335037
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может это поможет? Ленточная форма и закладки
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36335881
Диам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пользуюсь такими процедурами:
после изменения записи с последующим возможным изменении порядка сортировки в форме:
Код: 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.
Public Sub FindCurRec(frm As Form, key As Control, Optional keyFind As Long = - 1 , Optional CtlFocus As Control = Nothing)
'функция делает Обновление (Requery) в форме frm и возвращается на запись, на которой она стояла перед вызовом Обновления (поиск по полю, которое содержит ключ)
'frm - обновляемая форма
'key - контрол который содержит ключевое поле. Это значение будет искаться после обновления, если не указан keyFind
'keyFind - если это значение <>-1, то после обновления в поле key будем искать это значение.
'CtlFocus - контрол, который должен будет получить фокус после выполнения поиска
  '(в случаях, когда поле key невидимое и находится не в области даных,
  'то после поиска не удается этому контролу вернуть невидимость, если не задан явно контрол,
  'который должен получить фокус после обновления)


'Не обработан вариант, когда контрол key имеет значение Enabled = false. (обработать так же как и невидимость)

On Error Resume Next
'On Error GoTo mEr
  Dim n As Variant 'значение, хранящееся в контроле key
  Dim nVis As Boolean 'признак, видимое ли поле key
  Dim curCtl As Control 'контрол, в котором сейчас фокус
  
  frm.Painting = False
  If CtlFocus Is Nothing Then 'если не задан явно контрол, который должен получить фокус после обновления, то
    Set curCtl = Screen.ActiveControl ' берем активный контрол
  Else
    Set curCtl = CtlFocus
  End If
  'если не задано явно значение, которое надо найти в контроле key, то сохраняем текущее значение контрола
  If keyFind = - 1  Then n = Nz(key.Value) Else n = keyFind
  frm.Requery 'то, ради чего мы здесь
  If key.Visible = False Then 'если контрол невидимый, то сделаем его видимым и изменим признак
    nVis = True
    key.Visible = True
  End If
  key.Parent.SetFocus 'фокус - форме, владеющей контролом (если вдруг мы обновляем подчиненную форму)
  key.SetFocus  'фокус контролу
  DoCmd.FindRecord n, acEntire, , , , acCurrent 'ищем нужное значение контрола
  curCtl.Parent.SetFocus 'передаем фокус на нужный контрол
  curCtl.SetFocus
  If nVis = True Then key.Visible = False 'возвращаем состояние невидимости для key, если оно было невидимым
  frm.Painting = True
  
'  Exit Sub
'mEr:  MsgBox Err.Description
End Sub
вызов: FindCurRec Me, Me.KeyFld

и такой (при удалении записи):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Sub BackToCurRec(frm As Form)
'возврат на текущую позицию в форме. Если была удалена последняя запись, то вернется на первую
  On Error Resume Next
  Dim n As Long
  DoCmd.Echo  0 
  With frm
    .Painting = False
    n = frm.SelTop
   .Requery
    frm.SelTop = n
    .Painting = True
  End With
  DoCmd.Echo - 1 
End Sub
вызов: BackToCurRec Me
---------------------------------
look at this: http://creditcalc.narod.ru
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36335965
DavidKats
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_radddDavidKats
Код: plaintext
Me.Recordset.FindFirst "Обозначение=" & intOldValue

1.
DavidKats
находит нужное значение,

2.
DavidKats
ТЕКУЩАЯ ЗАПИСЬ НЕ ПЕРЕХОДИТ К НАЙДЕНОЙ ЗАПИСИ.
одновременно эти 2-а утверждения - не могут быть Тру
одно из них - гонево
похоже - первое
Я тоже так думал, пока не попробовал следующее:
Код: plaintext
1.
2.
3.
4.
intObozn = Me.Обозначение
....
Me.Requery
Me.Recordset.FindFirst "Обозначение=" & intObozn
Debug.Print Me.Recordset.Fields("Обозначение")
Невероятно, но факт - запись найдена, но текущей она не становится.. :(
...
Рейтинг: 0 / 0
Как вернуться к определенной записи?
    #36336451
DavidKats
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема решилась следующим образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
General Declarations
Dim intObozn as Integer
Dim rstClone as Recordset

Private Sub ReturnToLastModified()
Me.Requery
Set rstClone = Me.RecordsetClone
rstClone.FindFirst "Обозначение=" & intObozn
Me.Bookmark = rstClone.Bookmark
Set rstClone = Nothing
End Sub

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


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