Gary Heath Ответов: 3

Как обновить таблицу SQL server в VBA ?


У меня есть код, который, кажется, работает, но что-то не так ... Если я выполняю следующий код VBA, он действительно обновляет базу данных, но они терпят неудачу в операторе CLOSE, говоря Error 3704, файл уже закрыт. Итак, очевидная вещь - просто удалить оператор CLOSE, но я читал, что мне не нужно открывать таблицу, чтобы сделать обновление, так что должен ли я использовать другую опцию в строке, которая выполняет оператор SQL (я пробовал обновить, но это не сработало) ?!?

Sub UpdateDatabaseLeague(temp)

On Error GoTo 0

SQLstr = "UPDATE League SET SessionNo = " & myEmailSessionNo & " WHERE League.[ID] = " & temp

Set KA_RS_League = New ADODB.Recordset

If KA_RS_League.State = adStateOpen Then KA_RS_League.Close

KA_RS_League.Open SQLstr, KA_DB, adOpenDynamic, adLockOptimistic

KA_RS_League.Close

End Sub


Что я уже пробовал:

Я попробовал использовать UPDATE вместо OPEN и исследовал онлайн, чтобы выяснить, что мне не нужно открывать таблицу ...

KA_RS_League.Update SQLstr, KA_DB, adOpenDynamic, adLockOptimistic

3 Ответов

Рейтинг:
25

F-ES Sitecore

Если вы делаете что-то, что не нуждается в записях в результате (например, обновление, вставка или удаление), то вы можете использовать объект ADODB.Connection вместо этого и использовать его метод Execute для выполнения вашего SQL.

Google "adodb.connection" или "adodb.connection execute" для примера кода.


Gary Heath

Спасибо

Рейтинг:
13

Maciej Los

Вы должны использовать Объект adodb.Команда[^] вместо ADODB.Recordset.


Gary Heath

Спасибо

Maciej Los

Всегда пожалуйста.

Рейтинг:
1

Gary Heath

Чтобы помочь кому-то еще, как я, кто кодирует, но не понимает всех тонкостей и терминологии, этот код работает для меня :-)

Option Explicit
Option Base 1
Option Compare Text

Sub UpdateDatabaseLeague(temp)

On Error GoTo 0

SQLstr = "UPDATE League SET SessionNo = " & myEmailSessionNo & " WHERE League.[ID] = " & temp

Set KA_RS_League = New ADODB.Recordset

If KA_RS_League.State = adStateOpen Then KA_RS_League.Close

Set KA_RS_League = KA_DB.Execute(SQLstr)

End Sub