ASP應用中資料庫記錄的選取與過濾

來源:互聯網
上載者:User
資料|資料庫 一、說明
大多數終端使用者都要求他們的Web方案能夠提供某種報表能力。使用HTML和ASP,可以很容易地提供在表格中列出記錄以及逐條瀏覽它們的能力。但使用者往往要求能夠通過下拉式清單方塊(或其它選擇方式)選擇某一類別的記錄,或者說,他們希望能夠使用某種“查詢介面”來建立和執行查詢,而不必直接使用SQL。本文示範運用ASP技術建立可選擇的記錄過濾介面的一種方法。雖然這裡討論的解決方案相當簡單,但使用類似的技術可以在任何Web頁面提供複雜的查詢能力。
在為任何一個解決方案編碼之前,都應該充分理解並記錄終端使用者的需求。對於本例來說,使用者要求能夠用指定類別名字的方法擷取指定表的一組記錄,他既可以選擇所有的類別也可以選擇某個特定的類別。為實現這個功能,我們使用一個“遞迴的”ASP頁面,它所提供的選擇表單中包含了來自資料庫的類別列表,根據表單所發送的資料提取結果記錄集,結果記錄將以表格的形式顯示以方便使用者察看。

二、構造過濾條件
對於這種資料庫應用,首先應該瞭解所涉及的資料庫表結構以及串連資料庫系統所必須的串連參數。串連參數的指定方法在Microsoft的ASP聯機文檔中有很詳細的說明,本文不再贅述。本例要用到的兩個表為:Document_Category,它包含供使用者選擇的唯一的類別名字Category_Name;Documents,它包含對應於類別名字的其它資料,欄位包括Category_Name、File_Name、Comments、Date_Submitted等。
選擇表單中的類別列表來自於類別表Document_Category的Category_Name欄位,構造類別下拉式清單方塊的代碼如下,請注意這裡要用到VBScript ADO包含檔案:


 <!-- #Include file = "ADOVBS.INC" -->
 <%
 ConnString = "DSN=LocalUpload;"
 Set conn = Server.CreateObject("ADODB.Connection")
 conn.Open ConnString,,,adOpenForwardOnly
 Set rs = SERVER.CreateObject("ADODB.Recordset")
 ' 首先擷取用來填充下拉式清單方塊的類別記錄
 ' 設定SQL語句
 strSQL = "SELECT * FROM Document_Category ORDER BY category_name"
 
 rs.Open strSQL,conn, adOpenStatic
 %>
 
 <FORM name="formCategory">
 
 <SELECT NAME="qryCategory"
>
 <OPTION selected>請選擇一個類別:
 <% Do While Not rs.EOF
  Response.Write ("<OPTION value='" & rs("Category_Name") & "'>" _
& rs("Category_Name"))
  rs.MoveNext
 Loop
 rs.Close
 Set rs=Nothing
 %>
 </OPTION>
 </SELECT><BR>
 </FORM>

SELECT標記中的OnChange用來提交HTML表單。當下拉式清單方塊的值改變,JavaScript函數getFilter就會執行。使用類似的方法,可以將資料庫表的記錄用多個不同表單元素來描述(如第二個下拉式清單方塊,選項按鈕或複選框等等)。使用者所選擇的類別值將用來構造從資料庫提取記錄的SQL SELECT語句。

三、提交表單
這裡我們要用到兩個JavaScript函數來完成表單資訊提交任務。getFilter函數用來將使用者選擇的類別值提交給頁面本身,而getListValue函數則用來擷取使用者所選擇的類別值。選用JavaScript實現這兩個函數使得指令碼能夠在不同的瀏覽器上運行:
 <SCRIPT language="JavaScript">
 function getFilter(listitem){
  var object = "";
  var listValue = getListValue(listitem);
  document.formCategory.submit(listValue);
 }
 function getListValue(list){
  var listValue="";
  if (list.selectedIndex != -1) {
  listValue = list.options[list.selectedIndex].value;
  }
  return (listValue);
 }
 </SCRIPT>

四、顯示結果
   最後要做的就是構造查詢並顯示查詢結果了。首先,查詢的構造依賴於使用者在下拉式清單方塊中所選擇的類別名字,這個查詢只需一個簡單的SQL SELECT語句,在WHERE子句中指定使用者所選擇的類別即可。構造好查詢之後就可以執行它了,如果沒有符合要求的記錄,則向使用者顯示一個提示資訊;否則就顯示這些記錄。下面是完成上述任務的VBSCript代碼:
 <%
 If Request.QueryString("qryCategory") = "" Then
  Response.Write("請從列表中選擇一個類別.")
 Else
  ' 構造查詢
  Set rs = SERVER.CreateObject("ADODB.Recordset")
  ' 設定SQL語句
  strSQL = "SELECT Documents.File_Name, Documents.Comments,"
strSQL = strSQL & "Documents.Date_Submitted "
  strSQL = strSQL & "FROM Documents "
  strSQL = strSQL & "WHERE ((Documents.Category_Name) = '" _&
Request.QueryString("qryCategory") & "')"
 
  ' 開啟Recordset對象
  rs.Open strSQL,conn,adOpenStatic
 
  If rs.RecordCount = 0 Then
  Response.Write("沒有發現指定類別的記錄" _ &
Request.QueryString("qryCategory"))
  Else
  Response.Write("<H3>給定類別含以下記錄: " _ &
Request.QueryString("qryCategory") & "</H3>")
 
  ' 在表格中顯示查詢結果
  Response.Write("<TABLE CELLSPACING=2 COLS=3 WIDTH=500>")
  Response.Write("<TR>")
  Response.Write("<TD ALIGN=CENTER VALIGN=TOP WIDTH=20%")
  Response.Write(" BGCOLOR=#C8C8FF><B>名稱</B></TD>")
  Response.Write("<TD ALIGN=CENTER VALIGN=TOP WIDTH=65% ")
  Response.Write("BGCOLOR=#C8C8FF><B>說明</B></TD>")
  Response.Write("<TD ALIGN=CENTER VALIGN=TOP WIDTH=15% ")
  Response.Write("BGCOLOR=#C8C8FF><B>日期</B></TD>")
  Response.Write("</TR>")
 
  Do While Not rs.EOF
  Response.Write("<TR>")
  Response.Write("<TD>" & rs("File_Name") & "</TD>")
  Response.Write("<TD>" & rs("Comments") & "</TD>")
  Response.Write("<TD>" & rs("Date_Submitted") & "</TD>")
  Response.Write("</TR>")
  rs.MoveNext
  Loop
  rs.Close
  Response.Write("</TABLE>")
  End If
 
 End If
 Set rs=Nothing
 conn.Close
 Set conn=Nothing
 %>

   雖然本例中我們只用到了一個簡單的帶WHERE子句的SQL SELECT,但用類似的方法可以構造出複雜的介面和查詢,只要相應地增加用來指定條件的表單元素以及根據使用者選擇結果構造合適SQL語句的指令碼即可。

五、小結
ASP技術為終端使用者所要求的不同資料查詢介面提供了一個可伸縮的開發環境。綜合地運用指令碼與HTML可以為察看和闡釋資料構造出靈活的介面,這些工具為按照使用者需求過濾資料提供了一個簡單但高效的方法。



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。