top
Loading...
手把手教你使用VB來創建ASP組件
一、什么是組件

組件是包含可以更改的數據形式的代碼的對象,是可用代碼的封裝,這些代碼可以用來執行應用程序的一些功能,如從數據庫中檢索某些信息等功能。現在經常聽人說起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項目(如圖)



然后,把項目名改為CD,把類模塊名改為CD_Handle,見下圖

由于我們要操作數據庫,要使用到ADO,因此我們要引用Microsoft Activex Data Object 2.5 Library.(如下圖)


現在我們開始寫組件中的方法

1、 OpenDB方法

OpenDB方法的思路是建立與MS SQL SERVER7.0的連接,這可以使用SQLOLEDB Provider來實現。建立連接后就可以創建一個包含所有CD信息的記錄集。根據以上分析我們寫出如下代碼。

Option Explicit

Private Conn As ADODB.Connection

Private RecordSetCD As ADODB.Recordset

’打開連接和結果集

Private Sub OpenDB()

Set Conn = New ADODB.Connection

Set RecordSetCD = New ADODB.Recordset

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

RecordSetCD.Open "SELECT * FROM CD", Conn

End Sub

2、 CloseDB方法

由于連接數據庫是相當昂貴的,所以在不需要使用數據庫時,一定要記住關閉Recordset 和Connection對象,CloseDB就是完成這一操作。

Private Sub CloseDB()

’關閉結果集RecordSetCD

If Not (RecordSetCD Is Nothing) Then

If RecordSetCD.State = adStateOpen Then

RecordSetCD.Close

End If

Set RecordSetCD = Nothing

End If

’關閉連接Conn

If Not (Conn Is Nothing) Then

Conn.Close

Set Conn = Nothing

End If

End Sub
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 Sub5、 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 type="SUBMIT" Value="返回" name="B1"〉

〈/form〉

〈/body〉

〈/html〉

六、總結

上面我簡要的介紹了組件的定義以及使用VB來編寫ASP中組件的方法,其實上面所舉的例子只是很粗淺的例子,相信大家寫出的程序一定會比我的更好,我想如果有機會的話,我還會謝謝如何使用VC++和Java來編寫COM組件,因為我覺得,如果你沒有掌握COM組件,你也就沒有掌握ASP的精髓。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