分享
 
 
 

手把手教你使用VB来创建ASP组件

王朝asp·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

一、什么是组件

组件是包含可以更改的数据形式的代码的对象,是可用代码的封装,这些代码可以用来执行应用程序的一些功能,如从数据库中检索某些信息等功能。现在经常听人说起COM,其使它的意思是组件对象模型(Component Object Model),是由微软开发的可以在Windows平台上执行的对象模型,COM定义了组件之间的交互能力。为COM编写的组件可以重复使用,并不依赖于编写所用的语言,比如说,一个组件可以用VB,VC++甚至是Java来编写,总之,只要遵守COM规范就可以了。

二、为什么我们要用VB来创建ASP组件

前面我也说了,编写组件对使用的语言没有什么限制,因此您就可以使用您所熟悉的语言来编写组件。我们说VB是用来编写组件最容易的语言工具,它虽然没有VC++和Java得优良的性能,和高速灵活性,但是因为它易学易用,所以也被广大程序开发人员是用来编写COM组件。下面我想介绍一下如何使用VB来创建ASP所用的COM组件。

三、问题的提出

某个商务网站,经常要对他们多提供的CD信息进行增加或删除等操作,因此它们像开发出一个DNA组件(Distributed interNet Architecture分布式Internet结构 ),从数据库中对CD信息进行操作。在此,我们想利用VB来实现创建这个组件的过程。

首先,我们需要知道CD信息在数据库中,例如SQL SERVER 7.0中的存储结构,如下:

CD_ID: 为数据库中唯一标识这张CD的标识符。

CD_Name: 为CD名

CD_Author: 为演唱(奏)者

CD_Price: 为CD价格

CD_Information: 为CD的简单描述

为了简单起见,我们假设对CD信息数据的处理仅有增加和删除,有兴趣的朋友想增加这个组件的功能请参看相应的书籍,自行完成。

就像在Java中写JavaBean程序一样,在ASP的组件中,我们也要定义相应的方法来实现一定的功能,本例中用到了下列方法:

OpenDB: 打开数据库,读入所有的CD信息。

CloseDB: 关闭数据库连接。

Add: 向数据库中添加一条新的CD信息

Delete: 从数据库中删除一条CD信息。

NextCD: 从表中返回当前CD信息,并把指针移向下一条信息

IsEof: 判断是否还有更多的CD信息

四、使用VB创建组件

现在让我们开始用Visual Basic 6.0(当然使用VB5.0也是可以的 )创建一个新的ActiveX DLL项目(如图)<BR><BR><IMG height=407 src="vb_asp1.jpg" width=512><BR><BR>然后,把项目名改为CD,把类模块名改为CD_Handle,见下图 <BR><BR><IMG height=384 src="vb_asp2.jpg" width=512>

由于我们要操作数据库,要使用到ADO,因此我们要引用Microsoft Activex Data Object 2.5 Library.(如下图)<BR><BR><IMG height=384 src="vb_asp3.jpg" width=512> <BR>现在我们开始写组件中的方法<BR><BR><B><I>1、 OpenDB方法</I></B><BR><BR>OpenDB方法的思路是建立与MS SQL SERVER7.0的连接,这可以使用SQLOLEDB Provider来实现。建立连接后就可以创建一个包含所有CD信息的记录集。根据以上分析我们写出如下代码。<BR><BR>Option Explicit<BR><BR>Private Conn As ADODB.Connection<BR><BR>Private RecordSetCD As ADODB.Recordset<BR><BR>’打开连接和结果集<BR><BR>Private Sub OpenDB()<BR><BR>Set Conn = New ADODB.Connection<BR><BR>Set RecordSetCD = New ADODB.Recordset<BR><BR>Conn.Open "Provider=SQLOLEDB;DataSource=MUSE;Initial Catalog=Music;UserId=Wayne;Password=AbCdEfG"<BR><BR>RecordSetCD.Open "SELECT * FROM CD", Conn<BR><BR>End Sub<BR><BR><B><I>2、 CloseDB方法</I></B><BR><BR>由于连接数据库是相当昂贵的,所以在不需要使用数据库时,一定要记住关闭Recordset 和Connection对象,CloseDB就是完成这一操作。<BR><BR>Private Sub CloseDB()<BR><BR>’关闭结果集RecordSetCD<BR><BR>If Not (RecordSetCD Is Nothing) Then<BR><BR>If RecordSetCD.State = adStateOpen Then<BR><BR>RecordSetCD.Close<BR><BR>End If<BR><BR>Set RecordSetCD = Nothing<BR><BR>End If<BR><BR>’关闭连接Conn<BR><BR>If Not (Conn Is Nothing) Then<BR><BR>Conn.Close<BR><BR>Set Conn = Nothing<BR><BR>End If<BR><BR>End Sub<BR>

