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

Форум: MS ACCESS

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

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

 
 

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

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

тема: MSA2000 дублирование записей в подчиненных формах
 
 автор: Алексей М.   (06.02.2008 в 19:25)   личное сообщение
 
 

Имеется форма, в которую встроены несколько подчиненных форм на вкладках,
привязанных к одной таблице. В подчиненных формах имеется по несколько
наиболее характерных полей для просмотра записей.
Для ускорения ввода схожих записей предусмотрел возможность
дублирования текущей (по кнопке) нижеприведенным способом. См. код. Для
редактирования скопированных записей предусмотрена специальная форма
"Edit", открывающая запись по переданному ей из глобальной переменной
коду и где доступны все поля.
Процедура, для удобства, прописана во внешнем модуле. И все работает, но
до тех пор, пока не откроется форма "Edit". Собственно передергивание
записей сделано, чтобы после дублирования последней записи в форме "Edit" сразу все было
видно, а не пустые поля. Или приходится вручную в подчиненной форме
передергивать курсор по записям для обновления записей в самой таблице.
Так вот, после закрытия формы "Edit" нажатие по кнопке дублирования
вызывает ошибку "Method 'MoveFirst' of object 'Recordset' failed" (при
входе в отладчик встает на строку rst.MoveFirst), а не открывая можно
дублировать до бесконечности и без ошибок.

Sub DubleRec() 'дублирование записей в подчиненных формах
'формы "Главная"
Dim rst As Object
'PfDuble - имя активной подчиненной формы.
Set rst = Forms![Главная].Controls(PfDuble).Form.Recordset
MM1 = rst![Поле1]
MM2 = rst![Поле2]
.
.
MMn = rst![ПолеN]
rst.AddNew
Forms![Главная].Controls(PfDuble).Form.Controls![Поле1].Value = MM1
Forms![Главная].Controls(PfDuble).Form.Controls![Поле2].Value = MM2
.
.
Forms![Главная].Controls(PfDuble).Form.Controls![ПолеN].Value = MMn
rst.MoveFirst
rst.MoveLast
End Sub

  Ответить  
 
 автор: Алексей М.   (14.02.2008 в 16:57)   личное сообщение
 
 

Может я не правильно или расплывчато сформулировал вопрос?
Подчиненные формы используют IsLoaded и передают код записи в скрытое поле формы "Главная", по значению в котором форма "Edit" открывает требуемую запись. Если не передернуть курсор по записям в подчиненой форме, то в поле остается пустое значение и "Edit" открывается с пустыми полями.
Как уйти от ошибки "Method 'MoveFirst' of object 'Recordset' failed". Спасибо.

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

Вместо:
rst.MoveFirst
rst.MoveLast
попробуйте сделать:
Forms![Главная].Controls(PfDuble).Form.Refresh

Еще лучше так:
rst.AddNew
rst![Поле1] = MM1
rst![Поле2] = MM2
...
rst.Update

  Ответить  
 
 автор: Алексей М.   (14.02.2008 в 19:16)   личное сообщение
 
 

Спасибо большое. Попробую второй вариант. Refresh, скорее всего, переводит курсор в начало, а у меня сортировка.

  Ответить  
 
 автор: Анатолий (Киев)   (15.02.2008 в 11:45)   личное сообщение
 
 

Refresh, обычно, не переводит. Вот Requery - да.
Можно еще ...Form.Dirty = False

  Ответить  
 
 автор: Алексей М.   (15.02.2008 в 17:55)   личное сообщение
 
 

Перепробовал все варианты. Вариант с Update и Refresh не обновляет подчиненную форму и при открытии формы "Edit" - пустые поля. Эх, rst.MoveFirst и rst.MoveLast надежнее, т.е. после дублирования записи курсор стоит на последней строке (на новой продублированной записи), нажимаю ещё раз кнопку дублирования и эта запись копируется в новую строку, и до бесконечности. Ошибка возникает только после открытия формы "Edit". После её закрытия курсор остается на прежней строке, а при дублировании копируется пусая строка (вот так). Но даже после её появления (ошибки) можно работать дальше (проигнорировать), только нужно один раз передернуть курсор вручную. Попробую перед закрытием формы "Edit" как-либо обновлять rst...

  Ответить  
 
 автор: Алексей М.   (19.02.2008 в 17:49)   личное сообщение
 
 

Получилось.
Прошел вот такой вариант:
после rst![ПолеN]=ММn
прописал
rst.UpDate
rst.MoveFirs
rst.MoveLast
Если прописывать просто rst.UpDate, то в подчиненной форме не видно результатов. Все заработало и ошибок больше не возникает. Спасибо, Анатолий, за участие.

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