powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADO recordset ест пямять
11 сообщений из 11, страница 1 из 1
ADO recordset ест пямять
    #34660792
scoritt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть метод который открывает некое подключение к таблице в БД через ADO.RECORDSET. По замыслу окрытый набор записей (если в нём существует хоть одна запись) возвращается. Если записей нет, то закрывается и возвращантся nothing. Понятно что при открытии набоа записей выделяется память (у меня примерно мега 1,5). Но почему при закрытии объекта ADO.Recordset она не освобождается? Метод close разве не освобождает ресурсы? Функция вызывается в цикле и через пару проходов память заканчивается (при том что известно, что записей нет).
Функция:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Public Function GetAgSRecord(ID As String, tbName As String, fldA As String, mrk As Boolean) As ADODB.Recordset
    Dim rst As New ADODB.Recordset
    Dim cmd As New ADODB.Command
    Dim sql As String
    Dim keyField As String
    
    On Error GoTo eL
    
    keyField = rvKeys(tbName)
    
    sql = "SELECT " & keyField & ", Sum(" & fldA & ") as Agr FROM " & tbName & " WHERE " & keyField & "='" & trade & "' GROUP BY " & keyField
    rst.Open sql, rvConn, adOpenKeyset, adLockOptimistic
    
    If rst.EOF = False And rst.BOF = False Then
        Set GetAgSRecord = rst
    Else
        rst.Close
        Set GetAgSRecord = Nothing
    End If
End Function
...
Рейтинг: 0 / 0
ADO recordset ест пямять
    #34660828
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
зачем вот это
Код: plaintext
Dim cmd As New ADODB.Command

и вот это
Код: plaintext
On Error GoTo eL

попробуй так после передачи рекордсета
Код: plaintext
1.
rst.Close
set rst= Nothing
...
Рейтинг: 0 / 0
ADO recordset ест пямять
    #34660849
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересная проблемка. Покажите весь код - интересно оценить откуда закус памяти.
И, есть предположение, что Dim rst as New ADODB.Recordset - плохая конструкция.
...
Рейтинг: 0 / 0
ADO recordset ест пямять
    #34660891
scoritt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
command и goto - это от старого кода. Можно считать что их нет (в процедуре их действительно нет). Попробовал set...=nothing. Всё равно не освобождает. Даже если закрыть rvConn, всё равно память остаётся забитой. Как выделяется на строчке
[src vba]
rst.Open sql, rvConn, adOpenKeyset, adLockOptimistic
[\src]
так и не освобождается больше... Может кэш какой есть?
...
Рейтинг: 0 / 0
ADO recordset ест пямять
    #34660894
scoritt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем дело не в раннем и позднем связывании...
...
Рейтинг: 0 / 0
ADO recordset ест пямять
    #34661054
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какой cusrorlocation у recordset и connection ?
БД MSSQL ?
...
Рейтинг: 0 / 0
ADO recordset ест пямять
    #34661199
scoritt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
big-dukeкакой cusrorlocation у recordset и connection ?
БД MSSQL ?


И у connection и у recordset = 2 (server я так понимаю)
...
Рейтинг: 0 / 0
ADO recordset ест пямять
    #34661229
scoritt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
База - excel через
rvConn.Provider = "MSDASQL"
rvConn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & path & ";ReadOnly=False;"
rvConn.Open
А что cursorlocation как-то влияет на память?
...
Рейтинг: 0 / 0
ADO recordset ест пямять
    #34661253
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для хранения своих данных все курсоры используют временные ресурсы - память, файл подкачки, временные файлы. Курсоры на клиентской стороне требуют выделения ресурсов на клиетсокй машине, а курсор на серверной стороне - на сервере.
Еще. Чем обусловлен такой выбор : adOpenKeyset, adLockOptimistic ?
...
Рейтинг: 0 / 0
ADO recordset ест пямять
    #34661285
scoritt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://support.microsoft.com/kb/319998 - MS как всегда...
Чтобы пользоваться данными надо закрывать книгу.
Вопрос закрыт. Спасибо всем.
...
Рейтинг: 0 / 0
ADO recordset ест пямять
    #34661315
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scoritt
Чтобы пользоваться данными надо закрывать книгу.

А вы подключались к открытой книге через ADO ? Жесть.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADO recordset ест пямять
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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