powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / как грамотно закрыть recordset?
25 сообщений из 84, страница 1 из 4
как грамотно закрыть recordset?
    #32816842
AlexJS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
привык делать так:

var=currentdb.openrecordset("select Name from Names")("Name")

вопрос в том - выделяется ли память под такое открытие рекордсета и как его закрыть?

а предпосылка вопроса такая: начала вылетать ошибка - Открытие большего числа таблиц невозможно, порылся в инете, нашел что нужно закрывать рекордсеты.

Access97
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32816858
RFT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
recordset.Close
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32816862
Lenivec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
currentdb это вообще очень гнусная вещь, советую ею не пользоваться, так как каждый currentdb приводит к открытию нового экземпляра базы данных

рекордсет я обычно закрываю так:
objRst.Close
Set objRst = Nothing
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32816863
Фотография neal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше и корректнее

Set recorset = nothing

------------------------------------------------------
Заходи в саpай аккуpатно - могут быть сеpьезные гpабли.
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32816877
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем же насинг без клоуза корректнее ?
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32816884
AlexJS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
с этим:
objRst.Close
Set objRst = Nothing
все понятно...

но ведь объекту objRst сначала нужно присвоить рекордсет. а я то его открываю без присваивания имени...

Или способов кроме присваивания не существует?
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32816907
Lenivec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexJS
но ведь объекту objRst сначала нужно присвоить рекордсет. а я то его открываю без присваивания имени...

Или способов кроме присваивания не существует?

что вы под этим подразумеваете?

рекордсет открывается так как у вас и написано в первом посте

тольно не
objRst = objDb.OpenRecordset(...)
а
Set objRst = objDb.OpenRecordset(...)
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32816920
Lenivec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да еще сразу не обратил внимание, что это за конструкция у вас такая?

("select Name from Names")("Name")
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32816938
AlexJS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lenivecда еще сразу не обратил внимание, что это за конструкция у вас такая?

("select Name from Names")("Name")

ну тогда реальный пример:

if currentdb.openrecordset("select IDВыставки from TВыставки where ID=35")("IDВыставки")=185 then

конструкция, поверьте, замечательно работает
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32816956
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DLookup тебе в руки
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32816966
мдя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexJS if currentdb.openrecordset("select IDВыставки from TВыставки where ID=35")("IDВыставки")=185 then

конструкция, поверьте, замечательно работает
без ножа зарезал. что, что работает? Берет первое поле первой записи рекордсета? И что? А Dlookup не проще?
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32816974
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
if currentdb.openrecordset("select IDВыставки from TВыставки where ID=35")("IDВыставки")=185 then

конструкция, поверьте, замечательно работает


Сишнику такая жуткая конструкция в кошмарном сне не присниться. Где создается объект, где уничтожается ? Зачем из-за одного значения рекордсет гонять ? Эдак и число записей можно в цикле мувнекстом пересчитывать :)
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32817017
AlexJS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо
думаю лукап действитльно мне поможет
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32817025
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще не забудьте про остальные DSum, DMax ...
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32817071
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за бред вы тут понаписали???

Leniveccurrentdb это вообще очень гнусная вещь, советую ею не пользоваться, так как каждый currentdb приводит к открытию нового экземпляра базы данных
Да ну? Во мля как бывает то


Программист-ЛюбительСишнику такая жуткая конструкция в кошмарном сне не присниться. Где создается объект, где уничтожается ?
Перепишите этот код на си, и поудивляйтесь немного.
Придется точку заменить на "->", а в остальном - те же яйца, только в профиль.

Советующие DLookup (и остальные DSum'ы, DMax'ы) почему-то не упоминают про то, что работает оно медленнее, чем чтение одного поля из рекордсета с одной записью.
Также все почему-то забывают о такой маааленькой детали... DLookup'у (DSum'у, DMax'у) пофигу на все уровни изоляции транзакций, он в своем воркспейсе работает. Вам оно надо? Точно надо? А вы уверены, что автору вопроса это тоже надо?
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32817082
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛП: ты топик с начала читал, или только конец?
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32817086
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Советующие DLookup (и остальные DSum'ы, DMax'ы) почему-то не упоминают про то, что работает оно медленнее, чем чтение одного поля из рекордсета с одной записью.


Быстрее, чем открытие рекордсета с условием выбора, сортировкой или группировкой и суммрованием плюс выборка поля из него ?

Если это проверенная информация, то можно взять на вооружение.
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32817115
AlexJS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист-Любитель автор
Советующие DLookup (и остальные DSum'ы, DMax'ы) почему-то не упоминают про то, что работает оно медленнее, чем чтение одного поля из рекордсета с одной записью.


