|
|
|
rst.close; set rst=nothing - не баг
|
|||
|---|---|---|---|
|
#18+
Может я не прав (или открытие америки заново)? Код: plaintext 1. Приведенная последовательность необязательна, и команды эти имеют совершенно разный смысл. rst - является указателем на структуру recordset. В случае, если recordset открыт как currentdb.openrecordset, то после использования rst нужно закрывать его используя rst.close Если rst использовался как указатель на recordset или recordsetclone какой-либо формы, то закрывать rst нужно используя set rst=nothing, т.е. просто уаляется указатель rst. Использование rst.close приведет к закрытию recordset на который указывал указатель, т.е. recordset/recordsetclone формы, что приведет к неизбежному г... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2004, 05:53 |
|
||
|
rst.close; set rst=nothing - не баг
|
|||
|---|---|---|---|
|
#18+
поиск по форуму.... и получишь кучу интересного по данному вопросу.!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2004, 07:15 |
|
||
|
rst.close; set rst=nothing - не баг
|
|||
|---|---|---|---|
|
#18+
Это верно при при работе с recordset формы, но не с рекордсетом, созданным recordsetclone (это копия исходного рекордсета). Проверить несложно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2004, 08:00 |
|
||
|
rst.close; set rst=nothing - не баг
|
|||
|---|---|---|---|
|
#18+
Не спорю. А как поступать если нужно открыть более дной копии? только следующим образом? Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2004, 08:05 |
|
||
|
rst.close; set rst=nothing - не баг
|
|||
|---|---|---|---|
|
#18+
Другого я не знаю. Тут есть у меня вопрос. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. По логике если мы создали 2 независимых копии - то текущей записью формы должна быть вторая, мы же передвигали курсор в разных рекордсетах. А на самом деле - третья. Предположим, что они ссылаются на один и тот же набор. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Текущая-вторая, закрытие первого рекордсета ни к чему не приводит, получается это разные рекодсеты. Может кто-нибудь пояснит такое поведение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2004, 09:20 |
|
||
|
rst.close; set rst=nothing - не баг
|
|||
|---|---|---|---|
|
#18+
me.recordsetcone - не метод, а свойство т.е. оба rst и rst1 ссылаются на один и тотже рекордсет RecordsetClone. Именно поэтому выполнение два раза rst.movenext и rst1.movenext относится к одному рекордсету и переводит указатель на третью запись независимы recordset создается методом clone, т.е. rst и rst1 будут независимы только в том случае если было селано Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2004, 10:32 |
|
||
|
rst.close; set rst=nothing - не баг
|
|||
|---|---|---|---|
|
#18+
авторSet rst = Nothing выражение убивает ссылку, а не закрывает объект. Объект закрывается Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2004, 10:35 |
|
||
|
rst.close; set rst=nothing - не баг
|
|||
|---|---|---|---|
|
#18+
А разве у меня нет rst.Close? Неlp: Свойство RecordsetClone используется для ссылок на объект формы Recordset, указанный в свойстве формы Источник записей (RecordSource). Значения Значение свойства формы RecordsetClone определяет копию набора записей базовой таблицы или запроса, указанных в свойстве формы Источник записей (RecordSource). Например, если форма основана на запросе, то обращение к свойству RecordsetClone эквивалентно созданию копии объекта Recordset с помощью того же запроса. Если к форме будет дополнительно применен фильтр, то объект Recordset создается с учетом фильтра. Если это ссылка, почему не был убит исходный рекордсет во втором куске кода? Если это копия - то почему так странно ведет себя в первом куске? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2004, 11:45 |
|
||
|
rst.close; set rst=nothing - не баг
|
|||
|---|---|---|---|
|
#18+
я создаю копии наборов как я описывал выше и таких глюков не наблюдал. И вспоминается, что с подобным встречался, после чего и отказался от назначения recordsetclone и начал использовать вво втором назначении метод clone ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2004, 12:39 |
|
||
|
rst.close; set rst=nothing - не баг
|
|||
|---|---|---|---|
|
#18+
Как мне кажется, с помощью метода RecordsetClone мы не создаем новый рекордсет, а лишь обращаемся к уже созданному Access'ом в момент открытия формы. Т.е. при открытии формы создается два рекордсета, основной и клон. Слегка доработанный пример от Alexander G Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2004, 13:01 |
|
||
|
rst.close; set rst=nothing - не баг
|
|||
|---|---|---|---|
|
#18+
Я не отношусь к этому как глюку, а хочу понять разницу между клоном и копией, поскольку Гетц подчеркивает различие между ними. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2004, 13:01 |
|
||
|
rst.close; set rst=nothing - не баг
|
|||
|---|---|---|---|
|
#18+
Копаемся Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Отрабатывает без проблем, хотя rst1 - просто еще ссылка на один рекордсет А так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Вылетает на последней строке, как и положено, с ошибкой 3420 ПОЧЕМУ?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2004, 14:17 |
|
||
|
rst.close; set rst=nothing - не баг
|
|||
|---|---|---|---|
|
#18+
Все правильно. В первом случае (Me.RecordsetClone) Access, т.к. он сам создал рекордсет для предоставления его через свойство RecordsetClone не даст Вам самому его закрыть. Т.е. ни rst.Close, ни rst1.Close не приводит к его закрытию. Закрывает его сам Access при закрытии формы. Можно сотню строк поставить Me.RecordsetClone.Close и они отработаю без ошибки, по скольку, как мне кажется, Access их просто игнорирует. К стати отсюда и предупреждение в хелпе по свойству RecordsetClone Примечание. Если пользователь закроет форму или изменит значение свойства формы Источник записей (RecordSource), прежний объект Recordset станет неопределенным. Последующие ссылки на этот объект или на закладки, сохраненные в форме или в этом объекте, приведут к возникновению ошибки. Т.к. Access сам открывает и закрывает рекордсет для RecordsetClone и мы на это не можем повлиять. Повторюсь, это лишь мое мнение, но именно оно помогло мне понять некоторые особенности, такие как при наличии записей в рекордсете свойства BOF и EOF, тем не менее, возвращали значение TRUE. http://am.rusimport.ru/MSAccess/f2.aspx?id=15205 Во втором случае, при закрытии рекордсета ссылка на него не уничтожается, вот и ObjPtr() и возвращает номер объекта на который ссылается переменная, при том, что сам объект уже закрыт. Думаю ObjPtr() не проверяет сам объект, закрыт, открыт, существут или нет, а возвращает лишь свойство переменной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2004, 15:38 |
|
||
|
rst.close; set rst=nothing - не баг
|
|||
|---|---|---|---|
|
#18+
Да конечно, ObjPtr() просто возвращает то число (адрес) который лежит в этой переменной, а уж он то указывает на структуру в памяти где валяется сам объект. Если объект потихому уничтожали, то в переменной до сих пор будет лежать этот адрес и ObjPtr() его вам вернет, токо по тому адресу уже будет находится черт знает что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2004, 15:48 |
|
||
|
rst.close; set rst=nothing - не баг
|
|||
|---|---|---|---|
|
#18+
Поскольку других объяснений нет, остается принять это. Но пояснить разницу между копией и клоном составители хелпа и Гетц могли бы. В русском языке этой разницы нет и я всегда удивлялся, почему применяются разные термины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2004, 01:10 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1654&tid=1675559]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 352ms |

| 0 / 0 |
