数据库入门access(原创实战Access数据库)(1)

(本‬文‬作‬于‬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系统(用于图形处理和制作)、图标制作系统等,如果要制作帮助文件还需要帮助文件制作系统。应用这些系统制作“图标”和主控界面的装饰图。(下图为装饰图)

数据库入门access(原创实战Access数据库)(2)

(二)需求调查

开发的应用系统是否能满足实际使用的要求,关键看你是否进行了详细的需求调查和了解。只有做了详细的需求调查,才能开发出实用的应用系统来。对于这一点,很多初学者往往会忽视,只是埋头开发,结果弄出来的东西总是离实际要求相差甚远,根本不能使用。

对于本单位的“媒体资源管理”数据库而言,主要需要调查了解以下几点:

1.数据量多大。这是一个关键,如果数据量非常之大,那么应用Access是不行的。我了解到,单位的媒体资源数据量不大,平时的使用管理数据量也不大,因此,我决定使用Access来开发;

2.基本信息。要求每一个素材登记有编号、规格、类别、时长、首拍时间、拍摄人、素材内容、存放位置等基本信息;

3.媒体资源的规格。对于存储介质而言,我了解到的规格主要有模拟和数据磁带、光盘,磁带又分为大1/2、小1/2等;

4.媒体资源的类别。因为这些媒体资源记录的是当地的政治、经济等全方位的影像资料,为了便于管理,就必须对它进行科学合理的分类。但单位还没有明确的规定,我只能暂时按素材的内容所具有的性质分为:党群类、政务类、工业类、农业类、商业类、文教类、卫生类、体育类、科技类、军事类、综合类(因为有的磁带记录的内容多而杂)共11类;

5.编号规定。对于这些素材资料,每一个体如何编号,存放库位如何规定(编号),单位没有明确;

6.管理流程。这是与工作实际最紧密的重要环节,只有了解了实际管理的工作流程,才能按照流程需要来开发数据库。我了解到单位对于媒体资源的管理有专门的部门和人员,平时使用的人员也相对集中但不确定,平时随时都可能进行数据查询、素材借出或归还,借出或归还时都要主管领导批准和保管员检查签收等,当前应用一台计算机进行管理,将来也可能利用单位内部局域网联网管理;

7.查询功能。要求能灵活的进行多种条件的查询和精确查询,查询的主要条件是首次拍摄时间、素材内容提要等;

8.报表功能。要求能准确的进行总计或分类统计,对于借出、归还要有详细的登记统计等。

(三)框架构思

框架构思十分重要,一个好的框架,使数据库结构简单、关系明确、功能实用、使用方便。根据调查了解到信息,媒体资源数据库应该是一个开放式的数据库,即所有信息都是不固定的,因此,先期开发的数据库数据不能固定死,必须可变。同时,由于使用人员对于数据库的操作使用技能不高,因此,数据库的操作使用应越简单越好,应采用点击直接选择的方式,少使用或不使用文字录入,以降低使用难度,达到方便快捷的目的。

基于上述因素的考虑,媒体资源数据库以素材基本信息为主界面,上部为单个素材的基本信息,中部为该素材的借出、归还登记明细,底部为数据查询、数据库备份、报表等功能命令按钮和库存量数据动态显示。(下图为数据库主控界面)

数据库入门access(原创实战Access数据库)(3)

二、实施系统开发

(一)明确表与表之间的关系

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)。

以上表如下图

数据库入门access(原创实战Access数据库)(4)

(四)创建关系

创建关系很简单,只需要打开关系编辑界面,将副表中的相关字段拖到主表的相关字段即可。如:将事由表中字段“事由”拖到借出登记表中字段“借出事由”处,单击对话框“确定”,两个表中的这两个字段即建立了关系。媒体资源数据库的表间关系如下图:

数据库入门access(原创实战Access数据库)(5)

(五)创建查询

