У меня проблемы с добавлением строкового параметра к объекту команды в VBA.Мой код будет работать для всех нестроковых типов данных в моей книге Excel, но выдает следующий текст ошибки при попытке добавить строковое значение к параметру команды:
"Транзакция не может иметь несколько наборов записей с этим типом курсора. Измените тип курсора, зафиксируйте транзакцию или закройте один из наборов записей. "
Этот код будет успешно выполнен, если я использую команду" Usage_ID "и закомментирую команду" Location ".Почему это?Почему использование строки приводит к сбою?
Я вставляю данные в базу данных Redshift, и столбцы таблицы настроены на использование того же типа данных VARCHAR (256), который я использую в запросениже.
Public Sub newInsert()
Dim firstRow As Long
Dim lastRow As Long
Dim currentRow As Long
Dim sh As Worksheet
Set sh = ThisWorkbook.Worksheets("Sheet1")
firstRow = 5
lastRow = 5 '##Just using one row for the test##
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
conn.Open '##using a DSN file here##
On Error GoTo CleanFail
conn.BeginTrans
Dim sql As String
'## This is the full query I want to execute,
' but it hangs, so I am running with one parameter
' at a time for testing. Usage_ID will run with the code below, but
' not location. ##
'sql = "INSERT INTO new_regions.bw_test (usage_id, location) " _
'& "VALUES (?, ?)"
sql = "INSERT INTO new_regions.bw_test (location) " _
& "VALUES (?)"
For currentRow = firstRow To lastRow
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = conn
cmd.CommandType = adCmdText
cmd.CommandText = sql
' ## The first one will run successfully, not the second ##
'cmd.Parameters.Append cmd.CreateParameter("usage_id", adBigInt, adParamInput, , sh.Cells(1, "Q").value)
cmd.Parameters.Append cmd.CreateParameter("location", adVarChar, adParamInput, 256, "test")
cmd.Execute
Next
conn.CommitTrans
CleanExit:
conn.Close
Exit Sub
CleanFail:
conn.RollbackTrans
MsgBox Err.Description & vbNewLine & "Transaction was rolled back, no changes were made", vbExclamation
Resume CleanExit
End Sub