(本文作于2010年)前不久,單位領導交給我一項任務,建立媒體資源數據查詢和管理系統。随着單位媒體資源的日積月累,各種媒體存儲介質越來越多,這些數以萬計的媒體數據,記載着當地政治、經濟、社會人文等發展的曆史,是當地一筆寶貴的曆史資料,因此,搞好這些媒體資源的管理尤其重要。
對于數據的管理,數據庫是最好的平台。數據庫,即有結構的數據集合,通俗的講,就是數據的倉庫。因此,我想到了Access。在辦公軟件Office套件中,最為人們熟悉的是Word和Excel,因為它們功能強大且方便易用,更因為它們不僅可用于辦公,還可用于個人寫作和家庭記帳理财等。同為Office套件中一部分的Access,雖然有着同樣強大的功能,但使用的人卻相對少些,不像Word和Excel那樣廣泛。事實上,真正用過Access的人,對其強大功能和靈活應用均稱贊“不錯,很好的……。”Microsoft Access是一種關系式數據庫,關系式數據庫由一系列表組成,表又由一系列行和列組成,每一行是一個記錄,每一列是一個字段,每個字段有一個字段名,字段名在一個表中不能重複。
表與表之間可以建立關系(或稱關聯,連接),以便查詢相關聯的信息。Access數據庫以文件形式保存,文件的擴展名是mdb。
Access 數據庫由六種對象組成,它們是表、查詢、窗體、報表、宏、頁和模塊。
表(Table) ——表是數據庫的基本對象,是創建其他5種對象的基礎。表由記錄組成,記錄由字段組成,表用來存貯數據庫的數據,故又稱數據表。
查詢(Query)——查詢可以按索引快速查找到需要的記錄,按要求篩選記錄并能連接若幹個表的字段組成新表。
窗體(Form)——窗體提供了一種方便的浏覽、輸入及更改數據的窗口。還可以創建子窗體顯示相關聯的表的内容。窗體也稱表單。
報表(Report)——報表的功能是将數據庫中的數據分類彙總,然後打印出來,以便分析。
宏(Macro)——宏相當于DOS中的批處理,用來自動執行一系列操作。Access列出了一些常用的操作供用戶選擇,使用起來十分方便。
模塊(Module)——模塊的功能與宏類似,但它定義的操作比宏更精細和複雜,用戶可以根據自己的需要編寫程序。模塊使用Visual Basic編程。
頁——是一種特殊的直接連接到數據庫中數據的一種WEB頁。通過數據訪問頁将數據發布到Internet 或Intranet上,并可以适用浏覽器進行數據的維護和操作。
從上述特點可以看出,Microsoft Access數據庫是一個開放式的數據管理開發平台,适用于小型企事業單位進行數據管理,開發和應用十分方便。以前,我也曾經應用它開發過諸如“用戶收費管理”和“物資管理”等,實踐證明,應用數據庫管理數據,對于數據的查詢、統計非常準确和快捷,大大地提高了辦公自動化水平和工作效率。當然,要開發一個數據庫也并非那麼容易,你除需要熟練掌握數據庫開發應用的技巧外,還需要具備一定編程能力和美術功底,這是因為,數據庫的開發是建立在實際應用的基礎上的,也就是說,你開發的數據庫必須與工作實際相結合,具有實用性,同時界面也要友好和美觀。下面,我就“媒體資源數據庫”的開發實踐介紹給大家,希望能對使用Access數據庫的朋友們有一點幫助。我要聲明的是,我的開發水平還處在初級階段,采用的一些方法也是初級的(笨的)。
一、開發前的準備工作
幹每一項工作都不外乎這樣幾個階段:即準備階段、實施階段和總結階段(對于系統開發而言叫做後期調試和完善階段)。開發數據庫也是如此,實施前必須進行前期準備。
(一)準備工具
這裡的工具就是備用的工具書和工作平台。開發數據時會用到至少兩套工具書:《Access使用手冊》和《Visual Basic編程》;開發數據庫時需要的平台是Microsoft Access系統、Photoshop系統(用于圖形處理和制作)、圖标制作系統等,如果要制作幫助文件還需要幫助文件制作系統。應用這些系統制作“圖标”和主控界面的裝飾圖。(下圖為裝飾圖)
(二)需求調查
開發的應用系統是否能滿足實際使用的要求,關鍵看你是否進行了詳細的需求調查和了解。隻有做了詳細的需求調查,才能開發出實用的應用系統來。對于這一點,很多初學者往往會忽視,隻是埋頭開發,結果弄出來的東西總是離實際要求相差甚遠,根本不能使用。
對于本單位的“媒體資源管理”數據庫而言,主要需要調查了解以下幾點:
1.數據量多大。這是一個關鍵,如果數據量非常之大,那麼應用Access是不行的。我了解到,單位的媒體資源數據量不大,平時的使用管理數據量也不大,因此,我決定使用Access來開發;
2.基本信息。要求每一個素材登記有編号、規格、類别、時長、首拍時間、拍攝人、素材内容、存放位置等基本信息;
3.媒體資源的規格。對于存儲介質而言,我了解到的規格主要有模拟和數據磁帶、光盤,磁帶又分為大1/2、小1/2等;
4.媒體資源的類别。因為這些媒體資源記錄的是當地的政治、經濟等全方位的影像資料,為了便于管理,就必須對它進行科學合理的分類。但單位還沒有明确的規定,我隻能暫時按素材的内容所具有的性質分為:黨群類、政務類、工業類、農業類、商業類、文教類、衛生類、體育類、科技類、軍事類、綜合類(因為有的磁帶記錄的内容多而雜)共11類;
5.編号規定。對于這些素材資料,每一個體如何編号,存放庫位如何規定(編号),單位沒有明确;
6.管理流程。這是與工作實際最緊密的重要環節,隻有了解了實際管理的工作流程,才能按照流程需要來開發數據庫。我了解到單位對于媒體資源的管理有專門的部門和人員,平時使用的人員也相對集中但不确定,平時随時都可能進行數據查詢、素材借出或歸還,借出或歸還時都要主管領導批準和保管員檢查簽收等,當前應用一台計算機進行管理,将來也可能利用單位内部局域網聯網管理;
7.查詢功能。要求能靈活的進行多種條件的查詢和精确查詢,查詢的主要條件是首次拍攝時間、素材内容提要等;
8.報表功能。要求能準确的進行總計或分類統計,對于借出、歸還要有詳細的登記統計等。
(三)框架構思
框架構思十分重要,一個好的框架,使數據庫結構簡單、關系明确、功能實用、使用方便。根據調查了解到信息,媒體資源數據庫應該是一個開放式的數據庫,即所有信息都是不固定的,因此,先期開發的數據庫數據不能固定死,必須可變。同時,由于使用人員對于數據庫的操作使用技能不高,因此,數據庫的操作使用應越簡單越好,應采用點擊直接選擇的方式,少使用或不使用文字錄入,以降低使用難度,達到方便快捷的目的。
基于上述因素的考慮,媒體資源數據庫以素材基本信息為主界面,上部為單個素材的基本信息,中部為該素材的借出、歸還登記明細,底部為數據查詢、數據庫備份、報表等功能命令按鈕和庫存量數據動态顯示。(下圖為數據庫主控界面)
二、實施系統開發
(一)明确表與表之間的關系
Access數據庫是關系數據庫,表與表之間可以建立關系,數據可以互相調用,所以,首先必須明确表與表之間應建立哪些關系。媒體資源數據庫主表是“媒體資源登記表”,與它相關的主要是“借出登記表”和“歸還登記表”,主表與副表之間應建立唯一的連接關系,而表中确保“唯一性”的字段是“磁帶編号”,因此,它們的連接關系是建立在“磁帶編号”關鍵字段上的。另外,主表中的“拍攝人”、“磁帶規格”、“素材類别”及副表中“借出人”、“批準人”、“經辦人”、“歸還人”等信息由于是随時可變的,所以必須另外建立相應的獨立表并與之建立連接關系,以便主、副表中的相應字段直接從中調用數據。
(二)建立副表
1.規格表
字段:規格,類型:文本(10個字符),并設該字段為主鍵。
2.類别表
字段:類别,類型:文本(10個字符),并設該字段為主鍵。
3.部門表
字段:部門,類型:文本(8個字符),并設該字段為主鍵。
4.職務表
字段:職務,類型:文本(6個字符),并設該字段為主鍵。
5.事由表
字段:事由,類型:文本(10個字符),并設該字段為主鍵。
6.人員表
字段:姓名,類型:文本(8個字符),并設該字段為主鍵。
字段:性别,類型:文本(2個字符),并設該字段從查閱向導——鍵入值“男、女”中獲取。
字段:部門,類型:文本(8個字符),并設該字段從查閱向導——“部門”表中獲取。
7.經辦人表
字段及屬性設置同人員表
8.批準人表
字段及屬性設置同人員表,其中“職務”字段從“職務表”中獲取。
9.借出登記表
字段:借出ID,類型:自動編号,并設該字段為主鍵。
字段:磁帶編号,類型:文本(8個字符)。
字段:借出日期,類型:日期/時間(長日期格式,默認值:=Date$())。
字段:借出時間,類型:日期/時間(長時間格式,默認值:=Time$())。
字段:借出人,類型:文本(8個字符),并設該字段從查閱向導——“人員”表中獲取。
字段:借出事由,類型:文本(10個字符),并設該字段從查閱向導——“事由”表中獲取。
字段:批準人,類型:文本(8個字符),并設該字段從查閱向導——“批準人”表中獲取。
字段:經辦人,類型:文本(8個字符),并設該字段從查閱向導——“經辦人”表中獲取。
字段:次數,類型:數字(長整型,默認值:1)。
10.歸還登記表
字段:歸還ID,類型:自動編号,并設該字段為主鍵。
字段:磁帶編号,類型:文本(8個字符)。
字段:歸還日期,類型:日期/時間(長日期格式,默認值:=Date$())。
字段:歸還時間,類型:日期/時間(長時間格式,默認值:=Time$())。
字段:歸還人,類型:文本(8個字符),并設該字段從查閱向導——“人員”表中獲取。
字段:經辦人,類型:文本(8個字符),并設該字段從查閱向導——“經辦人”表中獲取。
字段:次數,類型:數字(長整型,默認值:1)。
(三)建立主表
11.磁帶信息登記表
字段:磁帶編号,類型:文本(8個字符),并設該字段為主鍵。
字段:磁帶規格,類型:文本(10個字符),并設該字段從查閱向導——“規格”表中獲取。
字段:素材類别,類型:文本(10個字符),并設該字段從查閱向導——“類别”表中獲取。
字段:素材時長,類型:數字(長整型,默認值:0)。
字段:素材節數,類型:數字(長整型,默認值:1)。
字段:首拍日期,類型:日期/時間(長日期格式,掩碼:9999年99月99日;0;_)。
字段:拍攝人,類型:文本(8個字符),并設該字段并設該字段從查閱向導——“人員”表中獲取。
字段:存放位置,類型:文本(10個字符)。
字段:内容提要,類型:備注。
字段:關鍵貞1-4,類型:OLE 對象(共4個)。
字段:次數,類型:數字(長整型,默認值:1)。
以上表如下圖
(四)創建關系
創建關系很簡單,隻需要打開關系編輯界面,将副表中的相關字段拖到主表的相關字段即可。如:将事由表中字段“事由”拖到借出登記表中字段“借出事由”處,單擊對話框“确定”,兩個表中的這兩個字段即建立了關系。媒體資源數據庫的表間關系如下圖:
(五)創建查詢
如果你對Visual Basic編程比較熟練,那麼,可以使用Visual Basic編程來實現相關查詢,如果不熟悉Visual Basic編程,就用Access數據庫中創建查詢向導來建立需要的查詢表。從前面了解需求情況來看,媒體資源數據庫除了能靈活地進行各個字段查找外,還要實現針對首拍日期和内容提要兩條件的精确查找,另外,主控界面底部是關于庫存量的動态顯示,這就要求我們建立實時的數據統計,因此,媒體資源數據庫應建立如下圖中所顯示的相關查詢,以便窗體和報表使用。
這裡要着重說明的是,基于“首拍日期”和“内容提要”兩個條件的精确查詢,需要在“磁帶信息登記表查詢”中“首拍日期”字段和“内容提要”兩個字段設置查詢條件,而“首拍日期”這個條件又是基于查詢者臨時輸入的日期範圍,因此,它必須是從輸入日期數據的窗口中獲得的相關日期信息;而“内容提要”字段中的數據不是固定的數據,查詢條件不能固定,需要進行模糊查詢。又因為是精确查找,這兩個查詢條件的邏輯關系應該是“與”的關系。
鑒于上述要求,在“磁帶信息登記表查詢”中“首拍日期”字段的“條件”欄中輸入“>=[Forms]![報表日期範圍]![開始日期] And <=[Forms]![報表日期範圍]![終止日期]”查詢條件,而在“磁帶信息登記表查詢”中“内容提要”字段的“條件”欄中輸入“Like [輸入内容提要可用通配符如:*人大*]”查詢條件,且讓它們在同一行中,形成邏輯與的關系。
對于其它查詢表的建立可以在設計視圖中逐個創建,這裡不再叙述。
(六)創建窗體
窗體是人機對話的載體,沒有窗體,人機對話将很難實現。窗體的創建步驟與表的創建步驟基本相似,先要創建非主控窗體,後創建主控窗體,這是因為,主控窗體的子窗體和部分數據來源于非主控窗體。使用窗體創建向導創建如“部門”等非主控窗體十分簡單,而子窗體不需要手動創建,它在創建主控窗體時會自動創建的,所以,這裡隻着重說明主控窗體的創建過程。(所創建的窗體如下圖所示)
主控窗體“磁帶信息登記表”是整個數據庫的操作平台,所有操作将在這個窗體上完成,它既有基本信息輸入窗口,又有各種功能命令按鈕;既有主窗體,又有子窗體,因此,創建過程比較複雜。
1.創建基本信息登記表窗體,進入窗體設計界面;
2.調整窗體大小,安排各個字段的位置,插入裝飾圖,使窗體美觀大方;
3.設置窗體主要屬性和參數:
(1)記錄來源:磁帶信息登記表;
(2)标題:影像資料信息登記;
(3)默認窗體:單個窗體;
(4)最大最小化按鈕:最小化按鈕;
(5)寬度:25.407厘米;
(6)打開:[事件過程],并進入代碼編輯界面,輸入如下代碼:
Private Sub Form_Open(Cancel As Integer)
DoCmd.SelectObject acForm, "磁帶信息登記表", True
DoCmd.Minimize '最小化數據庫
End Sub
4.創建借出登記子窗體
(1)将貸出登記表拖入界面中部左側位置;
(2)設置借出登記表 子窗體屬性及參數:
名稱:借出登記表 子窗體;
源對象:借出登記表 子窗體;
鍊接子字段:磁帶編号;
鍊接主字段:磁帶編号;
寬度:14.101厘米;
高度:3.164厘米;
特殊效果:凹陷;
邊框樣式:實線;
邊框寬度:細線。
(4)設置子窗體表屬性及參數:
記錄源:借出登記表;
标題:借出登記表 子窗體;
默認視圖:數據表。
5.創建歸還登記子窗體
歸還登記子窗體的創建方法及屬性、參數的設置與借出登記子窗體相同。
6.創建總量統計子窗體
(1)先将窗體頁腳向下拉開一定距離,以便放置子窗體;
(2)将總量統計查詢表拖至窗體頁腳處;
(3)其它方法同上述子窗體的創建方法。
7.創建報表日期範圍窗體
(1)用設計視圖創建兩個非綁定控件,分别作為“開始日期”和“終止日期”輸入窗口,并在這兩個控件左側分别使用标簽工具創建兩個标簽,輸入“開始日期”和“終止日期”;
(2)設置窗體主要屬性“打開”——“事件過程”,進入代碼編輯狀态,輸入如下代碼:
Private Sub Form_Open(Cancel As Integer)
Me.Caption = Forms![報表日期範圍].OpenArgs
Forms!報表日期範圍!開始日期.SetFocus
End Sub
(3)創建一個“預覽……”命令按鈕,設置主要屬性“單擊”——“事件過程”,進入代碼編輯狀态,輸入如下代碼:
Private Sub 預覽_Click()
If IsNull([開始日期]) Or IsNull([終止日期]) Then
MsgBox "您必須輸入開始時間和終止時間。"
DoCmd.GoToControl "開始日期"
Else
If [開始日期] > [終止日期] Then
MsgBox "截止日期必須大于開始日期。"
DoCmd.GoToControl "開始日期"
Else
Me.Visible = False
End If
End If
End Sub
8.創建命令按鈕
(1)創建“刷新”命令按鈕
使用Access系統工具在适當位置創建一個命令按鈕,在彈出的對話框中選擇記錄操作——刷新數據,系統會自動建立相關代碼如下:
Private Sub 刷新_Click()
On Error GoTo Err_刷新_Click
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
Exit_刷新_Click:
Exit Sub
Err_刷新_Click:
MsgBox Err.Description
ReSume Exit_刷新_Click
End Sub
(2)創建“查找”命令按鈕
方法同上。代碼如下:
Private Sub 查找_Click()
On Error GoTo Err_查找_Click
Screen.PreviousControl.SetFocus
DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70
Exit_查找_Click:
Exit Sub
Err_查找_Click:
MsgBox Err.Description
Resume Exit_查找_Click
End Sub
(3)創建“精确查找”命令按鈕
方法同上,代碼如下:
Private Sub 精确查找_Click()
On Error GoTo Err_精确查找_Click
Dim stDocName As String
Dim stLinkCriteria As String
DoCmd.OpenForm "報表日期範圍", , , , , acDialog, "影像資料統計表"
If Not IsLoaded("報表日期範圍") Then
Cancel = True
End If
stDocName = "資料精确查詢"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_精确查找_Click:
Exit Sub
Err_精确查找_Click:
MsgBox Err.Description
Resume Exit_精确查找_Click
End Sub
(4)創建“數據備份”命令按鈕
方法同上,代碼如下:
Private Sub 數據備份_Click()
On Error GoTo 11 '如果删除文件夾出錯,執行第11行
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFolder ("D:mtzy") '删除已有的文件夾及文件
11 MkDir "D:mtzy" '創建文件夾
On Error GoTo 22 '如果複制文件夾出錯,執行第22行
CopyFile "C:mtzymtzt.ico", "D:mtzymtzt.ico", 0 '複制并覆蓋文件
CopyFile "C:mtzySecured.mdw", "D:mtzySecured.mdw", 0 '複制并覆蓋文件
CopyFile "C:mtzy媒體資源管理.mdb", "D:mtzy媒體資源管理.mdb", 0 '複制并覆蓋文件
CopyFile "C:mtzy媒體資源管理.bak", "D:mtzy媒體資源管理.bak", 0 '複制并覆蓋文件
CopyFile "C:mtzy媒體資源管理.lnk", "D:mtzy媒體資源管理.lnk", 0 '複制并覆蓋文件
CopyFile "C:mtzy媒體資源管理.snp", "D:mtzy媒體資源管理.snp", 0 '複制并覆蓋文件
Exit_數據備份_Click:
Exit Sub
22 Err_數據備份_Click:
MsgBox Err.Description
Resume Exit_數據備份_Click
End Sub
(5)創建“基本信息錄入”命令按鈕
方法同上,選擇窗體操作——打開窗體。代碼如下:
Private Sub 錄入基本信息_Click()
On Error GoTo Err_錄入基本信息_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "基本信息錄入"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_錄入基本信息_Click:
Exit Sub
Err_錄入基本信息_Click:
MsgBox Err.Description
Resume Exit_錄入基本信息_Click
End Sub
(6)創建基本信息錄入窗體中的各種命令按鈕,
方法同上,這裡不再叙述。
(7)創建報表命令按鈕
關于報表系統的相關命令按鈕的創建,是在報表創建完畢後進行的。這裡以“資料總表”命令按鈕為例加以說明,其它報表命令按鈕的創建方法相同。
使用Access系統工具在适當位置創建一個命令按鈕,在彈出的對話框中選擇報表操作——打開預覽報表,系統會自動建立相關代碼如下:
Private Sub 資料總表_Click()
On Error GoTo Err_資料總表_Click
Dim stDocName As String
stDocName = "影像資料統計表"
DoCmd.OpenReport stDocName, acPreview
Exit_資料總表_Click:
Exit Sub
Err_資料總表_Click:
MsgBox Err.Description
Resume Exit_資料總表_Click
End Sub
通過上述步驟的創建,主控窗體創建完畢。其界面如下圖:
(七)報表制作
數據庫的數據統計靠報表來實現,報表要根據功能需求來制作,見下圖:
上圖為已建好的報表。報表可以通過向導來創建,但一般都不美觀、不實用,還需要人工制作。報表的創建步驟大同小異,這裡隻對“影像資料統計表”進行說明。
1.應用報表向導創建“影像資料統計表”;
2.進行調整制作:
(1)将頁面頁眉下移一定空間,并将報表頁眉移到頁面頁眉處,以便每一頁都顯示報表頁眉;
(2)插入單位标志圖;
(3)使用标簽控件在頁面頁眉右側制作一個報表日期範圍顯示,在控件中輸入“="記錄期間: " & [Forms]![報表日期範圍]![開始日期] & " 至 " & [Forms]![報表日期範圍]![終止日期]”,将來接受報表日期範圍對話框的日期數據;
(4)調整主體區數據控件的位置,并用畫線工具畫出表格豎線和橫線;
(5)将報表頁腳下拖一定空間,并在此處應用标簽工具和文本框工具制作數據統計框,在文本框中應用Sum和Count兩種函數進行數據統計;
調整完的報表結構如下圖:
3.設置報表打開事件屬性為“事件過程”,并進入代碼編輯狀态輸入如下代碼:
Private Sub Report_Open(Cancel As Integer)
DoCmd.OpenForm "報表日期範圍", , , , , acDialog, "影像資料統計表"
If Not IsLoaded("報表日期範圍") Then
Cancel = True
End If
End Sub
4.設置報表關閉事件屬性為“事件過程”,并進入代碼編輯狀态輸入如下代碼:
Private Sub Report_Close()
DoCmd.Close acForm, "報表日期範圍"
End Sub
5.設置報表無數據事件屬性為“事件過程”,并進入代碼編輯狀态輸入如下代碼:
Private Sub Report_NoData(Cancel As Integer)
MsgBox "沒有此報表的數據。取消報表..."
Cancel = -1
End Sub
6.設置報表數據篩選,在過濾器屬性中輸入“([首拍日期])>=[Forms]![報表日期範圍]![開始日期] and ([首拍日期])<= [Forms]![報表日期範圍]![終止日期]”,并将打開過濾器屬性設置為“是”,這樣,報表将根據要求的日期範圍統計數據。至此,本報表制作完畢;
7.進行運行調試,檢查錯誤,修改。
(八)編譯全局代碼
進入模塊,新建一個“全局代碼”,并進入代碼編輯狀态,輸入如下代碼:
Option Compare Database
Function IsLoaded(ByVal strFormName As String) As Integer
' Returns True if the specified form is open in Form view or Datasheet view.
Const conObjStateClosed = 0
Const conDesignView = 0
If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then
If Forms(strFormName).CurrentView <> conDesignView Then
IsLoaded = True
End If
End If
End Function
(九)設置數據庫啟動選項
1.打開數據庫工具菜單下的啟動選項窗口;
2.設置數據庫應用程序标題;
3.設置數據庫應用程序圖标;
4.設置數據啟動窗體為“磁帶信息登記表”窗體;
5.其它選項可根據需要設置。
(十)設置數據庫安全和用戶賬号及權限
應用Access系統的安全機制向導,設置數據庫的安全機制很方便。以下是“媒體資源數據庫”的安全機制:
1.組:管理員組、完全數據用戶組、完全權限組、項目設計組、隻讀用戶組五個組;
2.用戶:Administrator、ccr、gly、cx共4個用戶,并分别設置用戶密碼;
3.權限:Administrator為管理員權限,ccr為設計員權限,gly為完全數據用戶權限,cx為隻讀用戶權限。
至此,媒體資源數據庫開發完畢,由于本人也是邊學邊用,所以難免存在這樣或那樣的錯誤,敬請朋友們多多指教!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!