如果你对Visual Basic编程比较熟练,那么,可以使用Visual Basic编程来实现相关查询,如果不熟悉Visual Basic编程,就用Access数据库中创建查询向导来建立需要的查询表。从前面了解需求情况来看,媒体资源数据库除了能灵活地进行各个字段查找外,还要实现针对首拍日期和内容提要两条件的精确查找,另外,主控界面底部是关于库存量的动态显示,这就要求我们建立实时的数据统计,因此,媒体资源数据库应建立如下图中所显示的相关查询,以便窗体和报表使用。

数据库入门access(原创实战Access数据库)(6)

这里要着重说明的是,基于“首拍日期”和“内容提要”两个条件的精确查询,需要在“磁带信息登记表查询”中“首拍日期”字段和“内容提要”两个字段设置查询条件,而“首拍日期”这个条件又是基于查询者临时输入的日期范围,因此,它必须是从输入日期数据的窗口中获得的相关日期信息;而“内容提要”字段中的数据不是固定的数据,查询条件不能固定,需要进行模糊查询。又因为是精确查找,这两个查询条件的逻辑关系应该是“与”的关系。

鉴于上述要求,在“磁带信息登记表查询”中“首拍日期”字段的“条件”栏中输入“>=[Forms]![报表日期范围]![开始日期] And <=[Forms]![报表日期范围]![终止日期]”查询条件,而在“磁带信息登记表查询”中“内容提要”字段的“条件”栏中输入“Like [输入内容提要可用通配符如:*人大*]”查询条件,且让它们在同一行中,形成逻辑与的关系。

对于其它查询表的建立可以在设计视图中逐个创建,这里不再叙述。

(六)创建窗体

窗体是人机对话的载体,没有窗体,人机对话将很难实现。窗体的创建步骤与表的创建步骤基本相似,先要创建非主控窗体,后创建主控窗体,这是因为,主控窗体的子窗体和部分数据来源于非主控窗体。使用窗体创建向导创建如“部门”等非主控窗体十分简单,而子窗体不需要手动创建,它在创建主控窗体时会自动创建的,所以,这里只着重说明主控窗体的创建过程。(所创建的窗体如下图所示)

数据库入门access(原创实战Access数据库)(7)

主控窗体“磁带信息登记表”是整个数据库的操作平台,所有操作将在这个窗体上完成,它既有基本信息输入窗口,又有各种功能命令按钮;既有主窗体,又有子窗体,因此,创建过程比较复杂。

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

通过上述步骤的创建,主控窗体创建完毕。其界面如下图:

数据库入门access(原创实战Access数据库)(8)

(七)报表制作

数据库的数据统计靠报表来实现,报表要根据功能需求来制作,见下图:

数据库入门access(原创实战Access数据库)(9)

上图为已建好的报表。报表可以通过向导来创建,但一般都不美观、不实用,还需要人工制作。报表的创建步骤大同小异,这里只对“影像资料统计表”进行说明。

1.应用报表向导创建“影像资料统计表”;

2.进行调整制作:

(1)将页面页眉下移一定空间,并将报表页眉移到页面页眉处,以便每一页都显示报表页眉;

(2)插入单位标志图;

(3)使用标签控件在页面页眉右侧制作一个报表日期范围显示,在控件中输入“="记录期间: " & [Forms]![报表日期范围]![开始日期] & " 至 " & [Forms]![报表日期范围]![终止日期]”,将来接受报表日期范围对话框的日期数据;

(4)调整主体区数据控件的位置,并用画线工具画出表格竖线和横线;

(5)将报表页脚下拖一定空间,并在此处应用标签工具和文本框工具制作数据统计框,在文本框中应用Sum和Count两种函数进行数据统计;

调整完的报表结构如下图:

数据库入门access(原创实战Access数据库)(10)

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为只读用户权限。

至此,媒体资源数据库开发完毕,由于本人也是边学边用,所以难免存在这样或那样的错误,敬请朋友们多多指教!

,