商品信息管理系统.docx

上传人:b****5 文档编号:8165445 上传时间:2023-01-29 格式:DOCX 页数:17 大小:20.48KB
下载 相关 举报
商品信息管理系统.docx_第1页
第1页 / 共17页
商品信息管理系统.docx_第2页
第2页 / 共17页
商品信息管理系统.docx_第3页
第3页 / 共17页
商品信息管理系统.docx_第4页
第4页 / 共17页
商品信息管理系统.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

商品信息管理系统.docx

《商品信息管理系统.docx》由会员分享,可在线阅读,更多相关《商品信息管理系统.docx(17页珍藏版)》请在冰豆网上搜索。

商品信息管理系统.docx

商品信息管理系统

商品信息管理系统

1.SQLServer服务器端数据处理

1)存储过程proc_Prd设计

存储过程proc_Prd的作用是:

当触发器tr_UpPrd调用存储过程proc_Prd时,proc_Prd接受调用时参数传来的商品信息编码,并将该值写入商品信息修改表Update_Log中,商品信息修改时间取默认值,即修改时的时间,由getdate()获得,创建存储过程proc_Prd的代码如下:

USEGoods

IFEXISTS(SELECTnameFROMsysobjects

WHEREname='proc_Prd'andtype='p')

DROPPROCEDUREproc_Prd

Go

CREATEPROCEDUREproc_Prd@ProductsNoint

AS

INSERTUpdate_LogVALUES(@ProductsNo,DEFAULT)

GO

2)触发器tr_UpPrd设计

触发器tr_UpPrd的作用是:

当用户删除、更新商品信息的时候,该触发器触发,触发器从deleted表中取出商品编码,并调用存储过程proc_Prd完成商品修改信息的记录,其代码如下:

USEGoods

IFEXISTS(SELECTnameFROMsysobjects

WHEREname='tr_UpPrd'andtype='TR')

DROPPROCEDUREtr_UpPrd

Go

CREATETRIGGERtr_UpPrd

ONProducts

FORDELETE,UPDATE

AS

DECLARE@ProductsNoint

SELECT@ProductsNo=编码FROMdeleted

EXECproc_Prd@ProductsNo

GO

2.VB创建工程与主窗体

1)创建VB工程与设置窗体属性

2)创建工程模块

在modulel模块的全局说明区定义公共变量,代码如下:

OptionExplicit

PublicgConnStrAsString

在modulel模块中,定义Main子程序,当第一次进入应用程序时,Main子程序将激活,代码如下:

PublicSubMain()

gConnStr="Provider=SQLOLEDB.1;IntegratedSecurity=SSPI;PersistSecurity

Info=False;InitialCatalog=Goods"

frmLogin.Show

EndSub

在modulel模块中,定义函数ExecSQL,用于处理数据库的连接和访问操作,代码如下。

PublicFunctionExecSQL(ByValsqlAsString)AsADODB.Recordset

OnErrorGoToErrHandler:

DimcnAsADODB.Connection

DimrsAsADODB.Recordset

DimstrArray()AsString

Setcn=NewADODB.Connection

Setrs=NewADODB.Recordset

strArray=Split(sql)

cn.OpengConnStr'与数据库Goods建立连接

IfStrComp(UCase$(strArray(0)),"select",vbTextCompare)=0Then

rs.OpenTrim$(sql),cn,adOpenKeyset,adLockOptimistic

SetExecSQL=rs'返回查询结果集

Else

cn.Executesql

EndIf

ExecSQl_Exit:

Setrs=Nothing

Setcn=Nothing

ExitFunction

ErrHandler:

'显示错误信息

MsgBox"错误号:

"&Err.Number&"错误信息:

"&Err.Description,vbExclamation

ResumeExecSQl_Exit

EndFunction

在modulel模块中,定义过程ChangeFormPos,确定调用窗体在主窗体frmMain中的显示位置。

PublicSubChangeFormPos(frmMainAsMDIForm,frmAsForm)

DimTopAsInteger

Top=(frmMain.ScaleHeight-frm.Height)/2-600

IfTop>0Then

frm.Top=Top

Else

frm.Top=0

EndIf

frm.Left=(frmMain.ScaleWidth-frm.Width)/2

EndSub

3)创建主窗体

以下代码是对“数据录入”模块的权限验证及调用。

PrivateSubmnuInsert_Click()

'判断权限

IffrmLogin.intAuthority<5Then

MsgBox"对本起,你没有该权限!

",vbExclamation

ExitSub

EndIf

frmInsert.Show

EndSub

3.实现用户登录功能

“登录”窗体的用户验证在“确认”按钮中执行,其代码如下:

'定义全局变量strUserName、intAuthority,用于进入系统后的模块权限验证

PublicstrUserNameAsString

PublicintAuthorityAsInteger

'当单击“取消”按钮时,执行cmdCancel_Click()事件

PrivateSubcmdCancel_Click()

UnloadMe

EndSub

'当单击“确认”按钮时,执行cmdOk_Click()事件

PrivateSubcmdOk_Click()

OnErrorGoToErrHandler:

DimsqlAsString

DimrsAsADODB.Recordset

DimintUserKeyAsInteger

DimintJobIdAsInteger

IfTrim(txtUserName.Text="")Then

MsgBox"请输入用户名称!

",vbExclamation

txtUserName.SetFocus

Else

sql="select*fromUserswhere用户名='"&txtUserName.Text&"'"

Setrs=ExecSQL(sql)'从Users表中提取输入的用户名信息

Ifrs.EOF=TrueThen

MsgBox"没有此用户,请重新输入用户名!

",vbExclamation

txtUserName.SetFocus

Else

IfTrim(rs!

密码)=Trim(txtUserKey.Text)Then

intAuthority=rs!

权限等级

strUserName=txtUserName.Text

rs.Close

Me.Hide

frmMain.Show

UnloadMe

Else

MsgBox"密码不正确,请重新输入密码!

",vbExclamation

txtUserKey.SetFocus

txtUserKey.Text=""

EndIf

EndIf

EndIf

ExitSub

ErrHandler:

MsgBox"错误号:

"&Err.Number&"错误描述:

"&Err.Description

EndSub

4.实现用户管理功能

1)添加用户

要在系统中添加新用户,必须在frmUser窗体的“添加”按钮中添加以下代码:

PrivateSubcmdAdd_Click()

DimsqlAsString

DimrsAsADODB.Recordset

DimintAuthAsInteger

IftxtUserName.Text=""Then'判断用户名是否为空,为空则重新输入用户名

MsgBox"请输入用户名!

",vbExclamation

txtUserName.SetFocus

ExitSub

Else

IftxtPassword1.Text=""Then'判断密码是否为空,为空则重新输入用户名

MsgBox"请输入密码!

",vbExclamation

txtPassword1.SetFocus

ExitSub

Else

IftxtPassword2.Text=""Then

MsgBox"请输入确认密码!

",vbExclamation

txtPassword2.SetFocus

ExitSub

Else

IftxtPassword1.Text<>txtPassword1.TextThen

MsgBox"确认密码不正确!

",vbExclamation

txtPassword2.SetFocus

ExitSub

EndIf

EndIf

EndIf

EndIf

'判断是否选择权限

IfcboAuthority.Text=""Then

MsgBox"请选择权限!

",vbExclamation

cboAuthority.SetFocus

ExitSub

EndIf

SelectCasecboAuthority.Text

Case"系统管理员"

intAuth=10

Case"管理人员"

intAuth=9

Case"数据录入者"

intAuth=5

Case"数据修改者"

intAuth=6

Case"一般人员"

intAuth=0

EndSelect

sql="insertUsers(用户名,密码,权限,权限等级)values('"

sql=sql&txtUserName.Text&"','"&txtPassword1.Text&"','"

sql=sql&cboAuthority.Text&"','"&intAuth&"')"

ExeSQL(sql)

Adodc1.Refresh

EndSub

以下代码将数据更新到Users表中。

sql="updateUsersset密码='"&txtPassword1.Text&"'where用户名='"_

&txtUserName.Text&"'"

ExeSQL(sql)

Adodc1.Refresh

2)窗体初始化

窗体frmUser载入时,应先初始化,以确定frmUser在屏幕的位置,以及该用户是否有权限添加新用户及修改其他用户的权限,代码如下:

PrivateSubForm_Load()

ChangeFormPosfrmMain,frmUser

'判断用户的权限,如果是系统管理员则可以添加用户

IffrmLogin.intAuthority<8Then

cmdAdd.Enabled=False'禁用“添加”用户按钮

cmdDelete.Enabled=False'禁用“删除”用户按钮

cboAuthority.Enabled=False'禁用权限

txtUserName.Text=frmLogin.strUserName

txtUserName.Enabled=False'禁止输入用户名称

EndIf

EndSub

5.实现数据录入功能

为frmInsert窗体的“确认”按钮添加以下代码:

PrivateSubcmdOk_Click()

DimsqlAsString

DimiAsInteger

'判断是否有未填项

Fori=0To4

IftxtProductInfo(i).Text=""Then

MsgBox"请填完此项!

",vbExclamation

txtProductInfo(i).SetFocus

ExitSub

EndIf

Nexti

sql="insertProducts(编码,名称,单位,数量,供应商,备注,价格,进货时间)values('"

Fori=0To4

sql=sql&txtProductInfo(i).Text&"','"

Nexti

IftxtProductInfo(5).Text=""Then

sql=sql&Null&"',"

Else

sql=sql&txtProductInfo(i).Text&"',"

EndIf

sql=sql&txtProductInfo(6).Text&",'"&cboDate.Value&"')"

ExeSQL(sql)

MsgBox"数据录入成功!

",vbExclamation

Init

EndSub

'初始化过程Init

PrivateSubInit()

DimiAsInteger

Fori=0To6

txtProductInfo(i).Text=""

Nexti

cboDate.Value=Now

txtProductInfo(0).SetFocus

EndSub

当窗体第一次被打开时,需要确定窗体的位置和进货时间的值设置为当前日期。

代码如下:

PrivateSubForm_Load()

ChangeFormPosfrmMain,frmInsert

'初始化进货日期时间

cboDate.Value=Now

EndSub

当窗体单击“取消”按钮时,应去掉当前窗体上的数据,让用户重填,只要调用Init过程即可,代码如下:

PrivateSubcmdCancel_Click()

Init

EndSub

6.实现数据查询功能

表3-8中,数据控件Adodc1的属性CommandType为1-adCmdText,属性RecordSource为“select*fromProducts”;属性ConnectionString为:

“Provider=SQLOLEDB.1;IntegratedSecurity=SSPI;PersistSecurity

Info=False;InitialCatalog=Goods”

这样可以通过SQL语句设置不同的查询条件。

下面是窗体frmQuery的功能实现代码。

(1)在代码编辑器的全局说明区为窗体frmQuery定义变量,代码如下:

OptionExplicit

DimcnAsADODB.Connection

(2)当第一次打开frmQuery时,要求连接数据并在frmQuery中显示Products表的所有记录,其代码如下:

PrivateSubForm_Load()

DimrsAsNewADODB.Recordset

ChangeFormPosfrmMain,frmQuery'设置frmQuery在frmMain中的显示位置

'初始化进货时间,缺省值为当天日期。

cboStartDate.Value=Now

cboEndDate.Value=Now

'初始化组合框cboProductNo的项为Products表的编码,

'初始化组合框cboSupplier的项为Products表的供应商。

Setrs=ExeSQL("selectdistinct编码fromProducts")

DoUntilrs.EOF

cboProductNo.AddItemrs!

编码

rs.MoveNext

Loop

Setrs=ExeSQL("selectdistinct供应商fromProducts")

DoUntilrs.EOF

cboSupplier.AddItemrs!

供应商

rs.MoveNext

Loop

EndSub

当用户选择用“编号”为条件查询时,单击cboProductNo的下拉按钮,可以从下拉列表中选择一个编号值,去查询Products表中该编号值的商品信息,这样不仅准确而且方便,不必用户输入编号。

