VBA/Excel - запрос Apache Drill

Я пытался построить макрос для запроса Apache Drill. Я не могу заставить его работать.

Я попробовал два способа.

Сначала с помощью QueryTables.Add, Он продолжает добавлять результаты, чтобы не обновлять результаты, а только сдвигать старые результаты вправо и вставлять новый набор в A1.

Q: как сделать так, чтобы запрос удалял старые результаты и помещал новые в одно и то же место?

Вторая попытка с помощью ADODB.Recordset, Связь не работает

Ошибка:

[Microsoft] [ODBC Driver Manager] Не найдено имя источника данных и не указан драйвер по умолчанию

Q: может ADODB.Connection, ADODB.Recordset быть использованы для запроса данных из Appachi Drill?

Первая попытка

Sub S3Download()

Dim sConn As String
Dim oQt As QueryTable
Dim sSql As String

sConn = "ODBC;DSN=MapR Drill;"
sSql = "SQL statement"
Set oQt = Sheets("Data").QueryTables.Add(Connection:=sConn,_
         Destination:=Sheets("Data").Range("A1"), SQL:=sSql)

        With oQt
            .Name = "Query1"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = False
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
            .Refresh BackgroundQuery:=True
            .RefreshStyle = xlInsertDeleteCells
        End With
End Sub

Вторая попытка

Sub S3_download()

Dim oCn As ADODB.Connection
Dim oRS As ADODB.Recordset
Dim ConnString As String
Dim SQL As String


Dim qt As QueryTable
ThisWorkbook.Sheets("Data").Activate

ConnString = "Driver={MySQL ODBC 5.1 Driver};DSN=MapR Drill;"
Set oCn = New ADODB.Connection
oCn.ConnectionString = ConnString
oCn.Open

SQL = "SQL statement"

Set oRS = New ADODB.Recordset
oRS.Source = SQL
oRS.ActiveConnection = oCn
oRS.Open

Set qt = ThisWorkbook.Sheets("Data").ListObjects.Add(SourceType:=XlListObjectSourceType.xlSrcQuery, Source:=oRS, _
            Destination:=ThisWorkbook.Sheets("Data").Range("A1")).QueryTable

qt.Refresh

If oRS.State <> adStateClosed Then
oRS.Close
End If

If Not oRS Is Nothing Then Set oRS = Nothing
If Not oCn Is Nothing Then Set oCn = Nothing

End Sub

1 ответ

Решение

Я обошел первый способ (макрос сначала очищает таблицу "Данные", а затем добавляет результаты запроса в нужное место)

Sub S3Download()

    Dim sConn As String
    Dim oQt As QueryTable
    Dim sSql As String


    'removing old query data

    Sheets("Data").Cells.ClearContents

    For Each qTable In Sheets("Data").QueryTables
                qTable.Delete
    Next qTable



    sConn = "ODBC;DSN=MapR Drill;"
    sSql = "SQL statement"
    Set oQt = Sheets("Data").QueryTables.Add(Connection:=sConn,_
             Destination:=Sheets("Data").Range("A1"), SQL:=sSql)

            With oQt
                .Name = "Query1"
                .FieldNames = True
                .RowNumbers = False
                .FillAdjacentFormulas = False
                .PreserveFormatting = True
                .RefreshOnFileOpen = False
                .BackgroundQuery = True
                .RefreshStyle = xlInsertDeleteCells
                .SavePassword = False
                .SaveData = True
                .AdjustColumnWidth = False
                .RefreshPeriod = 0
                .PreserveColumnInfo = True
                .Refresh BackgroundQuery:=True
                .RefreshStyle = xlInsertDeleteCells
            End With
    End Sub
Другие вопросы по тегам