SQL ADODB Recordset select distict находится в алфавитном порядке
Я использую набор записей ADODB в VBA. Когда я использую Select Distinct в SQL-запросе записи ADODB, результаты отображаются в алфавитном порядке. Мне нужны результаты в том порядке, в котором они находятся в данных. Это возможно?
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
DatPath = ThisWorkbook.Path & "\Temp\" & TB.Name
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DatPath & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
cn.Open strCon
strSQL = "SELECT Distinct(Period) from [Data$] "
rs.Open strSQL, cn, 3, 3
ThisWorkbook.Sheets("ADO Out").Cells.Clear
ThisWorkbook.Sheets("ADO Out").Activate
ThisWorkbook.Sheets("ADO Out").Cells(1, 1).CopyFromRecordset rs
1 ответ
Вот два обходных пути, которые оба включают извлечение всех Period
записей.
Range.RemoveDuplicates
удалит дубликаты при сохранении заказа
Sub UnorderedPeriod()
Dim DatPath As String, strCon As String, strSQL As String
Dim cn As Object, rs As Object
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
DatPath = ThisWorkbook.Path & "\Temp\" & TB.Name
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DatPath & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
cn.Open strCon
strSQL = "SELECT [Period] from [Data$]"
rs.Open strSQL, cn, 3, 3
With ThisWorkbook.Sheets("ADO Out")
.Cells.Clear
.Cells(1, 1).CopyFromRecordset rs
.Activate
.Columns(1).RemoveDuplicates Columns:=1
End With
End Sub
Используйте ArrayList
удалить дубликаты
Function CopyDistinctFromRecordset(rs As Object, Target As Range)
Dim list As Object
Dim data
Dim x As Long
rs.MoveFirst
data = rs.getRows
Set list = CreateObject("System.Collections.ArrayList")
For x = 0 To UBound(data, 2)
If Not list.Contains(data(0, x)) Then list.Add data(0, x)
Next
Target.Resize(list.Count).Value = Application.Transpose(list.ToArray)
End Function