Office中国论坛/Access中国论坛

标题: 【教程】从Access到Asp.net(三) [打印本页]

作者: 情比金坚    时间: 2006-8-9 09:28
标题: 【教程】从Access到Asp.net(三)
【第三章 前台的设计】


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





[attach]19580[/attach]


【页脚】很简单,只有几个标签框而已[attach]19581[/attach]



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


作者: 情比金坚    时间: 2006-8-9 09:33
【登录窗体】


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


[attach]19582[/attach]


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


作者: 情比金坚    时间: 2006-8-9 09:38
【用户注册】好了,下面我们该往用户表里输入一些数据了,这就是用户注册窗体。用向导生成就行。





[attach]19583[/attach]


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

作者: 情比金坚    时间: 2006-8-9 09:43



【主页】


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


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


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





[attach]19584[/attach]


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

作者: 情比金坚    时间: 2006-8-9 09:48
【购买窗体】点击主页的图片以后来到了这个窗体:

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

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





[attach]19585[/attach]


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


作者: 情比金坚    时间: 2006-8-9 09:55
【购物车】


购物车是一个子窗体:


[attach]19586[/attach]


这里主要讲一下生成订单的事件过程:分成两个步骤:第一要给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

作者: 情比金坚    时间: 2006-8-9 10:00
【搜索】


[attach]19587[/attach]


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






[此贴子已经被作者于2006-8-9 2:17:00编辑过][/ali
作者: 情比金坚    时间: 2006-8-9 10:15
【小结】今天就到这里吧,小结一下:

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

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

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

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

5、  使用函数执行事件。

6、  带参数打开窗体。

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

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

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



<B >
作者: sgrshh29    时间: 2006-8-9 14:23
精彩!
作者: djhong    时间: 2006-8-9 14:43
ok very good
作者: wang1950317    时间: 2006-8-9 15:33
感谢情版主!
作者: fengrh    时间: 2006-8-10 01:55
這已經是Assess到Asp.net的第三部了,真的是一個好教程.
作者: kelind    时间: 2006-8-10 06:24
ASP.NET的语言怎么与VBA一样?  asp.net编的软件能打包分发吗?
作者: 情比金坚    时间: 2006-8-10 06:48
以下是引用kelind在2006-8-9 22:24:00的发言:
ASP.NET的语言怎么与VBA一样?  asp.net编的软件能打包分发吗?

.net框架支持vb.net,c#,J#三种语言,我们用vb.net语言,和vba差别并不大,asp.net开发的东西叫B/S模式,使用者无需安装,用ie浏览器就可以工作了,但是需要一台主机,作服务器,asp.net可以编译成安转包,点击安装即可。
作者: kelind    时间: 2006-8-10 06:57
谢谢!难得这样的好老师!
作者: andymark    时间: 2006-8-10 07:08
怎么在win2003安装不了?
作者: 情比金坚    时间: 2006-8-10 09:33
你装iis了吗?
作者: gsb6768    时间: 2006-8-10 18:59
为什么有的附件要回一定数量的贴子才可以下载??
作者: 古老的龙    时间: 2006-8-10 19:47
太好了
作者: 付谦    时间: 2006-8-11 02:39
?
作者: yodong    时间: 2006-8-18 04:11
太好了
作者: wjb5645    时间: 2006-8-18 06:06
ding
作者: wjb5645    时间: 2006-8-18 06:12
ding
作者: appleking    时间: 2006-8-18 19:07
真是太感谢太精彩了。。
作者: 7777777    时间: 2006-8-21 19:52
很好呀!
作者: 6831860    时间: 2006-8-23 06:57
顶!!
作者: fan0217    时间: 2006-8-23 07:32
我再寻找VS2005,那样开发的话会方便许多,那位手里有啊?
作者: wuaza    时间: 2006-8-23 15:59
我有。
作者: xjliyuehua    时间: 2006-8-24 00:25
[em02][em02]
作者: ly    时间: 2006-8-24 01:01
标题: look
look at ...
作者: hxqfox    时间: 2006-8-24 20:58
我想看一下。
作者: xc1xa    时间: 2006-8-26 23:14
[em17][em17]
作者: 绿色爱好者    时间: 2006-8-29 05:51
xuexi
作者: eddieliu    时间: 2006-8-31 07:15
很好的教程
作者: lzx-shmily    时间: 2006-9-1 21:33
很好!
作者: qlm    时间: 2006-9-4 03:06
太好了,高!
作者: masher    时间: 2006-9-4 22:16
Ding!
作者: ok123.1    时间: 2006-9-5 21:03
了不起[em07]
作者: lanchong    时间: 2006-9-6 11:43
c
作者: zheel    时间: 2006-9-9 19:10
ok
作者: xinkand    时间: 2006-9-10 05:40
赞!~~~~~~~~~~~~~~~~~~~
作者: xinkand    时间: 2006-9-11 02:13
楼主:请教你下

  

1、  我们可以令所有的界面具有相同的页眉和页脚。是怎么实现的呢?  在你的文章内没看到阿

   我比较菜,还请见谅啊。
作者: 情比金坚    时间: 2006-9-11 05:09
以下是引用情比金坚在2006-8-9 1:43:00的发言:




【主页】


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



作者: johnx9    时间: 2006-11-23 03:23
加油!
作者: ccmyfriend    时间: 2006-11-27 04:26
标题: 谢谢楼主
谢谢情比金坚
作者: kcny    时间: 2007-1-7 00:22
学习
作者: roundu    时间: 2007-1-16 22:01
才看到3 太好了


作者: FLING    时间: 2007-1-18 01:35
tt
作者: zhangbaor    时间: 2007-1-28 22:41
very good
作者: clmkjszx123    时间: 2007-1-29 19:18
ok ok
作者: 109091370    时间: 2007-2-28 21:55

作者: huangqinyong    时间: 2007-3-25 08:59
I see.......
作者: esmile    时间: 2007-4-9 18:29
提示: 作者被禁止或删除 内容自动屏蔽
作者: beenet    时间: 2007-6-25 23:13
太好了
作者: sbsfhgl    时间: 2008-1-2 12:59
写得太好了!!!!!!!!1
作者: hug110    时间: 2008-1-30 17:23
谢谢
这种教程很有帮助...
作者: v_tang    时间: 2008-4-9 16:44
学习了                 
作者: wooda    时间: 2008-5-19 21:45
谢谢 太好了 让思路开阔了
作者: 小桥人家    时间: 2008-5-31 09:48
要好好学学要好好学学
作者: xbq0590    时间: 2008-8-4 17:05
标题: 好啊
好啊
作者: shizhangzui    时间: 2008-12-14 23:23
好铁,精品
作者: wjsfeng    时间: 2009-7-19 17:56
拜读大作
作者: chaojianan    时间: 2009-10-18 21:37
非常精彩,支持
作者: liuxinquan    时间: 2010-4-27 10:09
ok very good
作者: tiger_lyj    时间: 2010-5-7 17:36
学习
作者: 82077802    时间: 2010-5-7 18:31
非常好!收藏了,谢谢!
作者: 鱼求雨    时间: 2010-5-8 22:27
真的很不错,辛苦辛苦。谢谢 。
作者: yanwei82123300    时间: 2010-5-19 08:52
KANKAN




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3