Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Обновление подчиненной формы
 
 автор: shaucha   (02.11.2009 в 14:36)   личное сообщение
 
 

Подчиненная табличная форма отображает некий набор данных.
На основной форме есть кнопка вызова формы для редактирования выбранной записи из подчиненной.
После редактирования обновляю подчиненную форму и хочу перейти на отредактированную запись (через SelTop). Это получается, но запись "теряется" (подчиненная форма при обновлении приобретает стандартый вид и запись переходит на другую страницу подчиненной формы), хотя выбрана именно она.
Как быть? Как не "терять" запись?

Надеюсь, что не слишком запутанно написал.
Спасибо заранее.

  Ответить  
 
 автор: osmor   (02.11.2009 в 16:13)   личное сообщение
 
 

Порядок примерно такой:
1. перед обновлением запоминаем значение ключевого поля текущей записи
2. обновляем форму
3. получаем recordsetclone формы
4. ищем в рекордсете запись с сохраненным ключем (findFirst)
5. присваиваем bookmark формы значение bookmark из рекордсета

http://hiprog.com/forum/read.php?id_forum=1&id_theme=4177&page=1

  Ответить  
 
 автор: shaucha   (02.11.2009 в 17:16)   личное сообщение
 
 


rst.FindFirst "tID = " & Me.rtID & ""


И потом на bookmark ругается, что
"Указан недопустимый объект или объект более не задан".
))

  Ответить  
 
 автор: shaucha   (02.11.2009 в 17:38)   личное сообщение
 
 

Или вот другой, более полный пример:


        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

  Ответить  
 
 автор: Анатолий (Киев)   (02.11.2009 в 18:48)   личное сообщение
 
 

Всё неправильно...

            ID = Me.SKUID  'Запоминаем значение ключа
            frmCat.RecordSource = frmCat.RecordSource  'Обновляем источник
            rst.FindFirst "SKUID = " & ID 'Ищем значение ключа (числовое) в новом наборе 
   If Not rst.NoMatch Then  frmCat.Bookmark = rst.Bookmark  'Если найдено - синхронизируем.


На основной форме есть кнопка вызова формы для редактирования выбранной записи из подчиненной.


Если вы только редактируете запись (не удаляете/добавляете), то ничего этого не надо. Достаточно frmCat.Refresh - и запись останется на месте.

После редактирования обновляю подчиненную форму и хочу перейти на отредактированную запись (через SelTop). Это получается, но запись "теряется" (подчиненная форма при обновлении приобретает стандартый вид и запись переходит на другую страницу подчиненной формы), хотя выбрана именно она.
Как быть? Как не "терять" запись?

  Ответить  
 
 автор: shaucha   (02.11.2009 в 18:52)   личное сообщение
 
 

Уточняю:
кнопкой я вызываю еще одну форму, на которой уже редактирую запись (без удаления и добавления).

Просто Refresh не дает никаких результатов. Только обновление источника данных. Почему - не знаю.

Вот только что попробовал, как ті написал - таже ошибка,

  Ответить  
 
 автор: Анатолий (Киев)   (02.11.2009 в 19:21)   личное сообщение
 
 

Уточняю:

           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?

  Ответить  
 
 автор: shaucha   (03.11.2009 в 10:41)   личное сообщение
 
 

Спасибо. Сейчас буду провобать )
Форму дополнительную открываю в обычном режиме.
Как-то об acDialog не задумывался. Что мне это может дать? :)

  Ответить  
 
 автор: Анатолий (Киев)   (03.11.2009 в 14:27)   личное сообщение
 
 

1. Где вы выполняете свой код?
2. Открытие формы в режиме acDialog останавливает выполнение вызвавшей процедуры до момента, когда форма закроется или станет невидимой. Это позволяет в той же процедуре выполнить Refresh или Requery (или замена источника, как у вас) с учетом внесенных изменений.
3. Если до вызова формы ваша запись была не последней, а после обновления стала последней, значит изменились условия сортировки или значения полей, по которым выполняется сортировка.
4. У вас запрос-источник табличной формы позволяет редактировать записи?

  Ответить  
 
 автор: shaucha   (03.11.2009 в 15:00)   личное сообщение
 
 

1. Код выполняется в модуле формы (сначала вносятся изменения, потом при нажатии кнопки идет проверка и сохранение).
2. Спасибо. :)
3. Условия сортировки вплоне могли измениться, но запись становится последней только на экране формы и даже тогда, когда условия сортировки не меняются, Например, в подчиненной форме отобрано 20 записей, а на экран формы помещается только 10 - после обновления отредактированная запись становится последней на экране (все остальное смещается).
4. Запрос-источник табличной формы нередактируемый (там собираются описания параметров товара по ID).

  Ответить  
 
 автор: Анатолий (Киев)   (03.11.2009 в 19:28)   личное сообщение
 
 

Попробуйте вместо:
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

Где-то так...

  Ответить  
 
 автор: shaucha   (03.11.2009 в 10:50)   личное сообщение
49 Кб.
 
 

Попробовал.
Не очень идеально получается - редактируемая запись становится последней на экране подчиненной формы.
Это не ужос-ужос, но все же. ) Так и должно быть?

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList