手把手教你写不良品数据库管理系统.docx
《手把手教你写不良品数据库管理系统.docx》由会员分享,可在线阅读,更多相关《手把手教你写不良品数据库管理系统.docx(67页珍藏版)》请在冰豆网上搜索。
手把手教你写不良品数据库管理系统
数据库知识实战应用-手把手教你写-不良品数据库管理系统
因本人工作需要,需对公司不良品进行管理,由于工作中用到的表格比较频繁,所以以EXCEL插件形式打开不合格品过程管理系统.
图1不合格品管理系统使用界面
1.为便于大家学习使用,特分享源码,禁止私自转载,或用于商业用途.
1.1.开发环境
●VisualSutdio
●WINXP/7/10
●Microsoft.NETFramework4.0或以上
1.2.开发语言和相关工具
●VB.NET
●ACCESS|SQLServer
●ADO.Net
注意1:
源码虽以ACCESS作为数据库,但更换SQLSever也是极其简单,基本只需把OleDb类替换成相应的SQL类就能完全运行成功.数据库字段设计比较简单,学习的话,按照图1设置;
注意2:
代码中涉及EXCEL插件(xlapp),存在较多VBA语法,有兴趣的话也可以改成VB.Net语法和类;
注意3:
为保证代码的原汁原味的,里面涉及的冗余的注释,分割线区类似代码,我不作任何修改.请忽略注释,自己动手删除.重新注解其实也是重新理解的过程,学习效率将事半功倍;
注意4:
想学习完整EXCEL插件开发的,可联系作者QQ:
88451376,拉学下群一起学习.
2.源码分享
ImportsSystem.Windows.Forms'使用窗体命名空间,窗体尺寸831,710
ImportsSystem.Data'使用DatSet和DataView类所必须的.
ImportsSystem.Data.OleDb'使用OleDbConnection、OleDbAdapter、OleDbCommand、OleDbParameter类所必须的.
ImportsSystem.Drawing'使用颜色命名空间
'myArray={"管理编号","发生日期","客户","供应商","产品规格","加工设备","发现过程","不良类型","操作者","类型区分","不良数量","完成工序","加工费用","材料费用","损失成本","不良现象及原因"}
PublicClassF01_不良品基本信息
'声明作用域为类级的对象,该对象建立了与数据库的连接,此时数据库为Access.
'DimstrSharePathAsString="\\192.168.X.XX\Users\不良品信息管理.accdb"
DimobjConnection1thAsNewOleDbConnection_
("Provider=Microsoft.Ace.OleDb.12.0;DataSource="&strSharePath)
'声明作用域为类级的对象,该对象用于从数据库中读取数据,并填充到DataSet对象中.
'这个构造函数使我们不必写Adapter属性SelectCommand相关代码.已经加入相关参数(SQL语句)
DimobjDataAdapterAsNewOleDbDataAdapter("SELECT不良品信息.*FROM不良品信息ORDERBY发生日期",objConnection1th)
DimobjDataAdapter1thAsNewOleDbDataAdapter()'该构造函数需要使用SelectCommand属性.用来填充履历卡数据的
DimobjDataSetAsNewDataSet()'声明作用域为类级的对象,该对象作为数据的容器,将所有数据存储到内存中,并不连接到数据库.
DimobjDataSet1thAsNewDataSet()'声明作用域为类级的对象,该对象作为数据的容器,将所有数据存储到内存中,并不连接到数据库.
DimobjDataViewAsDataView'声明作用域为类级的对象,DataView类用来表示定制表-从数据库返回以及存储在DatSet(DataTable)中的记录视图
DimobjDataView1thAsDataView'声明作用域为类级的对象,DataView类用来表示定制表-从数据库返回以及存储在DatSet(DataTable)中的记录视图
DimobjCurrencyManagerAsCurrencyManager'声明作用域为类级的对象,CurrencyManger对象用于控制绑定数据的移动;作为管理Binding对象的列表
DimmyArray()AsString'声明数组变量,数组长度为要引用的数据表字段数量.
'创建一个过程,将在Load事件(初始化代码)调用,并用来填充数据和显示数据.
PrivateSubFillDataSetAndView()
objDataSet=NewDataSet()'调用模块级对象,并重新初始化该(DataSet)对象
'向DataSet对象填充由Sql(Ole)DataAdapter对象SelectCommand属性从数据库检索到的数据..
'注意:
Fill方法使用选择命令SelectCommand.Connection.如果该链接已打开,就会自动打开填充数据后保持打开连接对象,反之则反.
objDataAdapter.Fill(objDataSet,"bl")'表(bl)是初始构建起来的,命名为bl.
objDataView=NewDataView(objDataSet.Tables("bl"))'初始化并构建DataView对象.
'CurrencyManager(窗体获取到的数据记录集合)对象包含于BindingContect集合(内置于Win窗体,无须创建)中,
'将DataView对象转化为CurrencyManager对象.
objCurrencyManager=CType(Me.BindingContext(objDataView),CurrencyManager)
EndSub
'创建一个过程,逐一将窗体中的控件属性和指定数据源创建Binding,并将其添加到集合中.
PrivateSubBindFields()
OnErrorResumeNext
DimiAsByte=0
'控件获取到的数据绑定(DataBindings属性),逐一清除(Clear方法)控件上的绑定(控件可能之前绑定过旧的DataView数据源)
myArray={"管理编号","发生日期","客户","供应商","产品规格","加工设备","发现过程","不良类型","操作者","类型区分","不良数量",
"完成工序","加工费用","材料费用","损失成本","不良现象及原因","备注","重量","处置完成","因素确定","图片路径"}
Fori=0ToUBound(myArray)
GroupBox1.Controls(myArray(i).ToString).DataBindings.Clear()
Nexti
'控件重新逐一绑定DateView数据源,add方法第一参数为要绑定的控件属性的名称,第二参数为要绑定的数据源,
'第三参数为要绑定给控件的数据字段(列表).
Fori=0ToUBound(myArray)
IfGroupBox1.Controls(myArray(i).ToString).Name<>"处置完成"Then
GroupBox1.Controls(myArray(i).ToString).DataBindings.Add("Text",objDataView,GroupBox1.Controls(myArray(i).ToString).Name)
Else
GroupBox1.Controls(myArray(i).ToString).DataBindings.Add("Checked",objDataView,GroupBox1.Controls(myArray(i).ToString).Name)
EndIf
'GroupBox1.Controls(myArray(i).ToString).DataBindings.Add("Text",objDataView,GroupBox1.Controls(myArray(i).ToString).Name)
IfGroupBox1.Controls(myArray(i).ToString).Name="发生日期"ThenGroupBox1.Controls(myArray(i).ToString).Text_
=Format(CType(GroupBox1.Controls(myArray(i).ToString).Text,Date),"yyyy/MM/dd")'转换日期格式类型.
Nexti
ToolStripLabel1.Text="Ready"'显示一个"只读"状态..
EndSub
'创建过程,并显示当前单个记录的位置.
PrivateSubShowPosition()
Try'格式化日期指定短日期格式.
发生日期.Text=Format(CType(GroupBox1.Controls("发生日期").Text,Date),"yyyy/MM/dd")'定义格式
CatcheAsSystem.Exception'声明一个错误变量类型
'如果异常(文本框为空),那么转换当前日期类型为文本类型,并写入文本框中.
GroupBox1.Controls("发生日期").Text=CType(Now,String)
发生日期.Text=Format(CType(GroupBox1.Controls("发生日期").Text,Date),"yyyy/MM/dd")'重新转换Date类型.
EndTry
txtRecordPosition.Text=objCurrencyManager.Position+1&
"of"&objCurrencyManager.Count()'显示当前记录位置,并标记记录数.
EndSub
'按钮单击事件,移动第一条记录
PrivateSubbtnMoveFirst_Click(SenderAsObject,
EAsEventArgs)HandlesbtnMoveFirst.Click
DimintPositionAsInteger
objCurrencyManager.Position=0'设置当前记录为第一条记录.
intPosition=objCurrencyManager.Position'记录位置赋值给变量
RemoveHandlergrdAuthorTitles.SelectionChanged,AddressOfgrdAuthorTitles_SelectionChanged'解除事件关联
grdAuthorTitles.CurrentCell=grdAuthorTitles.Rows(intPosition).Cells(0)'视图控件指针选择指定行第一个单元格
AddHandlergrdAuthorTitles.SelectionChanged,AddressOfgrdAuthorTitles_SelectionChanged'绑定事件
'控件与数据源(objDataView)绑定,通过CurrencyManager对象指定位置,因为控件绑定同一数据源,所以控件显示的记录是同步的.
ShowPosition()
If查询条件.Text<>""ThengrdAuthorTitles.CurrentCell=grdAuthorTitles.Rows(0).Cells(0)'CurrentCell
EndSub
'按钮单击事件,移动上一条记录
PrivateSubbtnMovePrevious_Click(SenderAsObject,
EAsEventArgs)HandlesbtnMovePrevious.Click
DimintPositionAsInteger
objCurrencyManager.Position-=1'Movetothepreviousrecord..
intPosition=objCurrencyManager.Position'记录位置赋值给变量
RemoveHandlergrdAuthorTitles.SelectionChanged,AddressOfgrdAuthorTitles_SelectionChanged'解除事件.
grdAuthorTitles.CurrentCell=grdAuthorTitles.Rows(intPosition).Cells(0)'视图控件指针选择指定行第一个单元格.
AddHandlergrdAuthorTitles.SelectionChanged,AddressOfgrdAuthorTitles_SelectionChanged'绑定事件.
ShowPosition()'控件与数据源(objDataView)绑定,通过CurrencyManager指定位置,因为控件绑定同一数据源,所以控件显示的记录是同步的.
If查询条件.Text<>""ThengrdAuthorTitles.CurrentCell=grdAuthorTitles.Rows(0).Cells(0)'CurrentCell
EndSub
'按钮单击事件,移动下一条记录.
PrivateSubbtnMoveNext_Click(SenderAsObject,
EAsEventArgs)HandlesbtnMoveNext.Click
DimintPositionAsInteger
'移动下一条记录.
objCurrencyManager.Position+=1'Movetothenextrecord..
intPosition=objCurrencyManager.Position'记录位置赋值给变量
RemoveHandlergrdAuthorTitles.SelectionChanged,AddressOfgrdAuthorTitles_SelectionChanged'解除事件
grdAuthorTitles.CurrentCell=grdAuthorTitles.Rows(intPosition).Cells(0)'视图控件指针选择指定行第一个单元格
AddHandlergrdAuthorTitles.SelectionChanged,AddressOfgrdAuthorTitles_SelectionChanged'绑定事件
ShowPosition()'控件与数据源(objDataView)绑定,通过CurrencyManager指定位置,因为控件绑定同一数据源,所以控件显示的记录是同步的.
If查询条件.Text<>""ThengrdAuthorTitles.CurrentCell=grdAuthorTitles.Rows(0).Cells(0)'CurrentCell
EndSub
'按钮单击事件,移动最后一条记录
PrivateSubbtnMoveLast_Click(SenderAsObject,
EAsEventArgs)HandlesbtnMoveLast.Click
DimintPositionAsInteger
'移动最后一条记录,不需要调用重新绑定过程,自动同步的,只要不更新,就不存在数据源集的变更
objCurrencyManager.Position=objCurrencyManager.Count-1'Settherecordpositiontothelastrecord..
intPosition=objCurrencyManager.Position'记录位置赋值给变量
RemoveHandlergrdAuthorTitles.SelectionChanged,AddressOfgrdAuthorTitles_SelectionChanged'解除事件
grdAuthorTitles.CurrentCell=grdAuthorTitles.Rows(intPosition).Cells(0)'视图控件指针选择指定行第一个单元格
AddHandlergrdAuthorTitles.SelectionChanged,AddressOfgrdAuthorTitles_SelectionChanged'绑定事件
ShowPosition()'控件与数据源(objDataView)绑定,通过CurrencyManager指定位置,因为控件绑定同一数据源,所以控件显示的记录是同步的.
If查询条件.Text<>""ThengrdAuthorTitles.CurrentCell=grdAuthorTitles.Rows(0).Cells(0)'CurrentCell
EndSub
PrivateSubbtnDisplayingRedData_Click(senderAsObject,eAsEventArgs)HandlesbtnDisplayingRedData.Click
ForiAsInteger=0TogrdAuthorTitles.RowCount-2'有一个空白行也算一行
IfCType(grdAuthorTitles.Item(18,i).Value.ToString(),Boolean)Then
grdAuthorTitles.Rows(i).DefaultCellStyle.Font=NewFont("宋体",9,FontStyle.Regular)'构建一个字体类及相关属性
grdAuthorTitles.Rows(i).DefaultCellStyle.ForeColor=Color.Black'字体颜色设置为黑色
Else
grdAuthorTitles.Rows(i).DefaultCellStyle.Font=NewFont("宋体",9,FontStyle.Regular)'构建一个字体类及相关属性
grdAuthorTitles.Rows(i).DefaultCellStyle.ForeColor=Color.Red'字体颜色设置为红色
EndIf
Next
EndSub
'加载窗体触发事件
PrivateSubF01_不良品基本信息_Load(senderAsObject,eAsEventArgs)HandlesMyBase.Load
'需要说明的是,Fill方法会执行命令(SelectCommand),其Connection属性保持为调用该方法时的状态.
'OnErrorResumeNext
FillDataSetAndView()'调用FillDataSetAndView过程检索数据并调用BindFields过程绑定数据源字段到指定控件.
ShowPosition()'调用ShowPosition方法,并显示当前记录标签位置
'BindFields()'调用绑定控件过程,因为有复合框,所以放在事件最后面.
grdAuthorTitles.AutoGenerateColumns=True'让grd控件创建所需要的所有列.
grdAuthorTitles.DataSource=objDataSet'设置DataSet对象,作为gird控件的数据来源(实际上就是一个绑定过程,告知控件从哪里获得数据).
grdAuthorTitles.DataMember="bl"'设置gird控件要显示的数据源(具体的表名称).
'将对齐方式格式改为垂直居中向右对齐.
DimobjAlignRightCellStyleAsNewDataGridViewCellStyle'初始化DataGridViewCellStyle对象(作为grd控件单元格或标题样式实例)
objAlignRightCellStyle.Alignment=DataGridViewContentAlignment.MiddleRight
DimobjAlternatingCellStyleAsNewDataGridViewCellStyle()'初始化DataGridViewCellStyle对象(grd控件单元格样式实例)作为交叉行样式
objAlternatingCellStyle.BackColor=Color.WhiteSmoke'设置交叉样式背景色为烟灰色
grdAuthorTitles.AlternatingRowsDefaultCellStyle=objAlternatingCellStyle'奇数行属性设置刚创建的样式(烟白色)
DimobjCurrencyCellStyleAsNewDataGridViewCellStyle()'初始化DataGridViewCellStyle对象,将设置单元格格式为货币型.
objCurrencyCellStyle.Alignment=DataGridViewContentAlignment.MiddleLeft'将对齐方式改为居中向左对齐
objCurrencyCellStyle.Format="¥#,##0.00"'样式格式为货币型(美元或者人民币$¥)
'objCurrencyCellStyle.Format="C"'样式格式为货币型(人民币)
grdAuthorTitles.Columns(0).HeaderText="管理编号"'设置控件列标题
'grdAuthorTitles.Columns
(1).HeaderText="发生日期"
grdAuthorTitles.Columns
(1).HeaderText="录入日期"
grdAuthorTitles.Columns
(2).HeaderText="客户"
grdAuthorTitles.Columns(3).HeaderText="供应商"
grdAuthorTitles.Columns(4).HeaderText="产品规格"
grdAuthorTitles.Columns(5).HeaderText="加工设备"
grdAuthorTitles.Columns(6).HeaderT