生产信息系统报表分析功能(一)
hi,手机边亲爱的你还好吗?
一直有人问,Access只是要一个型数据库,到底能做啥?除了比Excel能多存一些数据外感觉没有啥特点了,用来统计数据好像也没有Excel方便。Access本身是一个数据库,能存储的数据自然比Excel大,同时,协同工作也比Excel方便,只要合理运用还能做成一定体量的管理系统,类似ERP这样的大型系统也可以做到,而且学习开发的成本也比较低,那今天就给大家分享一个简单的生产信息的报表分析功能,接下去我会分几篇文章来给大家讲解的,希望讲完成后,大家能有所收获。好的,那让我们开始吧。
01、建表
第一步,我们还是和之前一样,先创建表,这里我们就不做系统的需求分析了,直接上手做了,大家注意,自己在开发系统时,还是需要先写相关的需求文档的。先建如下图一样的表,用来存放生产信息。
可以自己先添加一些数据
子窗体的数据源为一张临时表(TMP_Report),表结构如下图:
同时我们再新增一个查询(qry_生产信息):
SQL语句如下:
SELECT ProductionID, ProductionDate, Department, Product, PlanningQty, FTGoodsQty, Nz([FTgoodsqty],0)+Nz([rework],0)+Nz([scrapqty],0) AS 生产总数量, Rework, ScrapQty, Recorder, RecordTime
FROM tbl_ProductionData;
02、创建窗体
创建如下图一样的窗体,一个主窗体,一个子窗体。注意,这里我们不在来创建新增、编辑这些功能了,我们主要是要来用来做数据的分析。
03、添加查询按钮代码
我们的窗体上有如下图的三个条件,其中部门的组合框的行来源为:所有部门;生产部门A;生产部门B;生产部门C。行来源类型为:值列表。
查询按钮的代码如下:
Private Sub cmd_Select_Click()
On Error GoTo ErrorHandler
Dim strSQL As String
strWhere = ""
If IsNull(Me.Department) And IsNull(Me.StratDate) And IsNull(Me.FinishDate) Then
Exit Sub
End If
If Not IsNull(Me.Department) And Me.Department <> "所有部门" Then strWhere = strWhere & "Department='" & Me.Department & "' and "
If Not IsNull(Me.StratDate) Then strWhere = strWhere & "ProductionDate>=#" & Me.StratDate & "# and "
If Not IsNull(Me.FinishDate) Then strWhere = strWhere & "ProductionDate<=#" & Me.FinishDate & "# and "
If Len(strWhere) > 0 Then
strWhere = " where " & Left(strWhere, Len(strWhere) - 5)
End If
' Debug.Print strWhere
CurrentDb.Execute "delete * from TMP_Report"
If Me.Department = "所有部门" Then
strSQL = "insert into TMP_Report(ProductionDate,总数量,报废数量,合格率,一次通过率,报废率)" _
& " select ProductionDate,sum(生产总数量) as 总数量,sum(ScrapQty) as 总报废数," _
& " sum(FTGoodsQty+Rework)/sum(生产总数量) as 合格率,sum(FTGoodsQty)/sum(生产总数量) as 一次通过率," _
& "sum(ScrapQty)/sum(生产总数量) as 报废率" _
& " from qry_生产信息 " & strWhere & "group by ProductionDate"
Else
strSQL = "insert into TMP_Report(ProductionDate,Department,总数量,报废数量,合格率,一次通过率,报废率)" _
& " select ProductionDate,Department,sum(生产总数量) as 总数量,sum(ScrapQty) as 总报废数," _
& " sum(FTGoodsQty+Rework)/sum(生产总数量) as 合格率,sum(FTGoodsQty)/sum(生产总数量) as 一次通过率," _
& "sum(ScrapQty)/sum(生产总数量) as 报废率" _
& " from qry_生产信息 " & strWhere & "group by ProductionDate,Department"
End If
'Debug.Print strSQL
CurrentDb.Execute strSQL
If Me.Department = "所有部门" Then
CurrentDb.Execute "update TMP_Report set Department='所有部门'"
End If
Me.frmChild.Form.Requery
ExitHere:
Exit Sub
ErrorHandler:
MsgBox Err.Description, vbCritical
Resume ExitHere
End Sub
04、运行测试
最后,就是运行测试一下系统了。
这里我用到了查询,用到临时表,我们为什么要这么做呢?下一篇文章来告诉大家。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?