第十一讲 asp 应用之三:查询记录

28
第第 ASP 第第第第 第第第 第第第第第第第第第第第第第第第第第第第第

Upload: charlotte-walton

Post on 01-Jan-2016

107 views

Category:

Documents


6 download

DESCRIPTION

第十一讲 ASP 应用之三:查询记录. 通过留言簿数据库实例讲解如何查询指定记录。. 查询语句的具体应用. 格式 :( 1 )单条件查询: SELECT * FROM 表 WHERE 条件 ( 2 )多个条件的查询: SELECT * FROM 表 WHERE 条件 1 OR 条件 2 SELECT * FROM 表 WHERE 条件 1 AND 条件 2. 在我们的例子中,我们是要查询商品名称或描述中包含用户输入的文字的商品。这里,就有两个查询条件,条件 1 是指商品名称中包含有用户输入的文字,条件 2 是商品描述中包含用户输入的文字。. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第十一讲  ASP 应用之三:查询记录

第十一讲 ASP 应用之三:查询记录

通过留言簿数据库实例讲解如何查询指定记录。

Page 2: 第十一讲  ASP 应用之三:查询记录

查询语句的具体应用 • 格式:( 1 )单条件查询: SELECT * FROM

表 WHERE 条件• ( 2 )多个条件的查询:• SELECT * FROM 表 WHERE 条件 1 OR 条件 2• SELECT * FROM 表 WHERE 条件 1 AND 条件 2

Page 3: 第十一讲  ASP 应用之三:查询记录

• 在我们的例子中,我们是要查询商品名称或描述中包含用户输入的文字的商品。这里,就有两个查询条件,条件 1 是指商品名称中包含有用户输入的文字,条件 2 是商品描述中包含用户输入的文字。

Page 4: 第十一讲  ASP 应用之三:查询记录

通配符的使用:那么如何用 SQL 语句来表达这一查询条件呢?查询条件“包含”我们一般是用表达式 LIKE (类似于 ..... )加 % 来表示。 % 是用来进行字符匹配的操作符,它代表任何字符。

Page 5: 第十一讲  ASP 应用之三:查询记录

( 1 )如果查询条件为请查找商品名称以计算机开头的商品,则我们可以用’计算机 %’来表示,也就是用 % 表示后面的任意字符。 ( 2 )而如果是要查找商品名称以计算机结尾的商品,则我们可以用’ % 计算机’来表示。 ( 3 )如果是要查找在商品名称中出现计算机的商品,则可以在首尾加上 % ,也就是‘ % 计算机 %’来表示。

Page 6: 第十一讲  ASP 应用之三:查询记录

在本例中,我们是要查找商品名称或描述中包含用户输入的文字的商品,因此,需要在首尾加上 % 。因此,条件 1 对应的是:Name like '% Request.Form("txtName")%' ,位于 % % 中间的则是获取到的用户输入的内容。

Page 7: 第十一讲  ASP 应用之三:查询记录

大家不妨把中间的Request.Form("txtName") 换成具体的值,如计算机,那么该语句就变成: Name like '% 计算机 %' ,也就是商品名称中出现了计算机这三个字的所有商品都符合我们的查询条件。如“微型计算机”、“计算机语言”、“计算机原理”、“计算机操作系统”等都属于符合该条件的查询结果。

Page 8: 第十一讲  ASP 应用之三:查询记录

条件 2 对应的则是:Description like '% Request.Form("txtName")%'

Page 9: 第十一讲  ASP 应用之三:查询记录

至此,我们可以构造如下 SQL 语句:SELECT * FROM catalog WHERE (Name like '% Request.Form("txtName")%') OR (Description like '% Request.Form("txtName")%')

Page 10: 第十一讲  ASP 应用之三:查询记录

接下来,我们需要对该语句进行一定的完善,如去掉用户在输入过程中不小心加入的空格,如何去掉空格呢?可用字符串函数 Trim ,因此,我们可以将原有的条件换成: (Name like '% Trim ( Request.Form("txtName")%' ) )和 (Description like '% Trim ( Request.Form("txtName")%' ) )

Page 11: 第十一讲  ASP 应用之三:查询记录

至此,语句如下:SELECT * FROM catalog WHERE (Name like '% Trim(Request.Form("txtName"))') OR (Description like '% Trim(Request.Form("txtName"))')

Page 12: 第十一讲  ASP 应用之三:查询记录

SQL 语句在 asp 文件中的正确书写:那么,我们将语句放到 asp 文件中去还会出现哪些问题呢?由于整个该 sql 语句是作为字符串赋值给变量Recordset1.Source 的,在该语句中包含有多个字符串,因此,我们需要用 + 将多个字符串连接起来。那么如何决定哪些内容作为一个字符串呢?属于 SQL 命令的如 select * from catalog where (name like '% 这一部分应用双引号引起来,为什么要将 % 后面的东西不放到该引号中呢,大家想一下,如果将 Trim() 部分的内容也放到双引号中,那么程序在执行时,将不会去获取表单中的值,而是将它作为字符串传给服务器去执行。因此,我们将 Trim() 作为一个字符串,直接用 + 与前后的字符串相连接。

Page 13: 第十一讲  ASP 应用之三:查询记录

根据这一原则,最后在 asp 文件中的语句应该是如下格式:"SELECT * FROM catalog WHERE (Name like '%"+ Trim(Request.form("txtName")) + "%') OR (Description LIKE '%" + Trim(Request.form("txtName")) + "%')"

Page 14: 第十一讲  ASP 应用之三:查询记录

商品信息复杂查询 • 通过商品信息查询我们将讲解 select 语句的

具体应用:如何对记录集进行高级定义实现查询条件的设定、显示区域的服务器行为。

• 在商品信息查询中,需要有一个页面让用户指定查询条件,用户选定查询条件并输入查询要求后,第二个页面显示查询结果。

Page 15: 第十一讲  ASP 应用之三:查询记录

具体的实现步骤: • 1 新建一个动态页 searchcatalog.asp ,定义

数据库连接,创建页面中的表单,表单域,如下图;

Page 16: 第十一讲  ASP 应用之三:查询记录

具体的实现步骤:

在该页面中,利用两个单选按钮来指定查询条件。这两个单选按钮的名称都为radWhichRule ;

Page 17: 第十一讲  ASP 应用之三:查询记录

2 创建显示搜索结果的页面searchresult.asp ,定义数据库连接,定义传递参数的请求变量(在绑定面板中):名称分别为 txtName、 radWhichRule 和 selCategory ,

类型为“请求”,定义记录集rstSearchResult ,单击高级,进入

如下图所示窗口,完成变量部分与SQL 部分的定义。

Page 18: 第十一讲  ASP 应用之三:查询记录
Page 19: 第十一讲  ASP 应用之三:查询记录

• 下面重点对 SQL 中的语句进行讲解:该查询语句用 OR 连接两个查询条件:关键词查询或种类查询,即 where ( 条件1) OR (条件 2 ),条件 1 对应的是选取的是关键词查询,即’ mmWhichRuleStr’=’bykeyword’,它应该满足的条件是字段 name 中包含用户输入的名称或 description 中包含用户输入的描述内容,因此,用 AND 将这两个条件连接起来。条件 2 对应的是选取的是种类查询,满足的条件是 category='mmCategoryStr'

Page 20: 第十一讲  ASP 应用之三:查询记录

• 第二种实现的方式为,先对搜索条件进行判断:• if Replace(Recordset1__mmWhichRuleStr, "'", "''") =

"bykeyword" then • Recordset1.Source = "SELECT * FROM catalog WHERE (Name

like '%" + Trim(Replace(Recordset1__mmNameStr, "'", "''")) +"%') OR (Description like '%"+ Trim(Replace(Recordset1__mmNameStr, "'", "''"))+"%')"

• else• Recordset1.Source = "SELECT * FROM catalog WHERE category=

'" + Replace(Recordset1__mmCategoryStr, "'", "''") + "'"• end if

Page 21: 第十一讲  ASP 应用之三:查询记录

• 3 保存页面,测试。

Page 22: 第十一讲  ASP 应用之三:查询记录

利用代码方法实现• 回顾• <%

set conn=server.createobject("adodb.connection")conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("example3.mdb")exec="select * from guestbook"set rs=server.createobject("adodb.recordset")rs.open exec,conn,1,1 %>

查询的是所有的记录

Page 23: 第十一讲  ASP 应用之三:查询记录

但是我们要修改、删除记录的时候不可能是所有记录,我们要学习检索合适的记录。

先看一条语句:a="张三 "b=111 exec="select * from guestbook where name='"+a+"'and tel="+bwhere 后面加上的是条件,与是 and ,或是 or ,这句话的意思就是搜索 name 是张三的,并且电话是 111 的记录。

如果要搜索一个字段里面是不是包含一个字符串就可以这么写:where instr(name,a) 也就是搜索 name 里面有 a (张三)这个字符串的人。

Page 24: 第十一讲  ASP 应用之三:查询记录

刚才的 a,b, 是常量,大家可以让 a,b 是表单提交过来的变量,这样就可以做一个搜索了。

新建文件 search.htm<form name="form1" method="post" action=“search.asp">

搜索: <br>name =<input type="text" name="name">and tel= <input type="text" name="tel"><br><input type="submit" name="Submit" value="提交 "><input type="reset" name="Submit2" value=" 重置 "></form>

Page 25: 第十一讲  ASP 应用之三:查询记录

<%name=request.form("name")tel=request.form("tel")set conn=server.createobject("adodb.connection")conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath(“guestbook.mdb")exec="select * from guestbook where name='"+name+"' and tel="+telset rs=server.createobject("adodb.recordset")rs.open exec,conn,1,1%><html><head><title>无标题文档 </title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head> <body bgcolor="#FFFFFF" text="#000000"> <table width="100%" border="0" cellspacing="0" cellpadding="0"><%do while not rs.eof%><tr><td><%=rs("name")%></td><td><%=rs("tel")%></td><td><%=rs("message")%></td><td><%=rs("time")%></td></tr><%rs.movenextloop%></table></body></html>

Page 26: 第十一讲  ASP 应用之三:查询记录

exec=“delete * from guestbook where id=”&request.form(“id”) 上面这句话完成了删除记录的操作,不过锁定记录用了记录唯一的表示 id ,我们前面建立数据库的时候用的是系统给我们的主键,名字是编号,由于是中文的名字不是很方便,大家可以修改为 id ,不修改的话就是exec=“delete * from guestbook where 编号=”&request.form(“id”)新建文件 delete.htm. 下面我们看完整的代码:一个表单传给 ASP 文件一个 ID ,然后这个 ASP 文件就删除了这个 ID 。<form name="form1" method="post" action=“delete.asp">delete: <input type="text" name="id"><input type="submit" name="Submit" value="提交 "></form>

删除记录

Page 27: 第十一讲  ASP 应用之三:查询记录

<%set conn=server.createobject("adodb.connection")conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("example3.mdb")exec="select * from guestbook"set rs=server.createobject("adodb.recordset")rs.open exec,conn,1,1 %>

• <html><head><title>无标题文档</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head>

• <body bgcolor="#FFFFFF" text="#000000">• <table width="100%" border="0" cellspacing="0" cellpadding="0">

<%do while not rs.eof%><tr><td><%=rs("编号 ")%></td><td><%=rs("name")%></td><td><%=rs("tel")%></td><td><%=rs("message")%></td><td><%=rs("time")%></td></tr><%rs.movenextloop%></table></body></html>

下面我们通过程序先来看看数据库中编号

Page 28: 第十一讲  ASP 应用之三:查询记录

课堂练习• 练习 : 搜索一个字段里面是不是包含某个字符串

: where instr( ) 。• 练习搜索指定条件的记录 .