|
|
|
| Подчиненная табличная форма отображает некий набор данных.
На основной форме есть кнопка вызова формы для редактирования выбранной записи из подчиненной.
После редактирования обновляю подчиненную форму и хочу перейти на отредактированную запись (через SelTop). Это получается, но запись "теряется" (подчиненная форма при обновлении приобретает стандартый вид и запись переходит на другую страницу подчиненной формы), хотя выбрана именно она.
Как быть? Как не "терять" запись?
Надеюсь, что не слишком запутанно написал.
Спасибо заранее. | |
|
| |
|
|
|
| Порядок примерно такой:
1. перед обновлением запоминаем значение ключевого поля текущей записи
2. обновляем форму
3. получаем recordsetclone формы
4. ищем в рекордсете запись с сохраненным ключем (findFirst)
5. присваиваем bookmark формы значение bookmark из рекордсета
http://hiprog.com/forum/read.php?id_forum=1&id_theme=4177&page=1 | |
|
| |
|
|
|
|
rst.FindFirst "tID = " & Me.rtID & ""
|
И потом на bookmark ругается, что
"Указан недопустимый объект или объект более не задан".
)) | |
|
| |
|
|
|
| Или вот другой, более полный пример:
Dim frmCat As Form
Dim rst As DAO.Recordset
Set frmCat = Forms("frmCat_SKU").Controls("frmDir_SKU_tblSub").Form
Set rst = frmCat.RecordsetClone
rst.FindFirst "SKUID = " & Me.SKUID & ""
frmCat.RecordSource = frmCat.RecordSource
frmCat.Bookmark = rst.Bookmark
Set frmCat = Nothing
Set rst = Nothing
|
Тоже ошибку выдает на строке frmCat.Bookmark = rst.Bookmark | |
|
| |
|
|
|
| Всё неправильно...
ID = Me.SKUID 'Запоминаем значение ключа
frmCat.RecordSource = frmCat.RecordSource 'Обновляем источник
rst.FindFirst "SKUID = " & ID 'Ищем значение ключа (числовое) в новом наборе
If Not rst.NoMatch Then frmCat.Bookmark = rst.Bookmark 'Если найдено - синхронизируем.
|
На основной форме есть кнопка вызова формы для редактирования выбранной записи из подчиненной.
|
Если вы только редактируете запись (не удаляете/добавляете), то ничего этого не надо. Достаточно frmCat.Refresh - и запись останется на месте.
После редактирования обновляю подчиненную форму и хочу перейти на отредактированную запись (через SelTop). Это получается, но запись "теряется" (подчиненная форма при обновлении приобретает стандартый вид и запись переходит на другую страницу подчиненной формы), хотя выбрана именно она.
Как быть? Как не "терять" запись? | |
|
| |
|
|
|
| Уточняю:
кнопкой я вызываю еще одну форму, на которой уже редактирую запись (без удаления и добавления).
Просто Refresh не дает никаких результатов. Только обновление источника данных. Почему - не знаю.
Вот только что попробовал, как ті написал - таже ошибка, | |
|
| |
|
|
|
| Уточняю:
ID = Me.SKUID 'Запоминаем значение ключа
frmCat.RecordSource = frmCat.RecordSource 'Обновляем источник
Set rst = frmCat.RecordsetClone 'Это должно быть здесь!
rst.FindFirst "SKUID = " & ID 'Ищем значение ключа (числовое) в новом наборе
If Not rst.NoMatch Then frmCat.Bookmark = rst.Bookmark 'Если найдено - синхронизируем.
|
Я обычно упрощаю:
With frmCat.RecordsetClone
.FindFirst "SKUID = " & ID
If Not .NoMatch Then frmCat.Bookmark = .Bookmark
End With
|
Вы дополнительную форму открываете в режиме acDialog? | |
|
| |
|
|
|
| Спасибо. Сейчас буду провобать )
Форму дополнительную открываю в обычном режиме.
Как-то об acDialog не задумывался. Что мне это может дать? :) | |
|
| |
|
|
|
| 1. Где вы выполняете свой код?
2. Открытие формы в режиме acDialog останавливает выполнение вызвавшей процедуры до момента, когда форма закроется или станет невидимой. Это позволяет в той же процедуре выполнить Refresh или Requery (или замена источника, как у вас) с учетом внесенных изменений.
3. Если до вызова формы ваша запись была не последней, а после обновления стала последней, значит изменились условия сортировки или значения полей, по которым выполняется сортировка.
4. У вас запрос-источник табличной формы позволяет редактировать записи? | |
|
| |
|
|
|
| 1. Код выполняется в модуле формы (сначала вносятся изменения, потом при нажатии кнопки идет проверка и сохранение).
2. Спасибо. :)
3. Условия сортировки вплоне могли измениться, но запись становится последней только на экране формы и даже тогда, когда условия сортировки не меняются, Например, в подчиненной форме отобрано 20 записей, а на экран формы помещается только 10 - после обновления отредактированная запись становится последней на экране (все остальное смещается).
4. Запрос-источник табличной формы нередактируемый (там собираются описания параметров товара по ID). | |
|
| |
|
|
|
| Попробуйте вместо:
Set frmCat = Forms("frmCat_SKU").Controls("frmDir_SKU_tblSub").Form
frmCat.RecordSource = frmCat.RecordSource
выполнить:
Forms("frmCat_SKU").Controls("frmDir_SKU_tblSub").Requery
Если не поможет - перед обновлением источника запоминайте:
st = frmCat.SelTop
После обновления и нахождения записи:
st = frmCat.SelTop - st
frmCat.Recordset.Move st
frmCat.Recordset.Move st * -1
Где-то так... | |
|
| |
|
49 Кб. |
|
| Попробовал.
Не очень идеально получается - редактируемая запись становится последней на экране подчиненной формы.
Это не ужос-ужос, но все же. ) Так и должно быть? | |
|
| |