摘 要: 報表的主要作用是打印輸出格式化的數據信息。本文從實用的角度出發,給出了隨心所欲輸出任意表中的任意多個字段的方法,使得數據最終顯示清晰明了。
關鍵字: 權限 報表 字段 輸出
當今社會的數據處理與日俱增,如何能從龐大的數據中找出符合條件的數據信息,并且將它們快速清晰地輸出,就顯得尤為重要。Access數據庫簡單易用,但報表在輸出數據時往往需要事先設置好報表所要綁定的表和表中的相關字段。這樣一來,如果要更換表或表中的字段,就得重新修改報表,顯得較為麻煩。為此,可以做一個窗體,表和字段的選擇全在窗體中進行(如圖1),最后只需單擊“輸出報表”按鈕即可輸出報表,達到一勞永逸隨心所欲輸出任意表中任意多個字段的報表的目的。
一、獲取表
在Access數據庫系統中,用戶創建的對象的相關信息存儲在系統表MSysObjects中,可通過查詢它來獲取我們想要的表。
(1)設置對系統表MSysObjects的訪問權限。
默認情況下,是無法直接訪問系統表MSysObjects的,需要手工設置一下:
首先單擊Access數據庫“工具”菜單中的“選項”命令,在“視圖”頁上將“系統對象”選中,單擊“確定”按鈕保存設置。
然后單擊“工具”菜單中“安全”菜單中的“用戶與組權限”命令,在“權限”頁面中,在“對象類型”下拉列表中選擇“表”,在“用戶名/組名”中選擇“管理員”用戶,在“對象名稱”中選擇“MSysObjects”表,在“權限”中將“讀取數據”選中,單擊“確定”按鈕保存設置即可完成。
通過上面兩步設置后,就可以看見并對系統表MSysObjects進行訪問了。
(2)建立查詢,獲取表。
在系統表MSysObjects中,Name字段值表示數據對象的名稱;Type字段值表示數據庫對象的類型:1表示表,3表示系統對象,5表示查詢,-32761表示模塊,-32764表示報表,-32766表示宏,-32768表示窗體,-32756則表示數據訪問頁;Flags字段中值為0的表示用戶創建的對象。為此獲得數據庫表的名稱的查詢應為:
SELECT MSysObjects.Name
FROM MSysObjects
WHERE((MSysObjects.Type=1)AND(MSysObjects.Flags=0))
在圖1所示的窗體中,通過組合框(名稱為zhk)來列出數據庫系統中所有的表(不包括系統表),所以該組合框的“行來源”即為上面的查詢語句。
二、列出表中的字段
當在組合框中選擇了表后,列表框(名稱為lbk)應自動列出相應表所包含的所有字段,所以還需對組合框的“更新事件”進行相應的如下設置:
Private Sub zhk_AfterUpdate()
Dim dbs As DAO.Database,tdf As DAO.TableDef
Dim fld As DAO.Field,rst As DAO.Recordset
Dim tbl As String
tbl=Forms!frmtest!zhk
Set dbs=CurrentDb
Set tdf=dbs.TableDefs(tbl)
DoCmd.SetWarnings False
DoCmd.RunSQL("Delete*from TableFields")
DoCmd.SetWarnings True
Set rst=dbs.OpenRecordset("TableFields",dbOpenDynaset)
For Each fld In tdf.Fields
If fld.Type>=1 And fld.Type<=8 Or fld.Type=10 Then
rst.AddNew
rst!FieldName=fld.Name
rst!FieldType=fld.Type
rst.Update
End If
Next fld
Set dbs=Nothing
lbk.Requery
End Sub
上面代碼的作用就是將選擇的表中的字段暫時存儲在一個臨時表TableFields中,TableFields的結構如圖2,然后將選擇的結果再返回給列表框,所以將列表框lbk的行來源設為“SELECT FieldName FROM TableFields”。
三、重選表、字段
當表和表中的字段都列出后,就可進行相應的選擇,以便精簡報表的中字段。如果此時需重新選取表,只需單擊組合框重新選擇表;如果需重新選取字段,應先將列表框中已有的字段全部清除,然后再重新選擇表中的字段。重選功能需在窗體中添加一個命令按鈕(名稱為cmdReset),該命令按鈕的單擊事件代碼可設為:
Private Sub cmdReset_Click()
DoCmd.SetWarnings False
DoCmd.RunSQL"Delete* from TableFields"
Me!lbk.Requery
DoCmd.SetWarnings True
End Sub
至此,表和表中字段的選擇操作已完全實現,剩下的輸出報表任務就變得相對簡單了。
通過以上建立窗體,在窗體中對數據庫包含的表和表中的字段進行快速選擇,這樣在報表輸出時,就無需重新設置報表的記錄源和結構,同時精簡了報表中的字段,達到隨心所欲地輸出報表的目的。
參考文獻:
[1]陳可欣.Access VBA數據庫高效開發范例應用[M].北京:中國青年出版社,2005.