| 网站首页 | 资讯 | 影音 | 图片 | 论坛 | 模拟驾考 | 免费取名算命 | 瓷都工具 | 留言本 | 域名 | 瓷都商城 | 汇款 | 
|
璧勮棣栭〉
|
鐡烽兘寰峰寲
|
绔欏唴鏂伴椈
|
褰辫鍓ф儏
|
姹借溅涓栫晫
|
缃戠粶鏂囨憳
|
鍛ㄦ槗鍏崷
|
鏁欑▼鎶€宸�
|
鎴夸骇淇℃伅
|
您现在的位置: 瓷都热线|诚信中国:“一就是一”(1941.CN) >> 资讯 >> 教程技巧0 >> 服务器类 >> 正文 登录 注册
专 题 栏 目
  • 鍥涘窛姹跺窛8.0绾у己闇�
  • 鏈哄姩杞﹂┚椹跺憳鑰冭瘯璧勬枡
  • 楂樿€冭瘯棰樺強绛旀
  • 最 新 热 门
    最 新 推 荐
    相 关 文 章
    GB与BIG5内码转换COM原代
    一个用组件动态创建Exce
    利用OWC服务器端组件动态
    利用MSCHART画图的一段代
    利用OWC画图的例子
    ASP生成Word文档的又一方
    如何准确定时运行ASP文件
    在ASP处理程序时显示进度
    ASP进度条
    将人民币的数字表示转化
    如何制作无状态的ASP组件         ★★★
    如何制作无状态的ASP组件
    作者:未知 文章来源:网络文摘 更新时间:2006-5-10 3:08:31
    【声明:转载此信息在于传递更多信息,其内容表达的观点并不代表本站立场,由这些信息所产生的一切后果本站不负任何责任。如果您对本信息有什么意见,欢迎和本站联系,谢谢!】http://CiDu.Net
      一般我们在web或其它有关的无状态应用中使用组件时,脚本运行完毕后我们都会丢失组件的所有参照。当然可以简单地将组件的参照保存在会话(session )变量中,但这浪费资源。更聪明的方法是用会话变量或隐式表单标签保存组件的一些信息。当重新制作组件的实例时,试图用保存在会话变量中的信息恢复组件的状态。但两种方法的弊端都在于:从资源的角度来看过于昂贵,甚至恰好难以实现。

      很幸运有个好消息。我们都知道可持续性的整个前提是能够将变量恢复到这样的状态,以至于组件知道在上次的例示中它在哪。这有助于组件现在去做它假定要做的。这个方案的一个典型例子是网页上资料的翻页。当用户点击Page Down时,我们需要知道我们在前一页的位置。 不把变量保存在内存中(如会话变量),如果我们能将它们保存在文件中,等以后需要时检索不是会很好吗?用基础的数据形式(字符串与数字)保存数据很容易。用对象和数组会怎样呢?对象和数组本质上是存储器中的二进制数据流。如果我们能读这个数据我们就能将它写进文件以便以后的检索。关于对象有个好注意。尽管数组的情况不同。首先你不能用数组做组件的属性(VB6.0)。你可以用他们做变量,但以后你会碰到路障。幸运地是我们为这种情况发现了一个工作区。

      你可以将所有或部分属性保存在一个PropertyBag对象中。PropertyBag对象控制在一个对象调用过程中可以保存和恢复的信息。PropertyBag对象的内容(Content)属性提供你任何存在组中的二进制数据流。由你来将这些二进制数据流写进文件中以便日后的检索。

    实例:

    比如你有一个类MyComp.clsMyDept,它有两个属性MyDepartment$ 和 MyEmployees (一个ADO记录集对象)。

    以下是这个类模块的代码:

    Option Explicit
    Option Compare Text

    Public MyDepartment As String
    Public MyEmployees As ADODB.Recordset

    Dim objBag As New PropertyBag

    Private Sub Class_InitProperties()
    Set MyEmployees = New ADODB.Recordset
    MyEmployees.Fields.Append "EmpName", adVarChar, 30
    MyEmployees.Fields.Append "EmpSal", adCurrency
    MyEmployees.Open
    End Sub

    Public Sub SaveMyProperties()
    Dim intFile%, bytRec() As Byte
    objBag.WriteProperty "MyDepartment", MyDepartment
    objBag.WriteProperty "MyEmployees", MyEmployees
    ' Save this data in a file for later retrieval
    intFile = FreeFile
    If Dir("C:MyData.txt", vbNormal) = "" Then
    Else
    Kill "C:MyData.txt"
    End If
    Open "C:MyData.txt" For Binary Access Write As #intFile
    bytRec = objBag.Contents
    Put #intFile, , bytRec
    Close #intFile
    End Sub

    Public Sub RestoreMyProperties()
    Dim intFile%, bytRec() As Byte
    ' Read the saved data from the file.
    ReDim bytRec(FileLen("C:MyData.txt"))
    intFile = FreeFile
    Open "C:MyData.txt" For Binary Access Read As #intFile
    Get #intFile, , bytRec
    objBag.Contents = bytRec
    Close #intFile
    ' PropertBag restored. Lets restore the properties now.
    MyDepartment = objBag.ReadProperty("MyDepartment")
    Set MyEmployees = objBag.ReadProperty("MyEmployees")
    End Sub


    在客户应用中保存属性

    Private Sub Command1_Click()
    Dim objDept As New MyComp.clsMyDept
    objDept.MyDepartment = "Research"
    ' Add one employee
    objDept.MyEmployees.AddNew
    objDept.MyEmployees!EmpName = "Harry"
    objDept.MyEmployees!EmpSal = 2500
    objDept.MyEmployees.Update
    ' Add second employee
    objDept.MyEmployees.AddNew
    objDept.MyEmployees!EmpName = "Potter"
    objDept.MyEmployees!EmpSal = 3000
    objDept.MyEmployees.Update
    ' Save the properties by calling the method from our component
    objDept.SaveMyProperties
    Set objDept = Nothing
    End Sub


    取回保存的属性

    Private Sub Command2_Click()
    Dim objDept As New MyComp.clsMyDept
    ' Restore properties by calling the method from our component
    objDept.RestoreMyProperties
    ' Lets see what is restored
    Debug.Print objDept.MyDepartment 'Will print Research

    objDept.MyEmployees.MoveFirst
    Debug.Print "" & objDept.MyEmployees!EmpName 'Will print Harry
    objDept.MyEmployees.MoveNext
    Debug.Print "" & objDept.MyEmployees!EmpName 'Will print Potter
    Set objDept = Nothing
    End Sub

      先别激动,你在自己的应用中运行这个酷件之前,必须了解它的局限性。用于保存的时间取决于属性的大小和数据类型。注意大部分时间用在ReadProperty 和 WriteProperty 中。原因很简单,当我们处理象ADO记录集这样的结构型数据时,过程可不象拷贝字节流那样简单。数据也得被解释。

    保存记录集时我观察到以下情况:

    1、保存100,000行每列有25个字符的记录集用了50秒。
    2、检索同样的数据用了20秒。

      有个更好的方法保存记录集对象。他们有自己的Save方法。用Save方法保存100,000个记录集仅用了6秒。用Open方法检索保存的记录集对象,从保存的记录集对象中检索100,000行用了20秒(与PropertyBag方法的时间一样)

    选择使用数组

      持续的ADO记录集为在你的应用中使用数组提供了一个好方法。想想,如果你使用起来你就有所有ADO的简便方法可以使用,象FIND,SORT,FILTER等等。实际上,如果你观察仔细,会发现我们在上述实例中用持续的记录集实现了职工记录的数组。纯理论化的人可能会反对,因为你不得不在你的设计中包含ADO,而这将增加你分布磁盘的大量存储。

    小结

      在Web类的无状态应用中组件的可持续性是非常重要的功能。使用PropertyBag对象保存和检索属性。对于记录集对象分别使用ADO的Save和Open方法保存和检索数据。将上述例子作为摸板,给每一个实例加上变量文件名就可以制作你自己的组件。  

    声明:以上信息资料大都是网上搜集而来,版权归作者,如有版权问题请留言告知我将马上改正。
    文中所提到的各种观点只是原文观点,各种说法未经一一确认。并不代表本站认可此观点!!
    资讯录入:admin    责任编辑:admin 
  • 上一篇资讯:

  • 下一篇资讯:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    点击数:742
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
        没有任何评论