VB中SQL合計函數的使用
|
結構化查詢語言SQL是操作數據庫的國際標準語言,在開發VB數據管理軟件過程中,利用SQL可以使數據的操作大為方便,使VB與數據庫的聯系更加緊密。
1 問題的提出
在數據庫的操作中,常常會涉及數據表中記錄的個數、某字段的最大值或最小值、某字段的平均以及某字段的總和等計算。這些計算當然可以通過設計算法,利用VB程序本身來實現。但是如果利用VB中的SQL合計函數,則求解過程大為簡化,程序效率大大提高。
VB中的SQL合計函數主要包括記錄個數(COUNT)、最大值(MAX)、最小值(MIN)、平均值(AVG)以及求和(SUM)。雖然這些合計函數十分有用,但關于它的使用方法在文獻資料甚至是數據庫高級編程專著中卻少有介紹,使涉足VB的開發人員往往舍近求遠、棄簡就繁,放棄對這些函數的使用。VB的幫助系統雖然給出了這些函數的引用格式,但如何將它們應用在VB程序設計中則不甚明了。
2 SQL合計函數的引用格式
我們通過一個實例來說明SQL合計函數的使用。為此,先利用VB的可視化數據管理器建立一個數據庫文件sql.mdb,再創建一個數據表salary,salary包括三個字段,由三個記錄組成,如圖1所示。

合計函數的引用格式為:
COUNT(*) 計算數據表中記錄個數
MAX(年齡) 給出最大年齡
MIN(年齡) 給出最小年齡
AVG(工資) 計算平均工資
SUM(工資) 計算工資總和
3 在VB中使用SQL合計函數
在VB中使用SQL合計函數需要借助于SELECT語句,例如:
| SELECT MAX(年齡) AS maxa, SUM(工資) AS sums FROM salary |
可求出最大年齡和工資總和,結果分別存放到動態字段變量maxa和sums中。
SELECT語句還可帶有WHERE短語,以限制參與計算的記錄。例如:
| SELECT SUM(工資) AS sumsa FROM salary WHERE(年齡>30) |
可求出年齡大于30歲的工資總和,結果存放到動態字段變量sumsa中。
本文將maxa、sums、sumsa稱為動態字段變量,因為這些字段不是數據表中固有的,是我們在程序中單獨命名的。
4 使用SQL合計函數的實例
在該實例中,將創建一個簡單的數據庫應用程序,可以瀏覽數據表salary中的各記錄,并在狀態欄中顯示相關數據。
在窗體上放置一個DBGrid控件(需加載Microsoft Data Bound Grid Control)、一個狀態欄控件(需加載Microsoft Windows Common Controls 6.0)、一個Data控件和一個按鈕控件,如圖2所示。各對象的屬性設置如表1所示。

編寫代碼如下:
| Private Sub Command1_Click() Dim query As Recordset Dim numofpeople As Integer, maxage As Integer, minage As Integer Dim avgsalary As Single, totalsalary As Single Set query = Data1.Database.OpenRecordset("SELECT COUNT(*) as num, MAX(年齡) as maxa," _ & "MIN(年齡) as mina, AVG(工資) as avgs, SUM(工資) as sums FROM salary ") numofpeople = query.Fields("num") .Value maxage = query.Fields("maxa") .Value minage = query.Fields("mina") .Value avgsalary = Format(query.Fields("avgs") .Value, "0.00") ' 結果保留兩位小數 totalsalary = query.Fields("sums") .Value StatusBar1.Panels(1).Text = "人數:" & numofpeople StatusBar1.Panels(2).Text = "最大年齡:" & maxage StatusBar1.Panels(3).Text = "最小年齡:" & minage StatusBar1.Panels(4).Text = "平均工資:" & avgsalary StatusBar1.Panels(5).Text = "工資總額:" & totalsalary End Sub |
運行該程序,表salary中記錄內容顯示在DBGrid控件中,點擊"顯示狀態欄"按鈕,則狀態欄中顯示各相關數據,如圖3所示。

在引用這些動態字段變量時,也可通過索引號來進行,如query.Fields(0)與query.Fields("num")等價。
VB在對合計函數的使用方式上也靈活多樣,例如通過以下代碼也可達到同樣目的:
| Data1.RecordSource = "SELECT COUNT(*) as num, MAX(年齡) as maxa, MIN(年齡) as mina, " _ & " AVG(工資) as avgs, SUM(工資) as sums FROM salary " Data1.Refresh numofpeople = Data1.Recordset.Fields("num") .Value maxage = Data1.Recordset.Fields("maxa") .Value minage = Data1.Recordset.Fields("mina") .Value avgsalary = Format(Data1.Recordset.Fields("avgs") .Value, "0.00") totalsalary = Data1.Recordset.Fields("sums") .Value |
5 結束語
從前面的介紹可以看出,使用合計函數方便直觀、簡化程序。我們甚至還可以利用StDev、StDevP、Var、VarP等合計函數來簡化數據統計中標準偏差和方差的計算,充分發揮這些函數的作用。