Есть ли способ автоматизировать выполнение определенного запроса и сохранить O / P этого запроса в файле Excel? - PullRequest
1 голос
/ 29 апреля 2020

У меня около 80 запросов, которые я выполняю ежедневно для целей мониторинга. Все они являются запросами SELECT, мы собираем в основном счетчики. Это оказывается скучной задачей, которая просто выполняет запрос и вручную записывает выходные данные в файл Excel.

Например, это мои запросы с их примерами соответствующих выходных данных:

Запрос # 1: SELECT count(*) from table WHERE certain_condition = 'True'
ВЫХОД: 985

Запрос № 2: SELECT count(*) from another_table WHERE yet_another_condition = 'True'
ВЫХОД: 365

Запрос № 80: SELECT count(*) from another_table WHERE yet_another_condition = 'True' OUTPUT: 578

Мое требование таково:

Захватите результаты этих 80 запросов и вставьте их в файл Excel в определенном порядке.
В Excel я уже иметь заголовок (состояние) в клетке. Поэтому я хочу, чтобы выходные данные каждого запроса отображались в определенную c ячейку, соответствующую заголовку (условию).

Есть ли способ автоматизировать эту скучную задачу, или я застрял на вечность как бот?

PS: я использую Toad для Oracle v 12.9.0.71 базы данных

1 Ответ

1 голос
/ 29 апреля 2020

Как Тим говорил, ADO - ваш лучший выбор здесь. К счастью для вас, я просто должен был сделать это сам, так что, надеюсь, это сработает для вас.

Sub SQLQuery(sqlServer As String, strDatabase As String, strQuery As String, _
exportLocation As Variant, strUserId As String, strPassword As String)

Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset

Set conn = Nothing
Set rs = Nothing

'create the Connection and Recordset objects
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset

'open the connection
conn.Open _
    "Provider=SQLOLEDB;" & _
    "Data Source=" & sqlServer & ";" & _
    "Initial Catalog=" & strDatabase & ";" & _
    "User ID=" & strUserId & ";" & _
    "Password=" & strPassword & ";" & _
    "Trusted_Connection=" & "True" & ";"

'execute
Set rs = conn.Execute(strQuery)

'check if data exists
If Not rs.EOF Then

    'if so, copy to location
    exportLocation.CopyFromRecordset rs

    'close the recordset
    rs.Close

End If

'clean up
conn.Close
Set conn = Nothing
Set rs = Nothing

End Sub

Пример использования этой подпрограммы:

Call SQLQuery( _
    oSERVER, _
    oDB, _
    "SELECT count(*) from table WHERE certain_condition = 'True'", _
    ThisWorkbook.Sheets("Sheet1").Cells(1, 1), _
    oUSER, _
    oPW)

Просто для справки, вы, вероятно, будете иметь чтобы активировать библиотеку Microsoft ActiveX Data Objects 2.8 в ваших ссылках, чтобы это работало.

...