Я работаю над сценарием, чтобы прокручивать листы Excel, передавать параметры в процедуру SQL Server, которая обрабатывает три пакета и генерирует записи на основе парм. Когда я делаю вызов, он действительно правильно передает параметры, выполняет процедуру и записывает записи, но затем я получаю ошибку времени выполнения «1004 Запрос не запускался ...»Excel VBA Call to SQL Сохраненная процедура Возврат ошибки подключения Bogus
Я нашел комментарии, которые state to change Фоновый запрос = False - проверка. Установите NoCount On - проверьте ... все еще получая ошибку.
Процедура SQL Server включает в себя параметр ReturnValue parm (1/0), который я не передаю, потому что он указывает «Слишком много параметров», когда я пытаюсь это сделать. Возможно, это проблема? Не знаете, как вернуть возвращаемое значение.
Вот мой код VBA:
Sub CallProc()
Dim ws As Worksheet
Worksheets("AllTags").Activate
Dim Parm1 As String
Dim Parm2 As String
Dim Parm3 As Integer
Dim RowIndex As Long
Dim ReturnValue As Integer
RowIndex = 2
Do While Sheets("AllTags").Cells(RowIndex, 2).Value <> ""
If Sheets("AllTags").Cells(RowIndex, 3).Value > 0 Then
ReturnValue = 0
Parm1 = Sheets("AllTags").Cells(RowIndex, 1).Value
Parm2 = Sheets("AllTags").Cells(RowIndex, 2).Value
Parm3 = Sheets("AllTags").Cells(RowIndex, 3).Value
With ActiveWorkbook.Connections("TagUpload").OLEDBConnection
' SET NOCOUNT ON; ** IT DOESN'T LIKE THIS
.BackgroundQuery = False
.CommandText = "EXECUTE DCSTransfer.dbo.InsertTags '" & Parm1 & "', '" &
Parm2 & "', " & Parm3
.CommandType = xlCmdSql
.Connection = Array(_
"OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security
Info=True;Initial Catalog=DCSTransfer;Data Source=bdata03;Use Proc" _
, _
"edure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation
ID=B-MIS-NWILSON1;Use Encryption for Data=False;Tag with co" _
, "lumn collation when possible=False;")
.RefreshOnFileOpen = False
.SavePassword = False
.SourceConnectionFile = ""
.SourceDataFile = ""
.ServerCredentialsMethod = xlCredentialsMethodIntegrated
ActiveWorkbook.Connections("TagUpload").Refresh
.BackgroundQuery = False
On Error Resume Next ' **** NEVER GETS THIS FAR ***
End With
End If
RowIndex = RowIndex + 1
Loop
End
End Sub
Вот скрипт генерируется, когда я вручную вызвать процедуру в SQL Server и введите Parms:
USE [DCSTransfer]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[InsertTags]
@Badge = N'9046',
@StartTag = N'80996',
@Qty = 70
SELECT 'Return Value' = @return_value
GO
Любые другие предложения?
набор NOCOUNT на должна быть первая строка кода в хранимой процедуре, а не в коде VBA – GuidoG
все еще получаю ту же ошибку. –