Быстрее, чем открытие рекордсета с условием выбора, сортировкой или группировкой и суммрованием плюс выборка поля из него ?

Если это проверенная информация, то можно взять на вооружение.

Только что провел тестирование:

Код: plaintext
1.
2.
3.
4.
5.
6.
Dim reccount As Integer
reccount = DCount("IDX", "T_Позиции к выставлению", "IDX_Выставки=" &  149 
 & " and (Тип='Площадь' or Тип='Заочники')")
reccount = CurrentDb.OpenRecordset("select count(*) as Recs from [T_Позиции к
 выставлению] where IDX_Выставки=" &  149  & " and (Тип='Площадь' or Тип='Заочники')")("Recs")
MsgBox reccount

в первом случае результат выдается через 6 сек, во втором через 3 сек. На глазок. Что посоветуете в этом случае? Как и рекордсет закрыть, и в скорости не потерять, и сишнику глаза не мозолить?
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32817131
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Kelme
ЛП: ты топик с начала читал, или только конец?
С начала.
Забыл собственно ответ дать

2 AlexJS
Если надо быть уверенным в корректном закрытии рекордсета, то надо его куда-нить сохранить.
Код: plaintext
1.
2.
Set rst = CurrentDb.OpenRecordset("select Name from Names")
var = rst("Name")
rst.Close: Set rst = Nothing
В принципе оно излишне, и эта работа должна выполняться автоматически. Однако в 97-ой аксес частенько что-то забывает закрыть.

2 Программист-Любитель
Быстрее, чем открытие рекордсета с условием выбора, сортировкой или группировкой и суммрованием плюс выборка поля из него ?
А почему оно должно быть медленнее?
Можно подумать, что всякие там DLookup'ы не открывают запросы, не накладывают условий, не выполняют всякие там группировки, суммирования и прочее. Если бы это было так, то откуда бы они информацию брали?
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32817133
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
короче чтобы грамотно закрыть рекордсет, надо его грамотно открыть

типа:

Код: plaintext
1.
2.
3.
4.
5.
  dim rs as DAO.Recordset
   set rs = currentdb.openrecordset("bla-bla-bla")
    .....
    rs.close
    set rs = nothing
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32817147
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Можно подумать, что всякие там DLookup'ы не открывают запросы, не накладывают условий, не выполняют всякие там группировки, суммирования и прочее. Если бы это было так, то откуда бы они информацию брали?


Конечно открывают. Но я думал, что в DLookup'ах внутри может быть более соптимизированный алгоритм, нежели в универсальных запросах вообще. И рекордсеты внутри они просто обязаны корректно закрывать.
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32817153
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
быстрее всего будет

Код: plaintext
currentdb().OpenRecordset("select Name from Names WHERE ID=12345",dbopensnapshot).Collect( 0 )

.collect - можно выкинуть как недокументированное, сильно не помогает

помогает dbOpenSnapshot против dbOpenDynaset

А вот если таблица прилинкованная , замена Currentdb() на переменную, указывающую на базу поможет серьёзно ускориться
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32817158
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-Любитель автор
Можно подумать, что всякие там DLookup'ы не открывают запросы, не накладывают условий, не выполняют всякие там группировки, суммирования и прочее. Если бы это было так, то откуда бы они информацию брали?


Конечно открывают. Но я думал, что в DLookup'ах внутри может быть более соптимизированный алгоритм, нежели в универсальных запросах вообще. И рекордсеты внутри они просто обязаны корректно закрывать.


ЛП прав ;)
HELP
Although you can use the DLookup function to display a value from a field in a foreign table, it may be more efficient to create a query that contains the fields that you need from both tables and then to base your form or report on that query.
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32817161
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что есть данные, что при использовании var=currentdb.openrecordset("select Name from Names")("Name")
мусор остаётся?
...
Рейтинг: 0 / 0
как грамотно закрыть recordset?
    #32817167
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно открывают. Но я думал, что в DLookup'ах внутри может быть более соптимизированный алгоритм, нежели в универсальных запросах вообще.
А откуда этот соптимизированный алгоритм там возмется?
И как можно еще более оптимизировать какое-нибудь условие типа "Поле=Значение"? Есть индекс - будем его использовать, нет индекса - будем сканить. Это в случае запроса. А в случае DLookup'а - хрен его знает как ему в голову взбредет поиск выполнять.

И рекордсеты внутри они просто обязаны корректно закрывать.
Угу. Обязаны. Конструкция типа CurrentDb.OpenRecordset("трампампам")("трампампам") тоже обязана рекордсеты закрывать. Однако...
...
Рейтинг: 0 / 0
25 сообщений из 84, страница 1 из 4
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / как грамотно закрыть recordset?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]