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