1、数据库应用案例简易教案本案例以商品的入库及销售为主要操作内容,旨在通过案例的制作,使学生对 ACCESS 的菜单功能有一个更深刻的理解并能系统掌握利用 ACCESS 开发应用小程序的目的。案例名称商品入库及销售管理系统一、所使用的数据表及其结构1、表名:“商品表” ,用于存放商品的基本信息,结构如下要求:字段名 数据类型 字段大小 小数编号 文本 10 注:设为主键商品名 文本 60规格 文本 20单位 文本 10零售价 数字 单精度 2库存量 数字 长整型 自动2、表名:“入库表” ,用于存放商品入库的基本信息,结构如下要求:字段名 数据类型 字段大小 小数 输入法模式入库单号 文本 10
2、注:设为主键编号 文本 10 注:设为主键入库日期 日期/时间 长日期 输入法关闭数量 数字 整型 自动进货价 数字 单精度 2供应商 文本 50操作员 文本 103、表名:“销售表” ,用于存放商品销售的基本信息,结构如下要求:字段名 数据类型 字段大小 小数 输入法模式编号 文本 10销售日期 日期/时间 长日期 输入法关闭数量 数字 整型 自动零售价 数字 单精度 2操作员 文本 104、表名:“操作员表” ,用以存放操作员的基本信息:结构如下要求:字段名 数据类型 字段大小 小数 输入法模式操作员 文本 10 注:设为主键密码 文本 12二、窗体的建立:1、窗体名:“商品管理” ,用以
3、商品基本信息的新增、编辑等功能。具体实现后的窗体视图如下:2、窗体名:“商品浏览” ,该窗体主要用于实现对整个商品信息的浏览作用,并不具备新增、编辑等功能,因此在其窗体属性中应设置“新增、删除、编辑”属性为“否” 。具体实现后的窗体视图如下:3、窗体名:“主窗体” ,其作用是为实现整个系统中各个功能正常调用,在该主窗体中建立相关的调用按钮,以便用户通过点击主窗体中的相关按钮来实现相应功能的调用,由于该窗体是主窗体,是系统运行后出现的第一个人机交互界面,因此对该窗体进行一些修饰,如设置相关的字体、背景图、且不允许用户修改边框大小、不存在滚动条、记录定位器及浏览器等,这些相关属性应在窗体的属性窗口
4、中进行设置。具体实现后的窗体视图如下:4、窗体名:“商品名查询” ,该窗体主要用于实现用户按商品名对商品信息的查询浏览作用。为了实现按商品名查询,首先应充分利用 ACCESS 提供的参数查询功能,建立一个名为 “按商品名查询”的查询。由于按商品名查询后的信息只在查询窗体中显示,而对于 ACCESS 而言,可以先建立一个窗体,设置该窗体的数据来源于“按商品名查询”这一查询,因此,只要建立一名为“商品名查询”的窗体,设置该窗体的数据来源于“按商品名查询”这一查询,由于是查询,并不提供新增及、编辑功能,故应对该窗体的有关属性进行相应的设置,设置方法同“商品浏览”窗体的建立相似。具体实现后的窗体视图如
5、下:5、窗体名:“商品查询条件” ,如下图所示:若要利用查询条件的选择方式(如编号,或商品名) ,则可利用选项组方式来进行,在对选项组进行判断时,可以利用如下编码:Dim stDocName As StringDim stLinkCriteria As StringIf Me!框架 20.Value = 1 ThenstDocName = “商品表编号查询“DoCmd.OpenForm stDocNameElsestDocName = “商品表商品名查询“DoCmd.OpenForm stDocNameEnd If同时,为了使查询中得到用户输入的查询内容,务必在查询设计窗口的准则中输入查询内容
6、,若设计窗口及编码格式如:“准则”中的代码如下:forms!商品查询条件!文本 86、窗体名:“商品入库” ,本窗体主要用于商品入库时的信息录入,其窗体视图如下:说明一:为了使用户在操作时可以通过点取商品编号来显示相应的商品名,因此在窗体中设计了一个下拉组合框,当用户点取该对象时,商品名应在对应的文本框中显示,因此应在下拉组合框对象的change 事件中加上如下代码:Private Sub 组合 17_Change()Set rs = New ADODB.Recordsetrs.Open “select * from 商品表 where 编号=“ + 组合 17.Text + “, Curre
7、ntProject.Connection, adOpenKeyset, adLockOptimisticIf Not rs.EOF Then文本 20 = rs(“商品名“)End IfEnd Sub说明二:在窗体被加载到内存中时,对变量进行初始化、设置控件的一些初始属性,应在“窗体”中的“加载”事件中加代码如下:Private Sub Form_Load()文本 15 = “组合 17 = “文本 22 = “文本 24 = “文本 26 = “组合 28 = “文本 20 = “文本 30 = CStr(Date)End Sub说明三:为了将用户输入的商品入库信息存放到入库表中,应在“保存
8、”按钮中的“单击”事件中加如下代码:Private Sub 命令 33_Click()If 文本 15 = “ ThenMsgBox (“入库单号不能为空!“)Exit SubEnd IfIf 组合 17 = “ ThenMsgBox (“编号不能为空!“)Exit SubEnd IfIf 文本 22 = “ ThenMsgBox (“数量不能为空!“)Exit SubEnd IfIf 文本 24 = “ ThenMsgBox (“进货价不能为空!“)Exit SubEnd IfIf 文本 26 = “ ThenMsgBox (“供应商不能为空!“)Exit SubEnd IfIf 组合 28
9、 = “ ThenMsgBox (“操作员不能为空!“)Exit SubEnd IfIf 文本 30 = “ ThenMsgBox (“入库日期不能为空!“)Exit SubEnd IfSet rs = New ADODB.Recordsetrs.Open “select * from 入库表“, CurrentProject.Connection, adOpenKeyset, adLockOptimistic(注:也可以直接写成:s.Open “select * from 入库表“, CurrentProject.Connection,3,3)rs.AddNewrs(“入库单号 “) = 文
10、本 15rs(“编号“) = 组合 17rs(“数量“) = CInt(文本 22)rs(“进货价 “) = 文本 24rs(“供应商 “) = 文本 26rs(“操作员 “) = 组合 28rs(“入库日期 “) = 文本 30rs.UpdateSet curdb = CurrentDbcurdb.Execute “update 商品表 set 库存量 = 库存量 +“ + 文本 22 + “ where 编号=“ + 组合 17 + “MsgBox (“商品已入库成功!“)文本 15 = “组合 17 = “文本 22 = “文本 24 = “文本 26 = “组合 28 = “文本 20
11、 = “End Sub说明四:由于操作员一般为常用的几位数据选项,故利用下拉组合框,其设置过程可直接利用ACCESS 的操作向导来完成,具体步骤本处略。7、窗体名:“查询入库商品的条件” ,用于设置查询入库商品信息的条件设置,具体窗体视图如下所示:说明一:该窗体中的“查询”按钮的“单击”事件代码段如下:Dim stDocName As StringIf 框架 4.Value = 1 ThenstDocName = “按编号查询入库信息“DoCmd.OpenForm stDocNameElsestDocName = “按时间段查询入库信息“DoCmd.OpenForm stDocNameEnd
12、If说明二:实现按编号查询入库商品的信息,其方法及代码参照第 5 小点说明。若要实现按时间段进行查询,则在“查询”设计窗体中,对“按时间段查询入库商品表”的设计视图中,在“入库时间”字段的准则中加如下代码:Between forms!查询入库商品的条件! 文本 13 And forms!查询入库商品的条件!文本 178、窗体名:“商品销售” ,本窗体主要用于商品销售后的记录情况,其窗体视图如下:说明一:为了使用户在操作时可以通过点取商品编号来显示相应的商品名及其它相关信息,因此在窗体中设计了一个下拉组合框,当用户点取该对象时,商品名应在对应的文本框中显示,因此应在下拉组合框对象的 change
13、 事件中加上如下代码:Private Sub 组合 17_Change()Set rs = New ADODB.Recordsetrs.Open “select * from 商品表 where 编号=“ + 组合 17 + “, CurrentProject.Connection, 3, 3If Not rs.EOF Then文本 19 = rs(“商品名“)文本 21 = rs(“规格“)文本 23 = rs(“单位“)文本 25 = rs(“零售价“)文本 27 = rs(“库存量“)kcl = rs(“库存量“)End IfEnd Sub说明二:在窗体被加载到内存中时,对变量进行初始化
14、、设置控件的一些初始属性,应在“窗体”中的“加载”事件中加代码如下:Private Sub Form_Load()组合 17 = “文本 19 = “文本 21 = “文本 23 = “文本 25 = “文本 27 = “组合 29 = “文本 31 = CStr(Date)End Sub说明三:在商品销售完毕后,应在“确定”按钮中的“单击”事件中加如下代码:Private Sub 命令 33_Click()If 组合 17 = “ ThenMsgBox (“编号不能为空!“)Exit SubEnd IfIf 文本 19 = “ ThenMsgBox (“商品名不能为空!“)Exit SubE
15、nd IfIf 文本 25 = “ ThenMsgBox (“零售价不能为空!“)Exit SubEnd IfIf 文本 27 = “ ThenMsgBox (“数量不能为空!“)Exit SubEnd IfIf 组合 29 = “ ThenMsgBox (“操作员不能为空!“)Exit SubEnd IfSet rs = New ADODB.Recordsetrs.Open “select * from 销售表 “, CurrentProject.Connection, 3, 3rs.AddNewrs(“编号 “) = 组合 17rs(“销售日期 “) = 文本 31rs(“数量 “) =
16、文本 27rs(“零售价 “) = 文本 25rs(“操作员 “) = 组合 29rs.UpdateSet curdb = CurrentDbcurdb.Execute “update 商品表 set 库存量=库存量-“ + 文本 27 + “ where 编号=“ + 组合 17 + “MsgBox (“销售信息已保存“)Set rs = New ADODB.Recordsetrs.Open “select * from 商品表 where 编号=“ + 组合 17 + “, CurrentProject.Connection, 3, 3If rs(“库存量“) = 5 ThenMsgBox
17、 (“友情提示,该商品库存量不多,应提前进货! “)End If组合 17 = “文本 19 = “文本 21 = “文本 23 = “文本 25 = “文本 27 = “组合 29 = “文本 31 = CStr(Date)标签 41.Caption = CStr(0)End Sub总结1、窗体“商品管理”涉及“商品表” ,即数据源为“商品表” ; 2、窗体“商品浏览”涉及“商品表” ,即数据源为“商品表” ;注意不可修改; 3、主窗体是“商品管理” 、 “商品浏览” 、 “商品查询” 、 “商品入库” 、 “入库商品查询”及“商品销售”的集合体; 4、窗体“商品查询”涉及的窗体及查询如下:
18、注:(1) 窗体“商品名查询浏览”的数据源来自查询“商品名查询” ; (2) 窗体“商品编号查询浏览”的数据源来自查询“商品编号查询” ; (3) 查询“商品名查询”的数据源来自“商品表” ; (4) 查询“商品编号查询”的数据源来自“商品表” ;(5) 本窗体难点在“查询”按钮的代码编写。5、窗体“商品入库”没有直接来自数据源,但其涉及两个表“商品表”和“入库表” ,字段分别是“入库单号、编号、商品名、数量、进货价、供应商、操作员、入库日期” ,因为涉及两个表,所以“入库表”和“商品表”通过关键字“编号”进行关联,这是在建表初期要做的; 注:本窗体中“编号”的下拉列表框及“保存”按钮的代码是
19、一个难点; 6、窗体“入库商品查询”涉及的窗体及查询如下:注:(1)窗体“按编号查询入库信息 ”的数据源来自查询“按编号查询入库表” ; (2)窗体“按时间段查询入库信息”的数据源来自查询“按时间段查询入库表” ; (3)查询“商品名查询”的数据源来自“商品表”及“入库表” ; (4)查询“商品编号查询”的数据源来自“商品表”及“入库表” ;(5)本窗体难点在“查询”按钮的代码编写。7、窗体“商品销售”有以下字段:“入库单号、编号、商品名、数量、进货价、供应商、操作员、入库日期” ,故其涉及 3 个表:“商品表” 、 “入库表”及“销售表” 。本窗体的难点在于“编号”下拉列表的代码及“确定”按
20、钮的代码编写。商品查询(窗体)商品名查询浏览(窗体)商品编号查询浏览(窗体)商品名查询(查询)商品编号查询(查询)入库商品查询(窗体)按编号查询入库信息(窗体)按时间段查询入库信息(窗体)按编号查询入库表(查询)按时间段查询入库表(查询)附录(商品入库更改后的代码)If 入库单号 = “ ThenMsgBox (“入库单号不能为空!“)Exit SubEnd IfIf 编号= “ ThenMsgBox (“商品编号不能为空!“)Exit SubEnd IfIf 商品名 = “ ThenMsgBox (“商品名不能为空!“)Exit SubEnd IfIf 进货价 = “ ThenMsgBox
21、(“进货价不能为空!“)Exit SubEnd IfIf 数量 = “ ThenMsgBox (“入库数量不能为空!“)Exit SubEnd IfIf 入库日期 = “ ThenMsgBox (“入库日期不能为空!“)Exit SubEnd IfSet rs = New ADODB.Recordsetrs.Open “select * from 入库表 “, CurrentProject.Connection, adOpenKeyset, adLockOptimisticrs.AddNewrs(“入库单号“) =入库单号rs(“编号 “) =编号rs(“进货价 “) =进货价rs(“数量 “) =数量rs(“入库日期“) =入库日期rs(“供应商 “) =供应商rs(“操作员 “) =操作员rs.UpdateSet curdb = CurrentDbcurdb.Execute “update 商品表 set 库存量=库存量+“ +数量 + “ where 编号=“ + 编号+ “MsgBox (“商品已入库成功!“)入库单号 = “编号 = “数量 = “进货价 = “供应商 = “操作员 = “商品名 = “