设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 11797|回复: 67
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2006-8-9 09:28:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
【第三章 前台的设计】


【页眉】建立一个窗体,两个图片框,放入事先设计好的图片。








【页脚】很简单,只有几个标签框而已



[此贴子已经被作者于2006-8-9 1:29:21编辑过]

本帖子中包含更多资源

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

x

本帖被以下淘专辑推荐:

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


我们昨天已经设计了一个后台登录窗体,今天的窗体没有新意,除了所使用的表不一样外,其他都一样,所以我们无需从头设计,使用“获取外部数据---导入----窗体----选择登录窗体----导入”然后在设计模式下更改一个标题和代码中的数据表名称即可





我们在以后的操作中需要知道目前登录的人是谁,以便知道是谁在买东西,这也是新手常常喜欢问的一个问题,其实我们是这样想,在登录时,我们已经知道了用户名,把用户名放到一个容器中,以后需要使用时候就到这个容器中去找。这是一种思路,在这种思路下可以有很多种手段。在以后的.net中我们的思路没有变,手段却变了。


有人说.Net的C# 就够学好长一段时间了,其实.net 的终极语言是J# 还非C# ,但这些都不是.net的精髓。Net的精髓是面向对象的编程思想,而不是一种语言,就像毛泽东思想开创了新中国,邓小平思想指引了改革开放,一种思想可以引领一个时代,一种技术却不行,net的诞生使得编程变得更容易而非更难。


我是用一个公用变量来储存这些信息(其实你也可以用一个表了储存这些信息)需要的时候就调用这个变量。


建立一个模块,里面只有一句话:


Option Compare Database


Public USERID


在密码验证通过后对这个变量赋值:


……


          If Text0 = myrs("uname") Then
            If Text2 = myrs("upwd") Then
                USERID = myrs("id")
                myrs("lastin") = Now()     '最后登录时间
                myrs.Update
                DoCmd.OpenForm "frm_index"
                DoCmd.Close acForm, Me.Name
            Else
                errmsg.Caption = "请输入正确的密码"
            End If
        Else
            errmsg.Caption = "你还没有注册,请先注册"
        End If





……






[此贴子已经被作者于2006-8-9 1:33:25编辑过]

本帖子中包含更多资源

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

x
3#
 楼主| 发表于 2006-8-9 09:38:00 | 只看该作者
【用户注册】好了,下面我们该往用户表里输入一些数据了,这就是用户注册窗体。用向导生成就行。








Private Sub Command18_Click()
'确认按钮
    If IsNull(Me.uname) Then
        MsgBox "你没有填写昵称"
        Exit Sub
    Else
        If DCount("*", "tab_userinfo", "uname='" & [uname] & "'") > 0 Then
            MsgBox "该昵称已经存在,请重新填写一个"
            uname = Null
            Exit Sub
        End If
    End If


    If IsNull(upwd) Then
        MsgBox "必须填写登录密码"
        Exit Sub
    Else
        If Me.upwd = Me.Text16 Then
        Else
            MsgBox "你两次输入的密码不一样"
            upwd = Null
            Exit Sub
        End If
    End If


    If IsNull(email) Then
        MsgBox "请输入电子邮件地址"
        Exit Sub
    End If


    If IsNull(address) Then
        MsgBox "请输入您的地址"
        Exit Sub
    End If


    DoCmd.GoToRecord , , acNewRec
    Text16 = Null
End Sub


【自动生成数据】


调试的时候我们需要比较多的数据,一条条的输入太麻烦,能不能让他自己生成一批数据呢,这又是一个我看见好多次的问题:


我建立了一个窗体,窗体上放一个按钮,在按钮背后写代码如下,用了一个for…next套嵌来生成多条数据,这样生成了不会重复的文本数据


Private Sub Command0_Click()
    Const str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    Dim MYName
    For i = 1 To 10
        For n = 1 To 20
            For K = 1 To 26
                MYName = Mid(str, i, 1) & Mid(str, n, 1) & Mid(str, K, 1)
                Set d = CurrentDb.OpenRecordset("tab_0")
                d.AddNew
                d(1) = MYName
                d(2) = "女"
                d(3) = "00"
                d(4) = MYName & "@123.com"
                d(5) = Int(Rnd(Now()) * 10000000)
                d(6) = Now()
                d.Update
            Next
        Next
    Next
    MsgBox "数据生成完毕"
End Sub

本帖子中包含更多资源

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

x
4#
 楼主| 发表于 2006-8-9 09:43:00 | 只看该作者



【主页】


页眉是个子窗体,页脚也是,有一个登录单元,然后有一销售排行榜,和新品展示。


销售排行是一个列表框,直接设定该列表框的数据源即可


新品展示如何实现呢?我们的商品信息表中是有自动编号的,只要对自动编号进行倒排序,靠前的都是新品,下面的代码演示了怎样依次往控件中赋值的办法。








Private Sub Form_Load()


    mysql = "SELECT * FROM tab_pinfo ORDER BY id DESC;"
    myrs.Open mysql, CurrentProject.Connection, adOpenStatic, adLockOptimistic
    For i = 1 To 6
        If Not myrs.EOF Then
            Me.Controls("image" & i).Picture = myrs(6)
            Me.Controls("id" & i) = myrs(0)
            Me.Controls("text2" & i) = myrs(1)
            myrs.MoveNext
        End If
    Next
    myrs.Close
End Sub


