Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADO recordset ест пямять / 11 сообщений из 11, страница 1 из 1
16.07.2007, 12:51
    #34660792
scoritt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO recordset ест пямять
Есть метод который открывает некое подключение к таблице в БД через 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
16.07.2007, 13:04
    #34660828
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO recordset ест пямять
зачем вот это
Код: plaintext
Dim cmd As New ADODB.Command

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

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


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

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


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