目的
学习该模板的查询设计,用于自制管理系统人员信息详情查询——查询员工编号,并根据查询生成表,用于窗体文件显示。
顺便学习markdown文档写法 2018-03-18
附件:点击查看-百度云
提取密码:hruv
版本一,通过查询设计,生成报表
无数据库表关系
一 创建表链接数据源表
1.表设计:规格/客户/商品/销售员/订单明细/生产明细/销售明细
2.表规格:规格编码+规格名称
3.表客户:客户编码+客户名称
4.表商品:商品编码+商品名称
5.表销售员:销售员编码+销售员
6.表订单明细:序号+订货月份+商品编码+规格编码+订货数量+订货价格+客户编码+销售员编码
7.表生产明细:序号+分厂+生产月份+商品编码+规格编码+生产数量
8.表销售明细:序号+销售日期+商品编码+规格编码+销售数量+客户编码+价格+销售员编码
二 建立临时表
1.tab参数表:StartDate + EndDate + LastDate
2.tbl临时表 _ 本日销量:项目名称+销售小计 未定义主键
3.tbl临时表 _ 累计销量:项目名称+销售小计 未定义主键
4.tbl临时表 _ 销售日报:项目名称+订单数量+本日销量+本月累计 未定义主键
5.tbl临时表 _ 月订单量:项目名称+订货量 未定义主键
三 建立查询
(一) 选择 - 查询
1.建立查询qry销售明细
1.1 参与表【tbl销售明细】;
1.2 除“序号”外的所有字段,添加到条件;
1.3 对销售日期设置条件Between DLookUp("[startdate]","tbl参数表") And dlookup("[enddate]","tbl参数表")
。
2.建立查询qry订单明细
2.1 参与表【tbl订单明细】;
2.2 除“序号”外的所有字段,添加到条件;
2.3 对订货月份设置条件between dlookup("[startdate]","tbl参数表") and dlookup("[enddate]","tbl参数表")
。
(二) 更新 - 查询
1.建立查询qry更新当日销量
1.1 参与表【tbl临时表 _ 销售日报】、【tbl临时表 _ 本日销量】;
1.2 对上面2个表相同项项目名称鼠标拖动建立关系;
1.3 将【tbl临时表 _ 销售日报】的本日销量,更新到【tbl临时表 _ 本日销量】销售小计里;
1.4 条件写法对表名和字段名 [ ] 框住。
2.建立查询qry更新月订单量
2.1 参与表【tbl临时表 _ 销售日报】、【tbl临时表 _ 月订单量】;
2.2 对项目名称建立查询关系;
2.3 将【tbl临时表 _ 销售日报】的订单数量,更新到【tbl临时表 _ 月订单量】订货量里;
2.4 条件[tbl临时表 _ 月订单量].[订货量]
。
(三) 删除 - 查询
1.建立qry清空销售日报
1.1 参与表【tbl临时表 _ 销售日报】;
1.2 以 * 符号,添加所有字段;
1.3 删除条件显示为“from”。
(四) 生成 - 查询
1.建立qry本日销量
生成数据,追加到【tbl临时表 _ 本日销量】
1.1 参与表【tbl销售明细】、【tbl编码 _ 客户】;
1.2 对客户编码建立关系;
1.3 参与字段“客户名称”、“销售数量”、“销售日期”;
1.4 添加汇总,总计“客户名称”分类汇总group by,并更改字段显示为“项目名称”;
1.5 总计销售数量进行合计,更改字段显示为“销售小计”,并降序排列;
1.6 总计销售日期选择where,赋予条件 DLookUp("[结束日期]","tbl参数表");
1.7 销售日期设置为不显示。
2.建立qry本月累计销量
生成数据,生成到【tbl临时表 _ 累计销量】
2.1 先建立选择查询【qry销售明细】、【qry订单明细】
2.2 参与表【qry销售明细】、【tbl编码 _ 客户】;
2.3 添加字段 “客户名称”、“销售数量”;
2.4 添加汇总,总计“客户名称”分类汇总group by,总计“销售数量”合计;
2.5 更改字段“客户名称”为项目名称,“销售数量”为销售小计。
- 建立qry月订单量
生成数据,生成到【tbl临时表 _ 月订单量】
3.1 参与表【qry订单明细】、【tbl编码 _ 客户】;
3.2 添加字段 “客户名称”、“订货数量”;
3.3 添加汇总,总计“客户名称”分类汇总group by,总计“销售数量”合计;
3.4 更改字段“客户名称”为项目名称,“订货数量”为订货量。
(五) 追加 - 查询
1.建立qry追加销量累计数
生成数据,追加到【tbl临时表_销售日报】
1.1 参与表【tbl临时表 _ 累计销量】;
1.2 添加字段 “项目名称”、“销售小计”;
1.3 追加到“项目名称”、“本月累计”。
四 建立窗体
1.建立frm报表选择
用于录入销售日期,以生成供查询数据的开始、结束、月底时间
1.1 进入窗体设计,插入文本框(格式选择短日期);
1.2 插入按钮控件,设置为确定和取消;
1.3 设置“取消”按钮代码:DoCmd.Close acForm, "frm报表选择", acSaveYes
;
1.4 由于“确定”按钮代码,涉及报表生成,因此需要先建立窗体【frm销售明细】和报表【rpt销售日报】;1.5 编辑“确定”按钮代码
Private Sub Save _ Click()
Dim StartDate As Date
Dim EndDate As Date
Dim LastDate As Date
Dim strSQL As String
If IsNull(Me.销售日期) Then
MsgBox "请输入要查询的销售日期", vbCritical, "提醒"
Me.销售日期.SetFocus
Exit Sub
End If
EndDate = Me.销售日期
StartDate = CDate(Year(EndDate) & " - " & Month(EndDate) & " - " & "1")
lastdate = CDate(Year(EndDate) & " - " & Month(EndDate) + 1 & " - " & "1") - 1
strSQL = "update tbl参数表 set startdate=# " & StartDate & " #,enddate=# " & EndDate & " #,lastdate=# " & LastDate & " #"
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL '将 销售的当天日期,月初开始日期,月底结束日期写入 tbl参数表,以供查询作为条件使用
DoCmd.OpenQuery "qry清空销售日报" '每次生成报表数据前,对 tbl临时表_销售日报 进行清空
DoCmd.OpenQuery "qry本月累计销量" '生成 本月累计销量的清单(例如按客户)
DoCmd.OpenQuery "qry追加销量累计数" '将 清单追加到 tbl临时表_销售日报 中
DoCmd.OpenQuery "qry本日销量" '生成当天的销售量(按客户)
DoCmd.OpenQuery "qry更新当日销量" '对 tbl临时表_销售日报 中的本日销量进行更新
DoCmd.OpenQuery "qry月订单量" '生成本月的订单量(按客户)
DoCmd.OpenQuery "qry更新月订单量" '对 tbl临时表_销售日报 中的订单量进行更新
DoCmd.SetWarnings True
DoCmd.OpenReport "rpt销售日报", acViewReport '打开报表
End Sub
2.建立frm销售明细
2.1 数据源【tbl销售明细】- 动态集;
2.2 添加所有字段,分割窗体,数据表在下方;
2.3 对字段标签“编码”改为名称;
2.4 更改字段商品名称、规格名称、客户名称、销售员文本框为组合框;
2.5 设置组合框代码
商品名称:select tbl编码_商品.商品编码, tbl编码_商品.商品名称 from tbl编码_商品;
规格名称:select tbl编码_规格.规格编码, tbl编码_规格.规格名称 from tbl编码_规格;
客户名称:select tbl编码_客户.客户编码, tbl编码_客户.客户名称 from tbl编码_客户;
销售员名称:select tbl编码_销售员.销售员编码, tbl编码_销售员.销售员 from tbl编码_销售员;
以上,限于列表,取2列 ,设置列宽 0cm;2cm;
五 建立报表
1.建立rpt销售日报
用于最后生成报表显示。序号+项目名称+订单数量+本日销量+本月累计+占订单百分比
[数据源]: tbl临时表 _ 销售日报
1.1 添加报表页眉。在页眉增加文本框,显示报表所属期间。
开始日期=DLookUp("startdate","tbl参数表")
,
结束日期=DLookUp("enddate","tbl参数表")
;
1.2 添加页面页眉,6个标签,属性为摘要显示要素;
1.3 添加主体要素,6个文本框,属性为摘要显示要素。并定义名称;
序号=1
运行总和:工作组之上
占订单百分比:=IIf(not IsNull([订单数量]), Round([本月累计]/[订单数量], 4),"")
1.4 设置页面页脚,2个文本框=now()
;="共"&[Pages]&"页,第"&[Page]&"页"
1.5 设置报表页脚,4个文本框+1个标签。对文本框定义;
订单合计=Sum([订单数量])
日销量合计=Sum([本日销量])
月销量合计=Sum([本月累计])
百分比=IIf(not IsNull([订单合计]),Round([订单合计]/[月销量合计],4),"")
总结
- 提供一个日期,根据此日期计算当月第一天和最后一天,并写入tbl参数表;
- 选择-查询,根据日期范围生成数据;
- 清空 tbl临时表 _ 销售日报 ;
- 根据选择查询 qry本月销量累计,分类汇总【qry销售明细】与【tbl编码_客户】生成 tbl临时表 _ 累计销量;
- 根据追加查询 qry追加销量累计数,将tbl临时表 _ 累计销量的项目名称和销售小计,追加到tbl临时表 _ 销售日报里;
- 根据生成查询 qry本日销量,将tbl编码_客户和tbl销售明细,通过客户分类汇总、合计销售数量、指定销售日期为enddate,然后生成表tbl临时表 _ 本日销量;
- 根据更新查询 qry更新当日销量,将tbl临时表 _ 销售日报中的当日销量更新为tbl临时表 _ 本日销量.销售小计;
- 根据生成查询 qry月订单量,分类汇总【qry订单明细】与【tbl编码_客户】生成 tbl临时表 _ 月订单量;
- 根据追加查询 qry更新月订单量,将tbl临时表 _ 销售日报中的订货数量更新为tbl临时表 _ 月订单量.订货量;
- 图解
st=>start: 选择销售日期
e=>end
in=>inputoutput: 日期设置
op1=>operation: qry清空销售日报-清空 tbl临时表_销售日报
op2=>operation: qry本月累计销量-生成 本月累计销量
op3=>operation: qry追加销量累计数-追加 tbl临时表_销售日报
op4=>operation: qry本日销量-生成 本日销量
op5=>operation: qry更新当日销量-更新 tbl临时表_销售日报-本日销量
op6=>operation: qry月订单量-生成 月订单量
op7=>operation: qry更新月订单量-更新 tbl临时表_销售日报-订单量
st->in->op1->op2->op3->op4->op5->op6->op7
备注
- 建表时,对临时表“tbl临时表_销售日报”,数据默认不应为0比较重要,会导致报表计算错误。
- tbl参数表,必须现有数据。SQL语句UPDATE才可以更新。