3、 Add方法

Add方法的目的是向数据库中添加一条新的CD信息,因此它打开的记录集要求能够更新。这就不能像OpenDB中那样仅用Open打开数据集。详细的代码见下面:

Private Sub Add(Id As String, Name As String, Author As String, Price As Currency, Information As String)

Dim NewConn As New ADODB.Connection

Dim NewRecordsetCD As New ADODB.Recordset

NewConn.Open "Provider=SQLOLEDB;DataSource=MUSE;Initial Catalog=Music;UserId=Wayne;Password=AbCdEfG"

NewRecordsetCD.Open "SELECT * FROM CD", NewConn, adOpenDynamic, adLockOptimistic

NewRecordsetCD.AddNew

NewRecordsetCD.Fields("CD_ID") = Id

NewRecordsetCD.Fields("CD_Name") = Name

NewRecordsetCD.Fields("CD_Author") = Author

NewRecordsetCD.Fields("CD_Price") = Price

NewRecordsetCD.Fields("CD_Information") = Information

NewRecordsetCD.Update

End Sub

解释:使用 NewRecordsetCD.AddNew,

NewRecordsetCD.Fields(“Some_Key”)=Some_value

NewRecordsetCD.Update 来添加一条纪录

4、 Delete方法:

这个方法的目的是为了删除库中的某条CD名和相关的信息。它的实现方法是通过查询表中唯一的CD_ID来定位CD信息,从而删除该行纪录

Private Sub Delete(Id As String)

Dim NewConn As New ADODB.Connection

Dim RecordsetDelete As New ADODB.Recordset

NewConn.Open "Provider=SQLOLEDB;DataSource=MUSE;Initial Catalog=Music;UserId=Wayne;Password=AbCdEfG"

’从表中删除一条信息

NewConn.Execute "DELETE FROM CD WHERE CD_ID ='" & Id & "'", adCmdText + adExecuteNoRecords

End Sub

手把手教你使用VB来创建ASP组件

2001-04-14· Wayne ·yesky

--------------------------------------------------------------------------------

7上一页1 2 3 4 5 6 7下一页8

5、 IsEof方法

IsEof方法是用来判断是否还有更多的信息

其代码如下

Private Function IsEof() As Boolean

IsEof = RecordSetCD.EOF

End Function

6、 NextCD 方法

NextCD方法的目的是返回当前的CD信息,并将记录集的指针向下移动,这可以通过MoveNext方法和IsEof配合使用来实现

Private Sub NextCD(Id As Variant, Name As Variant, Author As Variant, Price As Variant, Information As Variant)

On Error Resume Next

If IsEof = True Then

Err.Raise vbObject + 1, "CD Information", "End of cursor"

Exit Sub

End If

Id = RecordSetCD.Fields("CD_ID")

Name = RecordSetCD.Fields("CD_Name")

Author = RecordSetCD.Fields("CD_Author")

Price = RecordSetCD.Fields("CD_Price")

Information = RecordSetCD.Fields("CD_Information")

RecordSetCD.MoveNext

End Sub

好,我们已经编写好了组件,把它们编译成CD.dll后,你最好把他们注册一下 方法是在DOS界面下,输入regsvr32 CD.dll

五、ASP程序的编写

(1) ListCdInformation.asp 程序

这个程序实现的是检索数据库,把检索的结果显示为一张表,使用了刚才我们定义的组件。它打开表,然后列举每一张CD的信息。

〈%

Dim Cd_Info

Set Cd_Info= Server.CreateObject("CD.CD_Handle")

%〉

〈HTML〉

〈HEAD〉

〈META http-equiv="Content-Type" content="text/html; charset=gb2312"〉

〈TITLE〉CD信息列表〈/TITLE〉

〈/HEAD〉

〈BODY〉

〈B〉〈P ALIGN="center"〉CD信息列表〈/P〉〈/B〉

〈TABLE BORDER="2" CELLSPACING="1"〉

〈TR〉

〈TD〉〈P ALIGN="center"〉CD编号〈/TD〉

〈TD〉〈P ALIGN="center"〉CD名〈/TD〉

〈TD〉〈P ALIGN="center"〉作者〈/TD〉

