У меня есть несколько способов выполнения хранимой процедуры из Excel VBA. На самом деле, я даже не заинтересован в возврате результатов этой процедуры обратно в Excel, мне просто нужно начать процедуру. Впрочем, когда процедура запущена, Excel «зависает» и потому непригоден для клиента, особенно когда время выполнения процедуры составляет 5 минут и более.
Я смотрел на другие решения, в которых люди создавали новое приложение в одной книге, но не было ясно, как выполнить процедуру в этом контексте. Другим решением было открытие второй книги в фоновом режиме (скрытой для пользователя) и автоматический запуск макроса при открытии этой книги, но мне неясно, когда я знаю, чтобы закрыть ее.
Мой код для вызова процедуры, обратите внимание, это связано с проблемой тайм-аута, любые мысли по этому поводу тоже приветствуются:
Sub Workbook_Open()
'Create connection string variable
Dim item As String
Dim con As New ADODB.Connection
'Build the connection string
con.ConnectionString = "Provider=SQLNCLI11;" _
& "Server=MyServerName;" _
& "Database=Oracle;" _
& "Integrated Security=SSPI;"
'Open the connection
con.Open
item = vbNullString
item = "exec dbo.SP_ORACLE_PULL"
con.Execute (item)
'Close the connection
con.Close
End Sub
У кого-нибудь есть рекомендуемые подходы? Лучше всего открыть книгу, скрытую в фоновом режиме, и запустить процедуру оттуда? как узнать, когда закрыть эту книгу и вернуть статус обратно в исходную книгу? Будет ли это все еще «висеть» у клиентов всех открытых книг Excel. Я искал по всему, и я не нашел никаких примеров кода для этого типа сценария.
Это все время, пока мы не сможем формализовать более корпоративное решение за 4-6 месяцев.