同样,在cboSupplier中可以选择供应商,以查询该供应商的商品信息。

(3)当设置了查询条件后,单击“查询”按钮时,程序将执行以下代码:

PrivateSubcmdQuery_Click()

DimsqlAsString

'按商品编号查询

IfchkProductNoThen

IfcboProductNo.Text=""Then

MsgBox"请选择商品编号!

",vbExclamation

cboProductNo.SetFocus

ExitSub

EndIf

'按chkTime若为已选择,则按时间段查询

IfchkTime=vbCheckedThen

sql="select*fromProductswhere编码='"

sql=sql&cboProductNo.Text&"'and进货时间between'"

sql=sql&cboStartDate.Value&"'and'"&cboEndDate.Value

sql=sql&"'orderby进货时间"

Adodc1.RecordSource=sql

Adodc1.Refresh

'数据网格控件dbgrdProducts刷新,显示查询结果

dbgrdProducts.Refresh

Else

sql="select*fromProductswhere编码='"

sql=sql&cboProductNo.Text&"'orderby进货时间"

Adodc1.RecordSource=sql

Adodc1.Refresh

dbgrdProducts.Refresh

EndIf

EndIf

'按供应商查询

IfchkSupplierThen

IfcboSupplier.Text=""Then

MsgBox"请选择供应商品!

",vbExclamation

cboSupplier.SetFocus

ExitSub

EndIf

IfchkTime=vbCheckedThen

sql="select*fromProductswhere供应商='"

sql=sql&cboSupplier.Text&"'and进货时间between'"

sql=sql&cboStartDate.Value&"'and'"

sql=sql&cboEndDate.Value&"'orderby进货时间"

Adodc1.RecordSource=sql

Adodc1.Refresh

dbgrdProducts.Refresh

Else

sql="select*fromProductswhere供应商='"

sql=sql&cboSupplier.Text&"'orderby进货时间"

Adodc1.RecordSource=sql

Adodc1.Refresh

dbgrdProducts.Refresh

EndIf

EndIf

'查询全部记录

IfchkAllThen

Adodc1.RecordSource="select*fromProducts"

Adodc1.Refresh

dbgrdProducts.Refresh

EndIf

EndSub

7.实现数据修改功能

表3-9中,数据控件Adodc1的属性CommandType为2-adCmdTable,属性RecordSource为Products;属性ConnectionString为:

“Provider=SQLOLEDB.1;IntegratedSecurity=SSPI;PersistSecurity

Info=False;InitialCatalog=Goods”

这样可以使显示字段的文本框与表中字段绑定。

下面是窗体frmQuery的功能实现代码。

(1)第一次打开frmUpdate窗体时,设置窗体的显示位置,并使商品编码文本框为不可编辑状态,以禁止用户修改商品的编码。

其代码如下:

PrivateSubForm_Load()

ChangeFormPosfrmMain,frmUpdate

'初始化商品编码文本框状态

txtProductInfo(0).Locked=True

EndSub

(2)单击“向前”或“向后”按钮时,将使数据表Products向前或向后移动一条商品记录,以下为代码:

'向前移动一条记录

PrivateSubcmdForward_Click()

IfAdodc1.Recordset.BOF=TrueThen

Adodc1.Recordset.MoveFirst

ExitSub

Else

Adodc1.Recordset.MovePrevious

EndIf

IfAdodc1.Recordset.BOF=TrueThen

MsgBox"已经到了最前一条记录!

",vbExclamation

Adodc1.Recordset.MoveFirst

EndIf

EndSub

'向后移动一条记录

PrivateSubcmdBackward_Click()

IfAdodc1.Recordset.EOF=TrueThen

Adodc1.Recordset.MoveLast

ExitSub

Else

Adodc1.Recordset.MoveNext

EndIf

IfAdodc1.Recordset.EOFThen

MsgBox"已经到了最后一条记录!

",vbExclamation

Adodc1.Recordset.MoveLast

EndIf

EndSub

(3)单击“添加”按钮时,程序将执行以下代码:

PrivateSubcmdAdd_Click()

DimiAsInteger

DimsqlAsString

'如果单

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1