建立
一、什麼是組件
組件是包含可以更改的資料形式的代碼的對象,是可用代碼的封裝,這些代碼可以用來執行應用程式的一些功能,如從資料庫中檢索某些資訊等功能。現在經常聽人說起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項目(如圖)
由於我們要操作資料庫,要使用到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 Sub
5、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>
6、總結
上面我簡要的介紹了組件的定義以及使用VB來編寫ASP中組件的方法,其實上面所舉的例子只是很粗淺的例子,相信大家寫出的程式一定會比我的更好,我想如果有機會的話,我還會謝謝如何使用VC++和Java來編寫COM組件,因為我覺得,如果你沒有掌握COM組件,你也就沒有掌握ASP的精髓。