Office中国论坛/Access中国论坛
标题: 【教程】从Access到Asp.net(四) [打印本页]
作者: 情比金坚 时间: 2006-8-10 09:38
标题: 【教程】从Access到Asp.net(四)
【第四章:订单的处理】
昨天忘记交待了一件重要的事,就是要备份你们的数据库,一般以时间加序号来命名备份文件,比如mini8-7-0.mdb,mini8-8-0.mdb.因为我们常常为了一个idea而把原来的代码改得面目全非,可是试验之后却发现行不通,这是你是多么希望代码能返回原来的状态啊。
今天我们开始还不着急设计,先来测试前两天的作品,同时为下一步的设计蓄积数据:我们以不同的身份登录,去购买不同的商品,然后更改不同的数量,最后生成订单。然后直接打开数据表,看看我们的订单是否如意生成?[attach]19604[/attach]
这就是我们用户中心的效果图,在窗体上放置了一个选项卡控件,每一页放置一个子窗体。
作者: 情比金坚 时间: 2006-8-10 09:43
【我的订单】
这是用户中心的一个子窗体:数据来源是tab_salelist,注意:那个大写的USERID就是当初我们命名的那个公用变量,他一直在发挥着作用。
Private Sub Form_Load()
Dim sqlstr As String
If USERID = "" Then
MsgBox "你还未登录,不能查看订单"
DoCmd.Close acForm, "frm_userhome"
Else
sqlstr = "select listid,lstate,sdate,mcount from tab_salelist where uid=" & USERID
Me.Child4.Form.RecordSource = sqlstr
End If
End Sub
删除按钮就一句话:
Private Sub Command12_Click()
If Me.lstate <> "未处理" Then
MsgBox "你的订单已经开始受理,不能删除了"
Else
DoCmd.RunSQL ("delete * from tab_salelist where listid='" & Me.listid & "'")
End If
End Sub
还有一个按钮时“明细”:先设定了订单明细的数据源,然后再打开它。其实这些复杂的sql语句我都是先在查询中设计好了,然后再复制到vba中来,对于其中的一些变量,比如用户id,就先用数字直接写入:然后再把它替换出来就行了,比如下面的这段sql是这样来的:把两张图合起来看:
[attach]19605[/attach]
[attach]19606[/attach]
Private Sub Command13_Click()
Dim myid As String
myid = Me.listid
Dim sqlstr As String
sqlstr = "SELECT tab_salerecord.uid, tab_Pinfo.pname, tab_Pinfo.pkind, tab_Pinfo.price, " & _
"tab_Pinfo.lprice, tab_salerecord.pcount, [lprice]*tab_salerecord!pcount AS msum, tab_salerecord.ID, tab_salerecord.yn " & _
"FROM tab_Pinfo INNER JOIN tab_salerecord ON tab_Pinfo.id = tab_salerecord.pid " & _
"WHERE tab_salerecord.lid='" & myid & "'"
[Forms]![frm_userhome]![Child5].[Form].RecordSource = sqlstr
[Forms]![frm_userhome]![Label16].Caption = myid
[Forms]![frm_userhome]!选项卡控件7.Pages(1).SetFocus
End Sub
[此贴子已经被作者于2006-8-10 1:44:20编辑过]
作者: 情比金坚 时间: 2006-8-10 09:46
【订单明细】
效果图如下:[attach]19607[/attach]
作者: 情比金坚 时间: 2006-8-10 09:49
【个人信息的修改】
和注册窗体一样,把frm_userReg复制过来就可以了,唯一不同的是注册窗体打开时是新一条记录,而现在打开的则是指定的一条:
Private Sub Form_Load()
Me.Form.RecordSource = "select * from tab_userinfo where id=" & USERID
End Sub
【回到后台】
当时我们后台没有设计完成,是因为销售表salerecord和订单表salelist都没有数据,现在已经有了:后台订单管理的效果如下:用向导直接生成即可:[attach]19608[/attach]
作者: 情比金坚 时间: 2006-8-10 09:50
【打印报表】
我们在给顾客发货的时候都会打印一张货单,上面有客户的名称地址,为送货的人看的,有明细的货物清单,给仓库的人看的,应该就是这样:仓库根据这张单发货并包装,当然在包装里面也塞一张,然后在包装外面写地址,最后自己留下这张作底。
[attach]19609[/attach]
报表的数据源来自一个查询:(这里面一些字段我没让他显示出来)用向导就可以生成上面的报表了[attach]19610[/attach]
[此贴子已经被作者于2006-8-10 1:52:01编辑过]
作者: 情比金坚 时间: 2006-8-10 09:57
【自动更新连接表】
登录窗体要做更改:增加权限和用户名的保存,以便判断当前用户的权限,这和前台是一样的。同时在登录时自动更新链接表,原理是:先做了一个查询试一下,若能返回数据说明链接表是通的,否则就重新链接,这里是一相对路径来链接表的,这个好像也有很多人问过:
Private Sub Form_Load()
If CheckLinks = False Then
'开始连接后台数据库
Dim tabDef As TableDef
For Each tabDef In CurrentDb.TableDefs
If Len(tabDef.Connect) > 0 Then
tabDef.Connect = ";DATABASE=" & Application.CurrentProject.Path & "\mini_shop.mdbWD=123"
tabDef.RefreshLink
End If
Next
End If
End Sub
Public Function CheckLinks() As Boolean
On Error GoTo Errlbl:
' 检查到后台数据库的链接;如果链接存在且正确的话,返回 True 。
Dim dbs As Database, rst As DAO.Recordset
Set dbs = CurrentDb()
' 打开链接表查看表链接信息是否正确。
Set rst = dbs.OpenRecordset("tab_userinfo")
rst.Close
' 如果没有错误,返回 True 。
CheckLinks = True
Exitsub:
Exit Function
Errlbl:
If Err.Number = 3044 Then
CheckLinks = fasle
Else
MsgBox "错误号:" & Err.Number & " " & Err.Description
End If
End Function
把这段代码也复制到前台去:
【最后设定权限】
根据本例,我直接在管理主窗体的按钮事件中写的判断,因为这些都是子窗体,而对于独立窗体应该在窗体的打开事件中判断,有权限则不作什么,没有权限就把窗体自己关闭。
Private Sub Form_Load()
If PRO = "" Then
MsgBox "你没有登录"
DoCmd.Close acForm, "frm_admin_mat"
Else
Me.Label1.Caption = "你好:" & ADMIN
End If
End Sub
Private Sub pinfoadd_Click()
If PRO = "2" Then
MsgBox "你无权查看此页,请与管理员联系"
Else
Me.Childfrm.SourceObject = "childfrm_pinfo_add"
End If
End Sub
Private Sub pinfomat_Click()
If PRO = "3" Then
MsgBox "你无权查看此页,请与管理员联系"
Else
Me.Childfrm.SourceObject = "childfrm_pinfo_mat"
End If
End Sub
Private Sub pkindmat_Click()
If PRO = "3" Then
MsgBox "你无权查看此页,请与管理员联系"
Else
Me.Childfrm.SourceObject = "childfrm_pkinds_mat"
End If
End Sub
Private Sub salelistmat_Click()
Me.Childfrm.SourceObject = "childfrm_salelist_mat"
End Sub
Private Sub sysusermat_Click()
If PRO <> "1" Then
MsgBox "你无权查看此页,请与管理员联系"
Else
Me.Childfrm.SourceObject = "childfrm_admininfo"
End If
End Sub
作者: 情比金坚 时间: 2006-8-10 10:10
【小结】
本章主要学习了对于关系表的查询,建立关系是网状数据库的特征,只有存在关系才称得上真正的数据库系统。同时我们还学习了报表的设计和权限的管理,最后还学了一招链接表的相对路径的自动连接。明天我们开始对Asp.Net的学习。不过我的硬盘好像有点要罢工的样子。不知道明天会不会出事~~~~~~~~~有人也许会说,既然是学习.net,可是却花了这么多时间来做一个access练习??要知道当我们开始设计asp.net的时候,我们手上已经有了一个设计小样了,这就是我们的优势。
[此贴子已经被作者于2006-8-10 2:11:08编辑过]
作者: sgrshh29 时间: 2006-8-11 01:26
谢谢![em17][em17][em17]
作者: yodong 时间: 2006-8-18 04:09
谢谢版主.
作者: qlm 时间: 2006-9-4 03:12
感谢!!
作者: johnx9 时间: 2006-11-23 03:30
情比金坚斑斑好厉害啊!![em17]
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |