|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
一、说明 大多数最终用户都要求他们的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" onChange="getFilter(this.form.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可以为察看和阐释数据构造出灵活的界面,这些工具为按照用户需求过滤数据提供了一个简朴但高效的方式。 返回类别: 教程 上一教程: 用ASP写个简朴的加密和解密的类 下一教程: 正则表达式(REGULAR EXPRESSION) 您可以阅读与"ASP应用中数据库记录的选取与过滤"相关的教程: · ASP中利用数组实现数据库记录的批量录入方式 · 在ASP中通过GETROWS实现数据库记录分页的一段代码 · ASP中数据库调用中常见错误的现象和解决 · ASP中查询数据库记录写入XML文件示例 · ASP实现随机提取数据库记录例程 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |