2016-12-14 5 views
0

Я работаю над сценарием, чтобы прокручивать листы 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 

Любые другие предложения?

+1

набор NOCOUNT на должна быть первая строка кода в хранимой процедуре, а не в коде VBA – GuidoG

+0

все еще получаю ту же ошибку. –

ответ

0

Выяснил это ... после двух + целых дней, потраченных на это!

Изменена CommandText в соответствии с хранимой процедуры:

.CommandText = "Declare @return_Value int EXEC @return_Value = DCSTransfer.dbo.InsertTags '" & Parm1 & "', '" & Parm2 & "', " & Parm3 & "SELECT 'Return Value' = @return_value"