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

Bookmark в рекордсете тоже помогает для поиска необходимой строчки, помимо обычного поиска по рекордсету.
...
Рейтинг: 0 / 0
28.10.2009, 15:15
    #36277557
Как вернуться к определенной записи?
nrg_flyBookmark в рекордсете тоже помогает для поиска необходимой строчки, помимо обычного поиска по рекордсету. После Requery все Bookmark-и меняются. Использовать сохраненное ранее значение Bookmark нельзя.
...
Рейтинг: 0 / 0
24.11.2009, 14:46
    #36328533
DavidKats
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуться к определенной записи?
Анатолий ( Киев )используя ее св-во RecordsetClone. Тогда и Requery.не понадобится.
А расскажите, пожалуйста, как этим пользоваться.
...
Рейтинг: 0 / 0
25.11.2009, 21:03
    #36332114
DavidKats
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуться к определенной записи?
Народ, подскажите как в данном случае использовать это свойство? В хелпе совершенно другой пример. В поиске тоже не могу найти похожее.
...
Рейтинг: 0 / 0
25.11.2009, 23:39
    #36332316
OMi as Quest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуться к определенной записи?
DavidKats,
В таблице-источнике явно есть ключевое поле (первичный ключ).
Вытащи его в источник записей формы. Можно никакому контролу формы не присваивать.
Перед изменением запомнить значение поля:
Me.Recordset.Fields("имя поля-ключа").Value
После:
Me.Recordset.Find "имя поля-ключа=" & <то,что запомнили (зависит от типа поля)>,,1
...
Рейтинг: 0 / 0
26.11.2009, 08:21
    #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
26.11.2009, 09:02
    #36332625
П-Л
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуться к определенной записи?
Странник-s
With Forms!татата
Set rstCL = .RecordsetClone
rstCL.MoveLast
rstCL.FindFirst "Code = " & ncode
.Bookmark = rstCL.Bookmark
rstCL.Close
End With

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

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

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

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

2.
DavidKats
ТЕКУЩАЯ ЗАПИСЬ НЕ ПЕРЕХОДИТ К НАЙДЕНОЙ ЗАПИСИ.
одновременно эти 2-а утверждения - не могут быть Тру
одно из них - гонево
похоже - первое
...
Рейтинг: 0 / 0
27.11.2009, 09:19
    #36334847
mds_world
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуться к определенной записи?
DavidKats,
запись, которая ищется это старая запись или только что добавленная? Если новая, то как добавленная - в рекордсете, вручную, запросом?
...
Рейтинг: 0 / 0
27.11.2009, 10:34
    #36335037
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуться к определенной записи?
Может это поможет? Ленточная форма и закладки
...
Рейтинг: 0 / 0
27.11.2009, 14:47
    #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
27.11.2009, 15:14
    #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
27.11.2009, 18:20
    #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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как вернуться к определенной записи? / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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