页面中有六个图片,怎样实现点击图片就能打开关于该图片的新窗口呢:答案是使用函数,因为函数可以带参数,否则你就需要写6组代码了:怎么样?有点面向对象的感觉了吧?这种思想就是.net的思想
Function img_chick(i As Integer)
    Dim Argstr
    Argstr = Me.Controls("id" & i)
    DoCmd.OpenForm "frm_buyfrom", , , , , , Argstr
End Function

本帖子中包含更多资源

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

x
5#
 楼主| 发表于 2006-8-9 09:48:00 | 只看该作者
【购买窗体】点击主页的图片以后来到了这个窗体:

使用打开参数打开相应的数据集:

Private Sub Form_Current()
    Dim PSTR As String
    PSTR = Left(Me.pimg, Len(Me.pimg) - 4) & "B.jpg"
    Me.Image1.Picture = PSTR
End Sub


Private Sub Form_Load()
    If Not IsNull(Me.OpenArgs) Then
        Me.Form.RecordSource = "SELECT * FROM tab_pinfo where id=" & Me.OpenArgs
    End If
End Sub

购买按钮把商品编号和用户编号一并添加到tab_salerecord中

Private Sub shopcar_Click()
    If USERID = "" Then
        MsgBox "你还没登录,不能开始购物"
        Exit Sub
    End If

    Dim d As Recordset
    Set d = CurrentDb.OpenRecordset("tab_salerecord")
    msgstr = "你要把" & Me.pname & "放入购物车吗?"
    If MsgBox(msgstr, vbYesNo) = vbYes Then
        d.AddNew
        d("pid") = Me.id
        d("uid") = USERID
        d("sdate") = Now()
        d.Update
    End If
End Sub








[此贴子已经被作者于2006-8-9 1:48:57编辑过]

本帖子中包含更多资源

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

x
6#
 楼主| 发表于 2006-8-9 09:55:00 | 只看该作者
【购物车】


购物车是一个子窗体:





这里主要讲一下生成订单的事件过程:分成两个步骤:第一要给tab_salerecord的表相关记录加上订单号。第二要给订单表tab_salelist添加一条记录。而订单号的形成又是一个子过程。


'生成订单
Private Sub Command30_Click()
    Dim id As Integer
    Dim sqlstr As String
    Dim listid As String
    Dim msum As Double
   
    DoCmd.RunCommand acCmdSaveRecord
    If IsNumeric(Text20) = False Then Exit Sub     '如果没有货物,就退出


    DoCmd.GoToRecord , , acFirst
    '生成订单id号,用日期加4位号码组成,其实可以生成更人性化的号码,这里只是示意
    listid = Format(Date, "yyyymmdd") & Format(DLast("id", "tab_salelist") + 1, "0000")
    '更新销售表里的订单号
    For i = 1 To Me.Text20
       On Error Resume Next
        id = Me.[id]
        If Me.yn = True Then
            msum = msum + Me.[msum]
            sqlstr = "UPDATE tab_salerecord SET state = 1, sdate = now(),lid =" & listid & " WHERE ID=" & id
            DoCmd.RunSQL (sqlstr)
        End If
        DoCmd.GoToRecord , , acNext
    Next


    '生成订单到订单表
    Dim sql As String
    sql = "INSERT INTO tab_salelist ( uid ,listid,sdate,lstate,mcount) values (" _
        & USERID & ",'" & listid & "', #" & Format(Now(), "yyyy-mm-dd hh:nn:ss") & "#, '未处理' ," & msum & " )"
    DoCmd.RunSQL (sql)        '之前可以不用format() ,后来不用就发生错误???


   DoCmd.OpenForm "frm_userhome"
   DoCmd.Close acForm, "frm_shopcar"
End Sub


子窗体的数据来自一个查询:


Private Sub Form_Load()
'加载数据
    If USERID = "" Then
        MsgBox "你还没有登录"
        DoCmd.Close acForm, "frm_shopcar"
    Else
        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.uid=" & USERID & "and isnull(tab_salerecord.lid)"
        Me.Form.RecordSource = sqlstr
    End If
End Sub

本帖子中包含更多资源

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

x
7#
 楼主| 发表于 2006-8-9 10:00:00 | 只看该作者
【搜索】





下面来谈谈搜索窗体设计:如图:点击右边的分类左边显示就根据资料:这并不难,一个筛选就搞定了,可是怎样进行分页呢?首先我们要知道共有多少条记录,总共能分成几页?当前是第几页,要把这些内容存放到一个地方,因为上一页,下一页会要用到这些数据,为什么要强调这个呢,这是以后网页编程中需要经常用到的技术。好了我先将我的方案封闭,以免影响你的思维。


游客,如果您要查看本帖隐藏内容请回复




[此贴子已经被作者于2006-8-9 2:17:00编辑过][/ali

本帖子中包含更多资源

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

x
8#
 楼主| 发表于 2006-8-9 10:15:00 | 只看该作者
【小结】今天就到这里吧,小结一下:

1、  我们可以令所有的界面具有相同的页眉和页脚。

2、  存储登录者的信息以备后用。

3、  用循环来生成很多记录。

4、  用循环依次给窗体中的控件赋值。

5、  使用函数执行事件。

6、  带参数打开窗体。

7、  用sql语句更新指定的某条记录的某个值。

8、  用sql语句追加一条记录。

9、  数据集的分页显示和翻页。



<B >
9#
发表于 2006-8-9 14:23:00 | 只看该作者
精彩!
10#
发表于 2006-8-9 14:43:00 | 只看该作者
ok very good
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-17 00:21 , Processed in 0.103012 second(s), 37 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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