2014-01-15 3 views
3

Предположим, что я буду запускать различные запросы, используя нижеприведенный раздел. Должны ли я set и closerecordset каждый раз ?. Или должен set и close это только один раз вместе с моим подключением (cn)? Нужно ли мне вообще закрывать мой рекордер, если я закрываю соединение?Когда должен быть закрыт набор записей?

Sub QueryPC(ByRef ReturnArray() As Variant, COB As Date, PC As Variant, FileCode As String) 
    Dim srtQry As String, tmpArray() As Variant 

    Set rs = CreateObject("ADODB.Recordset") 

    srtQry = "whatever" 

    Set rs = cn.Execute(srtQry) 

    If Not rs.EOF Then 
     tmpArray = rs.GetRows: TransposeArray tmpArray, ReturnArray 
    Else 
     ReDim ReturnArray(0) 
    End If 

    rs.Close 

End Sub 
+1

Набор записи специфичны для конкретного запроса, так что имеет смысл обращаться с этим, как вы делаете прямо сейчас. –

ответ

1

Закрытие rs в запросе, как в вашем коде, хорошо. Еще лучше, если бы вы сделали то же самое с своим соединением!

Правило - в течение нескольких лет - это открыть соединение как можно позже и закрыть как можно скорее. Очевидно, вы получили соединение как уровень mudule или даже более глобальную переменную: это плохая практика. Вы должны создать его там, где вы его используете, и закрыть его.

Не слишком много образцов VBA делают это, возможно потому, что образцы кода VBA, которые люди копируют, обычно довольно стары или потому что, когда люди, пишущие образцы, хорошо разбираются в VBA, они не являются разработчиками, работающими полный рабочий день.

Приветствие -

+0

Ничего себе! Совсем непротиворечивый !. Я действительно думал, что логика заключается в том, чтобы открыть соединение один раз, выполнить все ваши запросы, а затем закрыть его! Могу ли я спросить, почему лучше всего открывать-как-поздно-возможно-закрыть-как-бы скоро? –

+1

Основная причина заключается в том, что при открытии соединения используются ресурсы на сервере базы данных. Если вы этого не сделаете, вы можете уйти с более дешевой машиной. ура –

Смежные вопросы