Я пытаюсь запустить следующее:Выполнение msdb.dbo.sp_send_dbmail через ADO изнутри VBA в Excel
Sub sendMailViaADO()
Dim cmdStoredFunct As ADODB.Command
Dim r As ADODB.Recordset
Dim strConn As String
strConn = _
"PROVIDER=SQLOLEDB.1;" & _
"P-----D=xxxxx;" & _
"PERSIST SECURITY INFO=True;" & _
"USER ID=yyyyyy;" & _
"INITIAL CATALOG=xxxxx;" & _
"DATA SOURCE=xxxxx;" & _
"USE PROCEDURE FOR PREPARE=1;" & _
"AUTO TRANSLATE=True;" & _
"CONNECT TIMEOUT=0;" & _
"COMMAND TIMEMOUT=0" & _
"PACKET SIZE=4096;" & _
"USE ENCRYPTION FOR DATA=False;" & _
"TAG WITH COLUMN COLLATION WHEN POSSIBLE=False"
Set c= New ADODB.Connection
c.ConnectionString = strConn
c.CommandTimeout = 0
c.Open
Set cmdStoredFunct = New ADODB.Command
Set cmdStoredFunct.ActiveConnection = c
Set r = New ADODB.Recordset
With cmdStoredFunct
.CommandText = "msdb..sp_send_dbmail"
.CommandText = adCmdStoredProc
.Parameters.Append .CreateParameter("@recipients", adVarWChar, adParamInput, 50, "[email protected];")
.Parameters.Append .CreateParameter("@subject", adVarWChar, adParamInput, 50, "xxx")
.Parameters.Append .CreateParameter("@body", adVarWChar, adParamInput, 50, "yyy")
Set r = .Execute
End With
'>>>
'>>>is there another way like the following ?
'Dim sTemp1
'sTemp1 = "{call msdb.dbo.sp_send_dbmail('[email protected]', 'xxx', 'yyy')}"
'>>>
If Not (cmdStoredFunct Is Nothing) Then
Set cmdStoredFunct.ActiveConnection = Nothing
Set cmdStoredFunct = Nothing
End If
If Not (c Is Nothing) Then
If (c.State And 1) = 1 Then c.Close
End If
End Sub
Он erroring по команде выполнить Set r = .Execute
с этим сообщением:
Выглядит так, как будто я нашел хранимую процедуру ok, но строка, которую она использует, вызывает это загадочное исключение.
Как исправить это?
Не уверен, что это проблема, но похоже, что у вас отсутствует dbo в 'msdb..sp_send_dbmail', который будет' msdb.dbo.sp_send_dbmail' –
Есть ли причина, по которой вы отправляете письма через SQL Server ? Считаете ли вы использование инструмента командной строки, такого как «BLAT», или используя любое количество библиотек SMTP VBA для этого? Тогда не задействован SQL Server. Например, вы можете сделать выше в «BLAT» в одной строке в пакетном файле без необходимости подключения к базе данных –
@ Nick.McDermaid благодарит за информацию - у нас установлен SQL-сервер, поэтому мне не нужно устанавливать какие-либо третьи инструмент партии. Я думаю, что я очень близко в коде, который я опубликовал в вопросе, - можете ли вы помочь ему ответить? – whytheq