今天要講的是前兩天提到的,變更「下拉方塊」、「清單方塊」、「圖表」資料來源(RowSource)的方法。我們新增一個「表單」來講解,將表單取名為「F_Day7」,裡面放置兩個「指令按鈕」物件,分別名為「cmd_照供應商排序」與「cmd_照銷售額排序」,放置一個「下拉式方塊」物件,命名為「Combo_供應商」,一個「清單方塊」,命名「List_產品資料」,一個「圖表」物件,命名為「Graph_銷售」。其中,圖表物件可由選單中的「插入」->「圖表」方式來新增。
之後依照以下的標籤名稱、按鈕名稱寫入。
之後於「Form_F_Day7」中貼入以下程式:
Private Sub cmd_照供應商排序_Click()
Combo_供應商.ColumnCount = 4
Combo_供應商.ColumnWidths = "0cm;1.501cm;1.503cm;2cm"
Combo_供應商.ListWidth = "3402"
strSQL = "" & _
"SELECT 供應商.供應商編號, 供應商.供應商, 供應商.連絡人, 供應商.連絡人職稱 " & vbCrLf & _
"FROM 供應商 " & vbCrLf & _
"ORDER BY 供應商.供應商; "
Combo_供應商.RowSource = strSQL
Combo_供應商.SetFocus
Combo_供應商.Dropdown
End Sub
Private Sub cmd_照銷售額排序_Click()
Combo_供應商.ColumnCount = 5
Combo_供應商.ColumnWidths = "0cm;1.501cm;1.503cm;2cm;5"
Combo_供應商.ListWidth = "4502"
strSQL = "" & _
"SELECT 供應商.供應商編號, 供應商.供應商, 供應商.連絡人, 供應商.連絡人職稱, Sum([訂貨明細].[單價]*[訂貨明細].[數量]) AS 銷售額 " & vbCrLf & _
"FROM (供應商 INNER JOIN 產品資料 ON 供應商.供應商編號 = 產品資料.供應商編號) INNER JOIN 訂貨明細 ON 產品資料.產品編號 = 訂貨明細.產品編號 " & vbCrLf & _
"GROUP BY 供應商.供應商編號, 供應商.供應商, 供應商.連絡人, 供應商.連絡人職稱 " & vbCrLf & _
"ORDER BY Sum([訂貨明細].[單價]*[訂貨明細].[數量]) DESC; "
Combo_供應商.RowSource = strSQL
Combo_供應商.SetFocus
Combo_供應商.Dropdown
End Sub
Private Sub Combo_供應商_AfterUpdate()
If Combo_供應商 <> "" Then
strSQL = "" & _
"SELECT 產品資料.產品編號, 產品資料.產品, 產品資料.類別編號 " & vbCrLf & _
"FROM 產品資料 " & vbCrLf & _
"WHERE (((產品資料.供應商編號)=" & Combo_供應商 & ")); "
List_產品資料.RowSource = strSQL
Else
List_產品資料.RowSource = ""
End If
End Sub
Private Sub List_產品資料_Click()
If List_產品資料 <> "" Then
strSQL = "" & _
"SELECT Format([訂單日期],'e年 第q季') AS 年月, Sum(訂貨明細.數量) AS 數量之總計 " & vbCrLf & _
"FROM 訂貨主檔 INNER JOIN 訂貨明細 ON 訂貨主檔.訂單號碼 = 訂貨明細.訂單號碼 " & vbCrLf & _
"GROUP BY Format([訂單日期],'e年 第q季'), 訂貨明細.產品編號 " & vbCrLf & _
"HAVING (((訂貨明細.產品編號)=" & List_產品資料 & ")); "
Graph_銷售.RowSource = strSQL
Else
Graph_銷售.RowSource = ""
End If
End Sub
貼完後程式可能不能直接使用,請於物件內容中新增事件:
以下物件新增「On Click」事件
「cmd_照供應商排序」
「cmd_照銷售額排序」
「List_產品資料」
以下物件新增「After Update」事件
「Combo_供應商」
這樣物件與程式才能成功串連起來,使用檢視時才能正常啟用各物件的程式碼。
點選「照供應商排序」時,會帶入一組SQL語句,依照供應商的名稱進行排序,並調整下拉選單欄位、寬度等資訊,最後使用Dropdown方法點選下拉選單。
點選「照銷售額排序」時,則帶入另一組SQL,此語句除了列出供應商外,還列出該供應商於公司經手販售後的銷售額,且依照銷售額由高至低排序。
進行點選後,下方的商品清單方塊,將會更新為該供應商提供的商品。
由商品處再點選商品,下方的銷售圖表則會列出每季的銷售數量,切換商品後,也會跟著切換銷售圖表內容
以此方式進行處理,將可於同版面顯示更多有關連的資料,這個部份與一般使用「子表單」處理方式有所不同,所有的過程會更加繁瑣、複雜與手動,但可調整性很高,很容易客製化特殊的查詢需求。
以下再來解說一下,由於Access的「表單」設計,預先是用來新增、編輯與修改資料,因此也是有載入RowSource來處理資料的,所以新增一個表單時,是可以看到下方有「紀錄瀏覽按鈕」、「分隔線」以及旁邊的「資料選取器」 功能。
但是,以我們這種模式撰寫的「表單」,並不需要這些功能,可以於「設計檢視」下,點左上角的方格點2下:
開啟表單的屬性,並將這「紀錄選取器」、「紀錄瀏覽按鈕」與「分格線」三個屬性改為否
這些功能關閉後,整個視窗看起來就清爽多了
以上教學,希望對各位有幫助。