當有一天,你的心情突然變得很壞,但是巧合的是,在你的留言簿中你的網友留了一句很讓你振奮的話,於是你很快就重拾了快樂的心情。但是在不久後你又一次心情變壞,但是這次卻沒有上次那麼幸運,因為沒有人給予你鼓勵,於是你自然就想再看一看上次那句令你很受振奮的話。這時你就會想:假如我的留言簿有留言查詢功能就好了!
為了能達成你的心願,於是我決定在本章教程為你解說具有留言查詢功能的留言簿程序。在講解之前,讓我們還是先來學習將在源程序中用到的COMMAND對象。
首先讓我們先來了解一下Command對象所提供的屬性和方法以及它們的相應功能
ActiveConnection屬性--建立與Connection通道的鏈接關系
CommandText屬性--指定數據查詢信息
CommandTimeout屬性--開始執行數據查詢後允許繼續執行的最長時間
CommandType屬性--指定數據查詢信息的類型
PRepared屬性--指定數據查詢信息是否要先行編譯
CreateParameter方法--建立一個新的參數對象
Execute 方法--對數據庫提出數據查詢
Command對象也是ADO對象集合的一員,它主要用來控制對數據庫發出的請求信息,告訴數據庫:“要哪個數據表裡的數據?要什麼字段內的數據?數據必須符合什麼限制?請把這些符合我要求的數據全部存放在Recordset對象內返回回來!”那麼說到底,Command對象的功能就是執行SQL(Structured Query Language結構式查詢語言,是用於對存放在計算機數據庫中的數據進行組織、管理和檢索的一種工具;是一種特定類型的數據庫--關系數據庫)命令。假如你是一位比較細心的人,你一定還記得我在第三章中其實就已經用上了SQL命令,於是你就會對我發問:“你當時並沒有用到Command對象呀?”
確實,沒有Command對象我們也一樣可以執行SQL命令。我們利用Connection對象或是利用Recordset對象同樣可以執行SQL命令。方法如下所示:
Set rs = conn.Execute(SQL命令)
' 利用Connection對象執行Select SQL命令,然後將結果指定給Recordset對象。
conn.Execute SQL命令
' 利用Connection對象執行數據操作的SQL命令。
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL命令,conn
' 先建立Recordset對象,再執行SQL命令選取數據。
利用Command對象又是如何來執行SQL命令的呢?大家請看:
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conn
cmd.CommandText = sql
Set rs = cmd.Execute
' 可見利用Command對象來執行SQL命令,得先將Connection對象及SQL命令設置給對象Command的ActiveConnection及CommandText屬性,然後才執行cmd.Execute函數。
由上述我們可以知道,原來使用Recordset對象和使用Command對象來執行SQL命令,本質都是一樣的。既然如此,那麼我們為什麼還要利用Command對象呢?為了說明這個問題,我分別用兩種不同的方法來為留言簿添加留言查詢功能,其中查詢“留言簿過去五天留言記錄”和“留言記錄日期查詢”是利用Command對象來執行SQL命令的,而“留言者姓名查詢”和“最新十條留言記錄”的查詢則是利用Recordset對象來執行SQL命令。
講了這許多也該入正題了,我們首先來學習的是利用Recordset對象來實現“留言者姓名查詢”和“最新十條留言記錄”的查詢。以下我們還是通過分步驟的方法來進行說明。
步驟一: 首先我們得設計一個留言查詢的界面(Datesearch.ASP),如下圖所示:
步驟二:利用Recordset對象來執行SQL命令,實現“最新十條留言記錄”的查詢。
Set conn = Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("book2.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
sql ="select top 10 * from guestbook order by ID Desc"
這裡用“ order by ID Desc”表示按照“ID”字段從大到小排序。因為在數據庫中我將ID字段的數據類型設為“自動編號”,留言記錄的ID將按先後從小到大進行排序,所以要查詢最新的十條留言即是查詢最後的十條ID的記錄。
Set rs = conn.Execute( sql )
利用Recordset對象來執行SQL命令,實現“留言者姓名”的查詢的原理與上述一致,程序如下所示:
namesearch = request.form("name")
namesearch = Replace(namesearch,"'","''")
'還記得我在第三章中介紹SqlStr函數時的說明嗎?忘了就到回去看看吧。
Set conn = Server.CreateObject("ADODB.Connection") DBPath =Server.MapPath("book2.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
sql ="select * from guestbook where 姓名 = '"&namesearch&"' order by ID Desc"
Set rs = conn.Execute( sql )
步驟三:設計查詢結果的Web頁面(Search.ASP)。
< %
Sub Search( rs )
Response.Write "< CENTER>< table border=2 width=90% cellpadding=2 cellspacing=2 bordercolorlight=#000000 bordercolordark=#FFFFFF bordercolor=#FFFFFF bgcolor=#FFFFFF align=center>"
Response.Write "< TR BGCOLOR=#33CCCC>"
For i=0 to rs.FIElds.Count-1
Response.WRITE "< TD>" & rs.FIElds(i).Name & "< /TD>"
Next
Response.Write "< /TR>"
'" & rs.FIElds(i).Name & "表示顯示數據表的“字段抬頭”
While Not rs.EOF
Response.Write "< TR>"
For i=0 to rs.FIElds.Count-1
Response.WRITE "< TD>" & rs.FIElds(i).Value & "< /TD>"
Next
Response.Write "< /TR>"
rs.MoveNext
Wend
Response.Write "< /TABLE>< /CENTER>"
' " & rs.FIElds(i).Value & "表示顯示數據表的“數據字段內容”
End Sub
%>