〈TD〉〈P ALIGN="center"〉价格〈/TD〉

〈TD〉〈P ALIGN="center"〉CD简介〈/TD〉

〈/TR〉

〈TR〉〈/TR〉

〈%DIM ID

Dim Name

Dim Author

Dim Price

Dim Information

'初始化CD列表

Cd_Info.OpenDB

While Cd_Info.IsEof =False

Cd_Info.NextCD ID,Name,Author,Price,Information

%〉

〈TR〉

〈TD〉〈%=ID%〉〈/TD〉

〈TD〉〈%=Name%〉〈/TD〉

〈TD〉〈%=Author%〉〈/TD〉

〈TD〉〈%=Price%〉〈/TD〉

〈TD〉〈%=Information%〉〈/TD〉

〈TD〉〈Form Name = "Delete" METHOD ='POST' ACTION ="DeleteCdInformation.asp?id=〈%=ID%〉"〉

〈INPUT TYPE "SUBMIT" valueS="删除此条" NAME="DELETE2"〉

〈/FORM〉

〈/TD〉

〈/TR〉

〈%

Wend

%〉

〈/TABEL〉

〈FORM NAME="ADD" METHOD ="POST" ACTION="AddCDInformation.asp"〉

〈input type ="submit" value="添加一条CD信息" Name="ADD2"〉

〈/FORM〉

〈/body〉

〈/html〉

2)DeleteCdInformation.asp程序

点击每条信息后的删除键就会从表中把该条信息删除,它也调用了我们刚刚注册的组件。限于篇幅,我只把最重要的几行代码写出:

〈%

Dim CD_Info

Set CD_Info =Server.CreateObject(“CD.CD_Handle”)

CD_Info.Delete Request.QueryString(“ID”)

%〉

(3)AddCDInformation.html

本程序是一个纯HTML文本,只出现一个表单,让你填写新的CD信息,然后再发给InsertintoDB.asp来加入数据库。

〈html〉

〈head〉

〈meta http-equiv="Content-Language" content="zh-cn"〉

〈meta http-equiv="Content-Type" content="text/html; charset=gb2312"〉

〈title〉请您添加一条CD信息〈/title〉

〈/head〉

〈body〉

〈form method="POST" action="InsertintoDB.asp"〉

〈p〉〈/p〉

〈p〉请您添加一条CD信息〈/p〉

〈table border="1" cellspacing="1" width="34%" height="109"〉

〈tr〉

〈td width="24%" height="16"〉

〈p align="center"〉CD号〈/td〉

〈td width="76%" height="16"〉〈input type="text" name="ID" size="24"〉〈/td〉

〈/tr〉

〈tr〉

〈td width="24%" height="16"〉

〈p align="center"〉CD名〈/td〉

〈td width="76%" height="16"〉〈input type="text" name="Name" size="24"〉〈/td〉

〈/tr〉

〈tr〉

〈td width="24%" height="16"〉

〈p align="center"〉作者〈/td〉

〈td width="76%" height="16"〉〈input type="text" name="Author" size="24"〉〈/td〉

〈/tr〉

〈tr〉

〈td width="24%" height="16"〉

〈p align="center"〉价格〈/td〉

〈td width="76%" height="16"〉〈input type="text" name="Price" size="24"〉〈/td〉

〈/tr〉

〈tr〉

〈td width="24%" height="95"〉

〈p align="center"〉简介〈/p〉

〈p〉〈/td〉

〈td width="76%" height="95" valign="top"〉〈textarea rows="4" name="Information" cols="22"〉〈/textarea〉〈/td〉

〈/tr〉

〈tr〉

〈td width="100%" height="15" colspan="2"〉

〈p align="center"〉〈input type="submit" value="提交" name="B1"〉〈input type="reset" value="取消" name="B2"〉〈/td〉

〈/tr〉

〈/table〉

〈/form〉

〈p〉 〈/p〉

〈/body〉

〈/html〉

(4)InsertIntoDB.asp程序,用到了组件中Add方法

〈HTML〉

〈HEAD〉

〈TITLE〉〈/TITLE〉

〈/HEAD〉

〈BODY〉

〈%DIM Insert_CD

set Insert_CD =Server.CreateObject("CD.CD_Handle")

Insert_CD.Add request.form("ID"),request.form ("Name"),request.form("Author"),request.form("Price"),request.form("Information")

%〉

〈p〉您已成功的加入一条书目〈/p〉

〈form name="A" Method="POST" Action="ListCdInformation.asp"〉

〈input t

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有