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, код немножко изменится.