Обновление VBA ODBC - PullRequest
       8

Обновление VBA ODBC

0 голосов
/ 25 мая 2010

Это код, который я использую для обновления базы данных SQL:

Public Sub main()

    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset

    Set cnn = New ADODB.Connection
    Set rst = New ADODB.Recordset

    cnn.Open "ConnectionName"
    rst.ActiveConnection = cnn
    rst.CursorLocation = adUseServer

    rst.Source = "Update Table ..."
    rst.Open

    Set rst = Nothing
    Set cnn = Nothing
End Sub

Что я хочу знать, так это то, как и как мне обращаться с первым объектом после его открытия. Я закрываю это? Когда я пытаюсь сделать rst.Close, я получаю ошибку: «Операция не разрешена, когда объект закрыт». Код прекрасно работает без rst.Close, мне интересно, есть ли опасность не закрывать объект.

Ответы [ 2 ]

3 голосов
/ 25 мая 2010

Операция UPDATE не возвращает набор результатов. Поэтому, если выполняется с Recordset объектом, это приводит к пустому и закрытому набору записей. В любом случае его нельзя закрыть, потому что он никогда не был открыт.

Практическое правило:

if rst.State <> adStateClosed then rst.Close

Но, поскольку вы выполняете команду, которая все равно не собирается возвращать данные, предпочтительный способ:

dim cm as ADODB.Command
set cm = new adodb.command
set cm.activeconnection = cnn
cm.commandtype = adCmdText
cm.commandtext = "UPDATE ..."

cm.execute ,, adExecuteNoRecords

Или, если ваш SQL является фиксированной строкой без параметров,

cnn.execute "UPDATE ...",, adExecuteNoRecords

Также, пожалуйста, измените rst.ActiveConnection = cnn на Set rst.ActiveConnection = cnn.

0 голосов
/ 25 мая 2010

Обновление не возвращает строк, поэтому нет необходимости открывать набор записей.

Вы можете выполнить инструкцию напрямую, используя:

Connection.Execute "Update Table ...", [flags]

Чтобы ответить на ваш вопрос, после .Open набор записей закрывается (его .state будет adStateClosed), так как данные не были возвращены, поэтому его установка в ничто является достаточной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...