设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 3535|回复: 10
打印 上一主题 下一主题

[Access本身] 【教程】从Access到Asp.net(四)

[复制链接]
跳转到指定楼层
1#
发表于 2006-8-10 09:38:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
【第四章:订单的处理】


昨天忘记交待了一件重要的事,就是要备份你们的数据库,一般以时间加序号来命名备份文件,比如mini8-7-0.mdb,mini8-8-0.mdb.因为我们常常为了一个idea而把原来的代码改得面目全非,可是试验之后却发现行不通,这是你是多么希望代码能返回原来的状态啊。


今天我们开始还不着急设计,先来测试前两天的作品,同时为下一步的设计蓄积数据:我们以不同的身份登录,去购买不同的商品,然后更改不同的数量,最后生成订单。然后直接打开数据表,看看我们的订单是否如意生成?



这就是我们用户中心的效果图,在窗体上放置了一个选项卡控件,每一页放置一个子窗体。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖1 订阅订阅
2#
 楼主| 发表于 2006-8-10 09:43:00 | 只看该作者




【我的订单】


这是用户中心的一个子窗体:数据来源是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是这样来的:把两张图合起来看:












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编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
3#
 楼主| 发表于 2006-8-10 09:46:00 | 只看该作者
【订单明细】


效果图如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
4#
 楼主| 发表于 2006-8-10 09:49:00 | 只看该作者
【个人信息的修改】


和注册窗体一样,把frm_userReg复制过来就可以了,唯一不同的是注册窗体打开时是新一条记录,而现在打开的则是指定的一条:


Private Sub Form_Load()


    Me.Form.RecordSource = "select * from tab_userinfo where id=" & USERID


End Sub


【回到后台】


当时我们后台没有设计完成,是因为销售表salerecord和订单表salelist都没有数据,现在已经有了:后台订单管理的效果如下:用向导直接生成即可:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
5#
 楼主| 发表于 2006-8-10 09:50:00 | 只看该作者
【打印报表】


       我们在给顾客发货的时候都会打印一张货单,上面有客户的名称地址,为送货的人看的,有明细的货物清单,给仓库的人看的,应该就是这样:仓库根据这张单发货并包装,当然在包装里面也塞一张,然后在包装外面写地址,最后自己留下这张作底。



报表的数据源来自一个查询:(这里面一些字段我没让他显示出来)用向导就可以生成上面的报表了



[此贴子已经被作者于2006-8-10 1:52:01编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
6#
 楼主| 发表于 2006-8-10 09:57:00 | 只看该作者
【自动更新连接表】


登录窗体要做更改:增加权限和用户名的保存,以便判断当前用户的权限,这和前台是一样的。同时在登录时自动更新链接表,原理是:先做了一个查询试一下,若能返回数据说明链接表是通的,否则就重新链接,这里是一相对路径来链接表的,这个好像也有很多人问过:


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
7#
 楼主| 发表于 2006-8-10 10:10:00 | 只看该作者
【小结】


本章主要学习了对于关系表的查询,建立关系是网状数据库的特征,只有存在关系才称得上真正的数据库系统。同时我们还学习了报表的设计和权限的管理,最后还学了一招链接表的相对路径的自动连接。明天我们开始对Asp.Net的学习。不过我的硬盘好像有点要罢工的样子。不知道明天会不会出事~~~~~~~~~有人也许会说,既然是学习.net,可是却花了这么多时间来做一个access练习??要知道当我们开始设计asp.net的时候,我们手上已经有了一个设计小样了,这就是我们的优势。


[此贴子已经被作者于2006-8-10 2:11:08编辑过]

8#
发表于 2006-8-11 01:26:00 | 只看该作者
谢谢![em17][em17][em17]
9#
发表于 2006-8-18 04:09:00 | 只看该作者
谢谢版主.
10#
发表于 2006-9-4 03:12:00 | 只看该作者
感谢!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-6 10:23 , Processed in 0.105501 second(s), 36 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表