【例15.4】如下图15.4所示,从查询输入界面输入用户名,在Demo 数据库的users表中查找该用户名的纪录,并在浏览器中显示查询结果如图15.5所示。(基础模块2,1”查询记录”)

图15.4 查询关键字的输入

图15.5 查询结果的输出
“查询记录”模块由两段程序代码(query_data.htm与query.asp)组成。query_data.htm是查询关键字输入的界面;query.asp是从Demo数据库中查询符合关键字的记录。可在Frontpage中调用【例15.2】的“数据输入”模块,制作成query_data.htm的输入界面。
< query_data.htm>源程序:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>基础模块“查询记录”之“输入查询串”</title>
</head>
<body bgcolor="#C0C0C0">
<form method="POST" action="query.asp">
<p>
<font face="华文行楷" size="6">输入查询串</font></h1>
</p>
<h3>请输入您要查询的用户名:</h3>
<p>
用户名:<input type="text" name="txtUserName" size="20">
</p>
<p>
<input type="submit" value="查询" ><input type="reset" value="全部重填">
</p>
</form>
</body>
</html>
Query.asp程序流程如下图15.6所示:

图 15.6 Query.asp程序流程图从程序流程图中可以看出,程序段“建立一个到数据源的连结”即【例15.3】的模块,只要检查相应的参数,如:server=”127.0.0.1;uid=chen;pwd=123;database=Demo”,把IP、uid、pwd、database的值改为当前题目的参数值就可以直接引用。
<query.asp>源程序:
<% Option Explicit %>
<%
'接受表单输入的数据
Dim userName
userName=Request.Form("txtUserName")
'建立一个到数据源的连接
Dim strDSN
Dim connDemo
strDSN="Provider=MSDASQL;DRIVER={SQL Server};SERVER=127.0.0.1;DATABASE=Demo;UID=chen;PWD=123"
Set connDemo = Server.CreateObject("ADODB.Connection")
connDemo.Open strDSN
'建立记录集,存放查询结果
Dim rsUsers
Dim strSqlSelectUsers
Set rsUsers = Server.CreateObject("ADODB.Recordset")
strSqlSelectUsers="SELECT * FROM users WHERE username LIKE '%" & userName & "%'"
rsUsers.Open strSqlSelectUsers,connDemo
%>
<!--结果输出-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>基础模块“查询记录”之“查询结果”</title>
</head>
<body bgcolor="#C0C0C0">
<p>
<font face="华文行楷" size="6">查询结果</font></h1>
</p>
<h3>查询结果为:</h3>

<%
If Not rsUsers.Eof Then
%>
<table border="1" cellpadding="8" cellspacing="0" width="342">
<tr>
<th width="70" >姓名</th>
<th width="121" >电话</th>
<th width="143" >电子邮箱</th>
</tr

<%
Do While Not rsUsers.Eof
%>
<tr>
<td width="70"><% =rsUsers("username") %></td>
<td width="121"><% =rsUsers("phone") %></td>
<td width="143"><% =rsUsers("email") %></td>
</tr>
<%
rsUsers.MoveNext
Loop
End If
%>
</table>
</body>
</html>
以上模块中,通过使用一个循环来扫描记录集中中的每一条纪录,把每个纪录的userName、password、email、phone、userResume字段值显示输出到浏览器。
当把查询结果保存到一个记录集对象中时,当前记录总是第一条纪录(如果查询结果不为空,那么此时BOF和EOF都是false).在上面的例子中,调用了记录集对象的MoveNext方法,使当前记录移到下一条纪录。当所有的记录都显示完时,当前记录移到记录集中最后一条记录之后,使得记录集对象的EOF属性的值变成TRUE,从而退出Do while ……Loop循环,结束这次显示输出。