Ошибка при использовании объекта WorkbookConnection для запуска запроса вставки - PullRequest
0 голосов
/ 29 января 2020

Я использую VBA для обновления sh соединения данных в книге Excel с строковой переменной, используемой для выполнения запроса.

При использовании запроса SELECT все работает как надо; если это запрос INSERT, он генерирует прикладную или объектную ошибку на Connections(ConnectionName).Refresh

Ошибка не повторяется, если я запускаю код до точки, где он добавляет строку запроса в Передача данных и вручную нажмите кнопку Refre sh в Excel.

Sub UploadData()
Dim wb As Workbook
Dim UploadSheetNum As Integer
Dim QueryCol As String
Dim QueryString As String
Dim CurRowString As String
Dim ConnName As String

Set wb = ThisWorkbook
UploadSheetNum = 3
QueryCol = "H"
ConnName = "DataConn"
Call VBAModule_v1.SwitchtoSheet(UploadSheetNum, wb)
For i = 1 To VBAModule_v1.GetLastRow(QueryCol)
    CurRowString = wb.Sheets(UploadSheetNum).Range(QueryCol & i)
    QueryString = QueryString & CurRowString & Chr(10)
Next i
Call VBAModule.RefreshConnection(ConnName, QueryString, wb)
End Sub

Sub RefreshConnection(ConnectionName As String, Query As String, wb As Workbook)
wb.Activate
On Error GoTo ExitProc
With wb.Connections(ConnectionName).ODBCConnection
    .BackgroundQuery = False
    .CommandText = Query
End With
wb.Connections(ConnectionName).Refresh
DoEvents
Exit Sub

ExitProc:
MsgBox ("Error Sub RefreshConnection: Issue with ConnectionName '" & _
  ConnectionName & "' or Query - " & Err.Description)

End Sub

1 Ответ

0 голосов
/ 29 января 2020

На самом деле только что споткнулся за ответ. Таким образом, объект WorkbookConnection работает для запросов, которые возвращают результат, например, запросы Select, но не так много для запросов, которые не включают, например, Insert, Update, Deletes.

Следующая подпрограмма выполнит запрос Insert без ошибки:


Sub RunInsertQuery(InsertTable As String, InsertValues As String)

On Error GoTo ExitProc

        Dim Dataconn As Object

        Set Dataconn = CreateObject("ADODB.Connection")

        connstr = "DRIVER={'SQL DRIVER To Use'};" & _
                "SERVER='SERVERNAME to Connect to';" & _
                "PORT='PortNumber'" & _
                "DATABASE='Database Name';" & _
                "UID='User Id to use';" & _
                "PWD='User Password';"

        Dataconn.Open connstr

        Dataconn.Execute "INSERT INTO " & InsertTable & " VALUES " & InsertValues

        Dataconn.Close

        Set Dataconn = Nothing

        Exit Sub

ExitProc:

MsgBox ("Error Sub RunInsertQuery: Issue with Tablename for Insert '" & InsertTable & "' or Values being Inserted - " & Err.Description)

End Sub

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