ACCESS条形码扫描系统的设计开发.docx
- 文档编号:8677826
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:22
- 大小:527.12KB
ACCESS条形码扫描系统的设计开发.docx
《ACCESS条形码扫描系统的设计开发.docx》由会员分享,可在线阅读,更多相关《ACCESS条形码扫描系统的设计开发.docx(22页珍藏版)》请在冰豆网上搜索。
ACCESS条形码扫描系统的设计开发
ACCESS2000条形码扫描系统的设计开发
摘要
文章深入浅出地介绍了利用MicrosoftAccess2000开发条形码扫描系统,以满足对产品条形码的扫描、打印、信息追溯等功能。
关键词:
ACCESS2000,条形码,扫描,追溯
一、系统概述
1.1系统功能与应用背景
随着座椅系统功能的日渐复杂,电功能逐渐增多,客户的期望不断增长,企业自身的要求也逐渐提高,条形码成了日常生产中经常遇到的一种信息储存模式。
通常情况下,条形码记录了产品的各种信息,如:
零件号,生产日期,序列号等。
用一种更为形象的说法,条形码就是生产产品的“身份证”。
如何用简单的方法对产品“身份证”与其他零件的“身份证”做到对应和追溯,成了生产管理的一个课题。
即将为大家介绍的自主开发的条形码扫描系统软件可以很好的解决这个问题。
其操作简单,界面友好,具备基本的用户管理外,还提供了对记录数据的快速查询。
本系统的功能主要有:
●条码扫描、打印、检查打印条码系统
●条码扫描现场追溯系统
●条码信息追溯查询系统
●数据库自动备份系统
●用户登录、权限系统
●系统功能设置系统
1.2系统预览
图1-1是系统运行时的主界面,从图中看到主界面包括条码扫描、条码打印、数据查询、权限设置、自动备份等功能。
图1-1系统运行主界面
图1-2是系统运行时的数据查询界面,其中包括对数据库数据的删除、修改等操作,当然,只有特定用户才可以对数据进行操作。
图1-2数据查询界面
1.3系统特点
该条形码扫描系统有如下特点:
●系统利用Microsoft自带的ACCESS2000系统环境下运行,无需其他软件支持
●开发设计简单,功能实现仅需要很少量的代码编写
●系统操作简单,并有操作提示,如果操作错误,系统会提示操作者,确认后才会继续执行。
二、系统设计
2.1系统设计思想
对于系统的实现方式可以用图2-1表示
图2-1系统实现方式
用户界面提出访问数据库的请求,通过控件访问数据库,所以这里需要做的就是,有选择地从数据库中选出需要显示的数据记录。
2.2系统功能模块划分
在开发数据库应用程序之前,必须清楚地了解程序需要实现的各项功能,设计出应用程序的结构。
根据上述的系统功能分析,可以得出如图2-2所示的系统功能模块图。
图2-2系统功能模块图
2.3系统结构设计
根据上面的分析,可以得到如图2-3所示的系统结构设计图
图2-3系统结构设计图
三、数据库设计
3.1数据库需求分析
在条形码扫描系统中,最核心的数据是两种条形码一一对应的追溯数据库以及条形码打印的数据库,所有其他功能都是为了这两者服务的。
在本系统中,当然必不可少的是需要对这些数据进行添加、修改和删除操作。
但仅仅有这些是不够的,更重要的是要对这些数据进行追溯查询及分析。
通过上述的系统功能分析,针对一般的管理信息系统的需求,总结如下的需求信息:
●气囊条形码和面套条形码数据存在一一对应的关系。
●由于存在追溯要求,两种条形码的长度是不变的。
●数据库随着生产不同,数据量也不同,所以要对生产时间进行比较。
●可能存在重复扫描的条形码,需要对重复扫描的条形码进行备注
●已经扫描的条码可以修改、删除、浏览、查询。
●不同用户具有不同的用户名和密码。
经过上述的系统功能的分析和需求总结,考虑到将来功能上的扩展,设计如下所示的数据项和数据结构
●条形码扫描信息:
包含的数据项有操作人员信息、气囊条形码、面套条形码、生产日期、生产时间、备注信息。
●条形码打印信息:
包含的数据项有操作人员信息、气囊条形码、座椅条形码、打印日期、打印时间、备注信息。
●条形码检查信息:
包含的数据项有操作人员信息、气囊条形码、检查日期、检查时间、备注信息
●用户信息:
包含的数据项有用户名、密码、权限等级等。
●其他信息:
如权限设置、参数设置等,就不再文章中继续说明,需要使用的读者可以参考源文件自行设计。
在上面的需求分析、数据结构设计、数据项分析的基础上,下面可以开始数据库概念结构设计了。
3.2数据库概念结构设计
对于一个数据库管理员来说,为他的数据库所能做的最好事情就是使之开始于一个合理的逻辑设计。
概念模型是用户和数据库设计人员之间交流的工具。
根据上面的设计规划出的实体有:
条形码扫描实体、条形码打印实体、条形码检查实体等。
各实体的E-R如图3-1到图3-3所示。
图3-1条形码扫描实体E-R图图3-2条形码打印实体E-R图
图3-2条形码检查实体E-R图
3.3数据库逻辑结构设计
关系数据模型由概念模型转化而来,是按照计算机系统的观点来对数据建模的。
从关系模型产生的数据库设计即为逻辑设计。
数据库的逻辑设计是用来描述数据库的组织机构、生成数据库模式的。
一个E-R图可以准确地映射到关系模型上。
因为它就是为这个目的而设计的。
最后,实体和关系变成了表,属性变成了列,标识符属性变成了主键。
将上面的数据库概念结构转换为某镇数据库系统所支持的实际数据库模型,也就是数据库的逻辑机构。
由于篇幅有限,这里仅针对条形码扫描表进行展开,其他表的逻辑结构,可以参考源数据库。
表3-1条形码扫描(TblBarcode)表
字段名
类型
长度
是否为空(默认值)
说明
编号
自动编号
长整型
否
主键
序号
数字
长整型
否
序列号
操作人员
文本
20
否
工号
生产日期
日期/时间
短日期
否
生产日期
生产时间
日期/时间
长时间
否
生产时间
气囊条码
文本
50
否
气囊条码
面条条码
文本
50
否
面套条码
备注
文本
50
否
备注
四、数据库的生成和配置
经过前面的需求分析和概念就够设计以后,得到数据库逻辑结构。
现在就可以对Access数据库中创建数据表了。
需要注意的是,对于NTFS格式的分区,Access数据库文件或它所在的目录必需有足够的访问权限才可保证对数据库的操作,尤其是写操作正常进行,一般,简单的解决办法是给它的Everyone用户添加完全控制权限。
另外还需要去掉数据库文件的只读属性,否则无法进行更新和删除操作。
五、条形码扫描系统主界面设计
为了简化操作,本系统的主界面相对比较简单,只是简单几个命令按钮将各个界面连接起来。
不过值得一提的是,为了保证数据库的安全性和对应窗体的权限,每一个按钮的代码又有所不同的加入的保证权限代码,确保只有相对应的操作人员才可以操作。
如果没有权限的用户点击命令按钮,则会提示没有权限,无法进入界面,如图5-1
图5-1无权限进入界面提示
该功能的实现,只需要在代码加入如下代码即可:
PrivateSubcmd_scan_Click()
IfDLookup("权限","QryRight","窗体名='FrmScan'and用户名='"&username&"'")="无权"Orusername=""Then
Msg("你无权登录该界面,请和管理员联系!
")'判断用户权限,“无权”或“未登录”,则无法进入界面
……
……
EndSub
另外数据库自带的备份程序,为了保证数据库的安全,在主界面启动的过程中,加了自动备份的提示代码,具体代码如下:
PrivateSubForm_Load()
IfDLookup("startup","TblPara","项目='FrmBackup'")Then'判断是否设置了启动自动备份功能
IfIsLoaded("FrmBackup")=FalseThen'判断如果备份界面未打开,提示是否打开
Msgyn("是否需要打开自动备份功能?
")
Ifyn=vbYesThen
DoCmd.OpenForm("frmbackup")
Forms.frmbackup.Visible=False
EndIf
EndIf
EndIf
EndSub
六、条形码打印界面操作模块
条形码打印模块实现以下功能:
●记录扫描的条形码
●组合生成新的条形码
●打印新生成的条形码
●防错功能
在本系统中,分别设定一定的中间变量,将扫描的值赋值到中间变量,通过中间变量的计算,将最终值返回。
并通过Access报表功能打印所需要的条码。
下面简要介绍一下界面的设计和代码的设定。
6.1条形码打印模块界面设计
在本窗体中主要还是用到了窗体设计中常用的控件,窗体中主要空间的属性和功能如表6-1所示。
表6-1条形码打印窗体及其控件的属性和功能
控件名称
属性
属性取值
功能
FrmPrint(Form)
Caption
条形码打印
条形码打印窗体
txt_PN
Text
空
扫描气囊零件号
txt_sabcode
Text
空
扫描气囊条形码
Visible
False
初始状态不可见
lbl_hint
Caption
随意
显示操作提示信息
Lbl_error
Caption
随意
显示操作错误信息
cmd_Idconfirm
Caption
输入工号
输入操作员工工号
cmd_Back
Caption
返回
退出界面
6.2条形码打印模块界面预览
完成以上操作后,条形码打印操作模块界面如图6-1所示
图6-1条形码打印操作模块界面
由于篇幅,下面就主要的编程过程为大家介绍。
6.3条形码打印模块代码设计
1.初始化窗体
Ø功能:
初始化窗体,并确认操作员是否有权限进入、扫描以后是否需要对打印的条码进行扫描确认操作等
代码如下:
PrivateSubForm_Load()
lbl_error.Caption=""
Ischeck=(DLookup("startup","TblPara","项目='FrmPrint'")=-1)'是否需要对打印条码进行扫描确认
Me.txt_PN.SetFocus
Me.lbl_hint.Caption=DLookup("hintmsg","TblMsg","ID='3'")
Ifop_id=""Then'如果登入用户名为空,则退出界面
DoCmd.Close
Msgyn("未登录!
无法进入该界面,是否需要打开登录界面?
")
Ifyn=vbYesThenDoCmd.OpenForm("FrmLogin")
EndIf
EndSub
程序中涉及到一些辅助函数及变量,在文章的最后会为大家简要的介绍。
2.条形码的扫描记录与打印
Ø功能:
记录扫描的条形码,并重新生成新的条形码,通过报表功能打印。
这段代码是扫描打印的精髓所在。
可以说,有了这段代码,条形码扫描和打印的功能才能真正实现。
代码分两段,主要是通过对文本框控件中数值的变化来进行对结果判断的。
代码如下
PrivateSubtxt_PN_Change()
sab_PN=Me.txt_PN.Text'变量sab_PN赋值
Me.lbl_sabcode=Me.txt_PN.Text'lbl_sabcode赋值
IfLen(sab_PN) Me.lbl_error.Visible=True Me.lbl_error.Caption=DLookup("errmsg","TblMsg","ID='4'") Me.txt_PN.ForeColor=DLookup("barerror","TblPara","项目='FrmPrint'") ElseIfLen(sab_PN)=DLookup("sourceA","TblPara","项目='FrmPrint'")Then'sab_PN符合要求继续 Ifsab_PN="9003268"Then'符合条件1,sab_PN1赋值 sab_PN1="AQ" ElseIfsab_PN="9003267"Then'符合条件2,sab_PN1赋值 sab_PN1="AP" Else'不符合条件,重新扫描 Msg("扫描条码不正确,请重新扫描") …… EndIf Me.cmd_back.SetFocus'符合条件后,扫描零件条码 Me.txt_PN.Visible=False Me.txt_sabcode.Visible=True …… EndIf EndSub 这是第一段程序代码,主要起判断零件号作用,其中有一部分加入的防错的代码,由于气囊条形码的零件号只有两种,所以只是做了两个判断语句,如果还有其他条码可以用Case语句进行多条件的判断,这里就不详细描述了。 第二段代码承接第一段代码,通过第一段代码的判断后,第二段代码将第一段代码中赋值的变量和气囊条形码组合生成新的座椅条形码,并打印,代码如下: PrivateSubtxt_sabcode_Change() DimiAsInteger'定义变量i(循环判断记录) DimSTempAsString'定义变量STemp(SQL查询) DimrsAsADODB.Recordset'定义变量rs(数据库链接) Dimsign1AsBoolean Setrs=NewADODB.Recordset'设定变量rs为新数据链接 …… IfLen(sab_code) Me.lbl_error.Visible=True Me.lbl_error.Caption=DLookup("errmsg","TblMsg","ID='4'") Me.txt_sabcode.ForeColor=DLookup("barerror","TblPara","项目='FrmPrint'") ElseIfLen(sab_code)=DLookup("SOURCEB","TblPara","项目='FrmPrint'")Then …… STemp="Select*FromTblSABCode" rs.OpenSTemp,CurrentProject.Connection,adOpenKeyset,adLockOptimistic '判断“备件名称”等控件是否为空 '循环判断该编号的档案是否存在 Ifrs.RecordCount>0Then rs.MoveFirst Fori=1Tors.RecordCount '如果存在,弹出信息并退出子过程 If(rs("座椅条码")=sab_code)Then sign1=True Me.lbl_error.Visible=True Me.lbl_error.Caption=DLookup("errmsg","TblMsg","ID='1'") Msgyn("座椅条码: "&sab_code&Chr(13)&"已经存在! 是否需要记录? ") Ifyn=vbYesThen GoTorecord Else …… EndIf Else rs.MoveNext EndIf Nexti EndIf record: STemp="INSERTINTOTblSABCode" STemp=STemp&"(操作人员,扫描日期,扫描时间,气囊条码,座椅条码,备注)" STemp=STemp&"VALUES('"&op_id&"','"&date&"'," STemp=STemp&"'"&time&"','"&sab_code1&"','"&sab_code&"'," Ifsign1=TrueThen STemp=STemp&"'"&"条码重复"&"')" Else STemp=STemp&"'"&"正常扫描"&"')" EndIf DoCmd.RunSQLSTemp'使用DoCmd对象的RunSQL方法执行查询 Msg("气囊条码: "&sab_code&Chr(13)&"已经添加! ") …… STemp="Select*FromTblTemp"‘删除TblTemp中所有数据,并记录当前扫描数据 CurrentDb.Execute"delete*fromTblTemp" '打开“SGM座椅总装厂备件库存”数据表 'rs.OpenSTemp,CurrentProject.Connection,adOpenKeyset,adLockOptimistic STemp="INSERTINTOTblTemp" STemp=STemp&"(条码1,条码2)" STemp=STemp&"VALUES('"&sab_code&"','"&"*"&sab_code&"*"&"')" DoCmd.RunSQLSTemp'使用DoCmd对象的RunSQL方法执行查询 'DoCmd.OpenReport("RptPrint"),acViewNormal'打印一张条码 'DoCmd.OpenReport("RptPrint"),acViewNormal'打印一张条码 IfIscheck=TrueThen'如果Ischeck为真(需要检查打印条码) sab_code2=sab_code'赋值sab_code到sab_code2 DoCmd.OpenForm("FrmCheck")'打开“检查打印条码”界面 EndIf Setrs=Nothing'释放系统为Rs数据集分配的空间 EndIf EndSub 通过上述的两段代码,就可以实现条形码扫描并打印的功能。 关于条形码检查与条形码扫描的界面,由于其界面、功能、代码原理相似,这里就不在详细介绍,有兴趣的读者,可以参考源程序进行编写。 下面为大家介绍一下数据查询及其编辑模块的设计。 七、条形码追溯查询编辑模块 条形码追溯查询编辑模块实现以下功能 ●查询所有扫描的条形码数据 ●导出数据库到指定EXCEL文件 ●编辑、修改条形码数据文件 ●删除条形码数据文件 在本系统中,通过SQL语句可以很轻松的实现说需要的查询功能。 引用Excel函数,可以实现导数数据库,数据的修改并不只直接对数据库修改,而是通过控件进行修改,保证的数据的安全性,另外,权限的设定也确保了只有相关管理人员才可以使用该功能。 7.1条形码追溯查询编辑模块界面设计 在本窗体中,应用的子窗体的里面,主要控件为: 子窗体: 以数据表形式列出所有条形码数据记录 查询文本框: 通过输入查询条件,自动查询所需记录 导出按钮: 一键导出查询的所有记录 7.2条形码追溯查询编辑模块界面预览 界面如图7-1所示 图7-1条形码追溯模块界面 7.3条形码追溯查询编辑模块代码设计 1.条形码查询 Ø功能: 通过对文本框的变化来判断查询条件,并实现查询功能,具体代码如下: PrivateSubtxt_search_Change() Me.a=Me.txt_search.Text Me.subform.Requery'刷新子窗体 IfIsNull(DLookup("编号",DLookup("QryName","TblSearchFrm","SubFrmName='"&Me.subform.SourceObject&"'")))Then Me.cmd_export.Enabled=False Me.subform.Enabled=False Else Me.cmd_export.Enabled=True Me.subform.Enabled=True EndIf EndSub 当然,要实现查询,必须需要有一个ACCESS数据库的查询表作为子窗体的数据源,查询表的SQL语句代码如下: SELECTTblBarcode.编号,TblBarcode.生产日期,TblBarcode.生产时间,TblBarcode.气囊条码,TblBarcode.面套条码,TblBarcode.备注,TblBarcode.操作人员 FROMTblBarcode WHERE(((TblBarcode.生产日期)Like"*"&[Forms]! [FrmSearch]! [a]&"*"))OR(((TblBarcode.生产时间)Like"*"&[Forms]! [FrmSearch]! [a]&"*"))OR(((TblBarcode.气囊条码)Like"*"&[Forms]! [FrmSearch]! [a]&"*"))OR(((TblBarcode.面套条码)Like"*"&[Forms]! [FrmSearch]! [a]&"*"))OR(((TblBarcode.备注)Like"*"&[Forms]! [FrmSearch]! [a]&"*"))OR(((TblBarcode.操作人员)Like"*"&[Forms]! [FrmSearch]! [a]&"*")) ORDERBYTblBarcode.生产日期,TblBarcode.生产时间; 有了以上两段代码,就可以加上对子窗体的数据控件的简单设置,就可以实现万能模糊查询的功能了。 接下来就是对数据编辑修改的代码设计了。 2.数据编辑 Ø功能: 双击子窗体数据,打开数据编辑窗体,对数据进行编辑和修改。 这段代码是应用在子窗体中的。 具体代码如下: PrivateSubForm_DblClick(CancelAsInteger) IfDLookup("权限","QryRight","窗体名='FrmModify'and用户名='"&username&"'")="无权"Orusername=""Then Msg("你无权登录该界面,请和管理员联系! ") Else DoCmd.OpenForm("FrmModify") Forms! [FrmModify].Caption="修改条形码数据" Forms! [FrmModify]! [生产日期]=Forms! [FrmSearch]! [subform]! [生产日期] …… EndIf EndSub 当然仅有这段代码是无法实现数据边检功能的,更多代码在数据编辑界面中。 数据编辑界面如图7-2。 图7-2数据编辑模块界面 3.数据修改、删除 功能: 修改当前记录,并保存,该修改不是直接对数据修
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ACCESS 条形码 扫描 系统 设计 开发