MS Excel VBA
August 13, 2022
Запуск хранимых процедур из VBA.
Для домашнего учёта раньше часто приходилось запускать хранимый sql код из MS Excel. В примере ниже идёт обращение к MS SQL Server, но, в принципе, это может быть любая РСУБД, в которой есть хранимые процедуры и до которой можно достучаться при помощи ODBC, например.
Вызываемая хранимая процедура не возвращает набор данных в MS Excel, а делает некоторые манипуляции внутри БД.
ALTER PROCEDURE [dbo].[p_MakeSource] (@d1 datetime='20140101' , @d2 datetime='20300101', @N smallint=1 )
Собственно, далее в коде всё понятно, старый добрый Visual Basic - привет нулевые.
Sub a_ProcExecute() Dim MyCommand As ADODB.Command
Call ini_param 'Инициализация параметров N_param, d1_param, d2_param
Call OpenConnection
Set GetSourceCommand = New ADODB.Command
dd1 = Now
With GetSourceCommand
.ActiveConnection = Connection
.CommandText = "dbo.p_MakeSource"
.CommandType = adCmdStoredProc
.NamedParameters = True
.Parameters.Append .CreateParameter("@N", adInteger, adParamInput, , N_param)
.Parameters.Append .CreateParameter("@d1", adDBDate, adParamInput, , d1_param)
.Parameters.Append .CreateParameter("@d2", adDBDate, adParamInput, , d2_param)
.Execute
End With
dd2 = Now
MsgBox "Расчеты произведены " & dd2, vbExclamation, dd1 & " Слава, слава великому Алексею Геннадьевичу!!! "On Error GoTo KillAdo Set GetSourceCommand = Nothing CloseConnection Exit Sub
KillAdo: MsgBox "Ой, ошибка вышла. " & Err.Description, vbCritical Set GetSourceCommand = Nothing Set Connection = Nothing Application.ScreenUpdating = True End Sub
Единственное, что навскидку сразу не понять, строка с передачей параметров из кода VBA в хранимую процедуру, типа
.Parameters.Append .CreateParameter("@d2", adDBDate, adParamInput, , d2_param)Поможет гугление "ado DataTypeEnum".
PS Если на лист Экселя из хранимой процедуры нужно вернуть какой-то Select, код немножко изменится.