《VBA數據庫解決方案》教程(版權10090845)是我推出的第二套教程,目前已經是第二版修訂了。這套教程定位于中級,是學完字典后的另一個專題講解。數據庫是數據處理的利器,教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作,教程第一版的修訂內容主要是完成所有程序文件的32位和64位OFFICE系統測試。
這套教程共兩冊,八十四講,今后一段時間會給大家陸續推出修訂后的教程內容。今日的內容是:VBA數據庫解決方案第二十講:Select查詢表達式From數據區域[Where 條件表達式]Order by 排序字段
【分享成果,隨喜正能量】160 沉潛是為了蓄勢待發,沉潛是為了等待因緣。鯨豚沉潛于大海,幽蘭深藏于山谷,能夠經得起沉潛的人,才會有更高的成就。正如一年的樹木只能當柴燒,十年的樹木可以制成椅凳櫥柜,百年的樹木才能成為棟梁。
第二十講 SQL在VBA中幾種常見的表達方式
在之前的講解中我們從ADO的創建、連接到記錄集的操作,已經講了很多VBA對數據庫的實際操作,到這里,讀者應該對用VBA操作數據庫有了一個清晰的印象,從各個步驟上看我們不難得出一個重要結論:要讓ADO有效工作,關鍵是我們給它發出什么樣的SQL指令。
在每一講的講解中,我已經簡單介紹了SQL的情況。現在我們有必要總結一下VBA中SQL語句的幾種常見查詢的表達方式。
3 Select 查詢表達式 From 數據區域 [Where 條件表達式] Order by 排序字段
1) 可以使用Top限制返回的行數。如:下面語句返回前2條記錄: Sql = "Select top 2 * from 員工信息"
2) 通過使用Order by可以對查詢結果按一列或多列進行排序。
'首先按語文成績降序排列,語文成績相同的按數學成績升序排列
Sql = "Select * from學生信息Order by 語文 desc,數學 asc"
備注:ASC是升序排列,在不指定排序方式的情況下是默認的,因此可以省略.
如員工信息中我們要顯示的是,按生日排序的前5人 SQL語句如下:
strSQL = "SELECT Top 5 * FROM 員工信息 Order by 出生日期 asc"
代碼:
Sub mynz_20_3() '第20講 結構化查詢語言SQL在VBA中幾種常見的查詢表達方式 排序前5名顯示
Dim cnADO As Object, rsADO As Object
Dim strPath As String, strSQL As String
Dim i As Integer
Set cnADO = CreateObject("ADODB.Connection")
Set rsADO = CreateObject("ADODB.RecordSet")
strPath = ThisWorkbook.Path & "\mydata2.accdb"
cnADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath
strSQL = "SELECT Top 5 * FROM 員工信息 Order by 出生日期 asc"
rsADO.Open strSQL, cnADO, 1, 3
Sheets("20").Select
Cells.ClearContents
For i = 0 To rsADO.Fields.Count - 1
Sheets("20").Cells(1, i + 1) = rsADO.Fields(i).Name
Next i
For i = 1 To rsADO.RecordCount
For j = 0 To rsADO.Fields.Count - 1
Sheets("20").Cells(i + 1, j + 1) = rsADO.Fields(j)
Next j
rsADO.MoveNext
Next i
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
End Sub
代碼截圖:
顯示的結果:
今日內容回向:
1 本講講了幾種常用的SQL查詢,讀者是否明白?
2 上述實例希望讀者能自己親自操作一下。
本講內容參考程序文件:VBA與數據庫操作(第一冊).xlsm
我20多年的VBA實踐經驗,全部濃縮在下面的各個教程中: