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

Форум: MS ACCESS

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

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

 
 

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

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

тема: RecordsetClone или грабли
 
 автор: kot_k_k   (25.12.2010 в 12:28)   личное сообщение
 
 

поясните:

есть код


Private Sub Флажок19_AfterUpdate()
Dim op As DAO.Recordset
Set op = Me.RecordsetClone
Do While op.EOF = False
....................
    op.MoveNext
Loop
End Sub


так вот первый раз (после открытия формы) срабатывает а при последующих нажатиях на флажок - композиция
Set op = Me.RecordsetClone
дает op.EOF = True
почему так

если сделать так

Private Sub Флажок19_AfterUpdate()
Dim op As DAO.Recordset
Dim rs As DAO.Recordset
'str_ = Me.RecordSource
Set op = Me.RecordsetClone
Do While op.EOF = False
...............
    op.MoveNext
Loop
Set op = Nothing
Set op = Me.RecordsetClone
L = op.EOF                              ' вот туту оно равно TRUE
Me.RecordsetClone.MoveFirst
Set op = Me.RecordsetClone
L = op.EOF                              ' а вот туту оно равно FALSE
End Sub


но так написано в хелпе


При открытии нового объекта Recordset текущей записью является его первая запись. Если текущая запись определена с помощью одного из методов Find или Move, то для того, чтобы сделать текущей другую запись объекта Recordset, необходимо синхронизировать текущую запись объекта Recordset с текущей записью формы, присвоив значение свойства объектов доступа к данным Bookmark свойству формы Bookmark.



получается RecordsetClone - возвращает рекордсет и помнит текущую запись которую сделали способом Move для ДРУГОЙ копии рекордсета, тогда на фига первое предложение - поясните мож я русский не понимаю.

  Ответить  
 
 автор: Lukas   (25.12.2010 в 13:03)   личное сообщение
 
 


При открытии нового объекта Recordset...


И где у вас открытие нового?

  Ответить  
 
 автор: kot_k_k   (25.12.2010 в 15:12)   личное сообщение
 
 


Свойство RecordsetClone используется для ссылок на объект формы Recordset, указанный в свойстве формы Источник записей (RecordSource).



а где в RecordSource указывается текущая запись
как я понимаю при RecordsetClone происходит следующее - идет обращение к RecordSource т.е. строка которая указывает на источник и его фильтры/сортировку (openrecordset....), но в RecordSource нет и намека на текущую позицию, откеля она его прикручивает

и получается при открытии нескольких RecordsetClone - любое перемещение в одном из них отражается во всех остальных, знач синхронность соблюдаться может (без всякого на ёё намёка), а почему тогда синхронизация двух Recordset происходит жутким извращенным способом

  Ответить  
 
 автор: АлексейЕ   (28.12.2010 в 12:39)   личное сообщение
 
 

Из хелпа:
Свойство RecordsetClone используется для ссылок на объект формы Recordset, указанный в свойстве формы Источник записей (RecordSource).
Значение свойства формы RecordsetClone определяет копию набора записей базовой таблицы или запроса, указанных в свойстве формы Источник записей (RecordSource).


Т.е. при создании формы создается два объекта рекордсет, один является источником данных формы, а второй является источником данных для Клона, при чем, и созданием второго рекордсета, и убийством его занимается лишь сама форма.
При обращении к свойству формы RecordsetClone Вы получаете лишь ссылку на второй рекордсет. При Nothing Вы уничтожаете, опять, лишь ссылку на рекордсет, но ни как ни сам объект. Объект остается существовать с той позицией курсора при котором вы от него "отцепились"
Даже op.Close не закроет второй рекордсет.
Set op = Me.RecordsetClone и Set rs = Me.RecordsetClone - это ссылки на один и тот же рекордсет, независимо уничтожали вы ор или нет.

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