如何制作ppt_如何制作无状态的ASP组件

更新时间:2019-09-04 来源:应用教程 点击:

【www.hzclsc.cn--应用教程】

一般我们在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方法保存和检索数据。将上述例子作为摸板,给每一个实例加上变量文件名就可以制作你自己的组件。 

本文来源:http://www.hzclsc.cn/anzhuo/26353.html

为您推荐

支付宝怎么自动还信用卡还款_支付宝怎么自动还信用卡 支付宝设置信用卡自动还款教程

支付宝可以对信用卡还款进行管理,有些办了信用卡的童鞋,还不知道支付宝怎么自动还信用卡,通过设置我们可以实现支付宝信用卡自动还款,省时省力,下面带来设置详细教程。支付宝怎么自动还信用卡? 进入支付宝,点教你一招

2020-12-14 07:03:59   支付宝可以自动还信用卡吗   支付宝如何自动还款信用卡   支付宝怎么自动还款信用卡  

【炼金与魔法按键怎么用】炼金与魔法按键怎么操作 炼金与魔法按键操作方法介绍

炼金与魔法是一款国产沙盒游戏,游戏的操作并不难,但是游戏中没有独立的按键使用教程,很多玩家不清楚如何操作,下面为大家带来炼金与魔法按键操作方法介绍。炼金与魔法按键操作方法介绍独立游戏

2020-12-13 23:04:59  

【王冠之心怎么样】王冠之心怎么联机 王冠之心联机教程

王冠之心(Heart of Crown PC)是一款卡牌策略类型的游戏,那么玩家该怎么联机进行游戏呢?下面就来分享一下王冠之心联机教程。王冠之心联机教程准备工作,把skip open port che策略与战棋

2020-12-13 07:06:08   王冠怎么折   手工王冠怎么做   银色王冠怎么用  

网易白金卡潮玩版|网易白金卡是什么 网易白金卡怎么激活

网易白金卡是什么?网易与中国联通联合推出了手机号码品牌网易白金卡,让用户可以免流量使用网易全系应用。现在炉石传说已经加入白金卡免流套餐!下面就一起来看看网易白金卡怎么激活吧。什么是网易白金卡网易白金卡游戏资讯

2020-12-12 11:04:25   网易白金卡免流范围   网易白金卡官网  

中国快递|中国快充标准详细介绍 中国手机快充技术介绍一览

手机快充技术发展已经有几年了,各家厂商的技术也不一样,在泰尔论坛2017快充技术标准与应用研讨会上,带来了中国首部快充标准《通信终端快速充电技术要求和测试方法》,下面一起来看下中国快充标准详细介绍!2知识加油站

2020-12-12 11:04:25   中国快递协会   中国快递公司排行榜   中国快餐连锁50强品牌