280 likes | 392 Views
第十一讲 ASP 应用之三:查询记录. 通过留言簿数据库实例讲解如何查询指定记录。. 查询语句的具体应用. 格式 :( 1 )单条件查询: SELECT * FROM 表 WHERE 条件 ( 2 )多个条件的查询: SELECT * FROM 表 WHERE 条件 1 OR 条件 2 SELECT * FROM 表 WHERE 条件 1 AND 条件 2. 在我们的例子中,我们是要查询商品名称或描述中包含用户输入的文字的商品。这里,就有两个查询条件,条件 1 是指商品名称中包含有用户输入的文字,条件 2 是商品描述中包含用户输入的文字。.
E N D
第十一讲 ASP应用之三:查询记录 通过留言簿数据库实例讲解如何查询指定记录。
查询语句的具体应用 • 格式:(1)单条件查询:SELECT * FROM 表 WHERE 条件 • (2)多个条件的查询: • SELECT * FROM 表 WHERE 条件1 OR 条件2 • SELECT * FROM 表 WHERE 条件1 AND 条件2
在我们的例子中,我们是要查询商品名称或描述中包含用户输入的文字的商品。这里,就有两个查询条件,条件1是指商品名称中包含有用户输入的文字,条件2是商品描述中包含用户输入的文字。
通配符的使用: 那么如何用SQL语句来表达这一查询条件呢?查询条件“包含”我们一般是用表达式LIKE(类似于.....)加%来表示。%是用来进行字符匹配的操作符,它代表任何字符。
(1)如果查询条件为请查找商品名称以计算机开头的商品,则我们可以用’计算机%’来表示,也就是用%表示后面的任意字符。 (2)而如果是要查找商品名称以计算机结尾的商品,则我们可以用’%计算机’来表示。 (3)如果是要查找在商品名称中出现计算机的商品,则可以在首尾加上%,也就是‘%计算机%’来表示。
在本例中,我们是要查找商品名称或描述中包含用户输入的文字的商品,因此,需要在首尾加上%。在本例中,我们是要查找商品名称或描述中包含用户输入的文字的商品,因此,需要在首尾加上%。 因此,条件1对应的是: Name like '% Request.Form("txtName")%',位于% %中间的则是获取到的用户输入的内容。
大家不妨把中间的 Request.Form("txtName")换成具体的值,如计算机,那么该语句就变成:Name like '%计算机%',也就是商品名称中出现了计算机这三个字的所有商品都符合我们的查询条件。如“微型计算机”、“计算机语言”、“计算机原理”、“计算机操作系统”等都属于符合该条件的查询结果。
条件2对应的则是: Description like '% Request.Form("txtName")%'
至此,我们可以构造如下SQL语句: SELECT * FROM catalog WHERE (Name like '% Request.Form("txtName")%') OR (Description like '% Request.Form("txtName")%')
接下来,我们需要对该语句进行一定的完善,如去掉用户在输入过程中不小心加入的空格,如何去掉空格呢?可用字符串函数Trim,因此,我们可以将原有的条件换成: (Name like '% Trim (Request.Form("txtName")%'))和 (Description like '% Trim(Request.Form("txtName")%'))
至此,语句如下: SELECT * FROM catalog WHERE (Name like '% Trim(Request.Form("txtName"))') OR (Description like '% Trim(Request.Form("txtName"))')
SQL语句在asp文件中的正确书写: 那么,我们将语句放到asp文件中去还会出现哪些问题呢? 由于整个该sql语句是作为字符串赋值给变量Recordset1.Source的,在该语句中包含有多个字符串,因此,我们需要用+将多个字符串连接起来。那么如何决定哪些内容作为一个字符串呢?属于SQL命令的如select * from catalog where (name like '%这一部分应用双引号引起来,为什么要将%后面的东西不放到该引号中呢,大家想一下,如果将Trim()部分的内容也放到双引号中,那么程序在执行时,将不会去获取表单中的值,而是将它作为字符串传给服务器去执行。因此,我们将Trim()作为一个字符串,直接用+与前后的字符串相连接。
根据这一原则,最后在asp文件中的语句应该是如下格式:根据这一原则,最后在asp文件中的语句应该是如下格式: "SELECT * FROM catalog WHERE (Name like '%"+ Trim(Request.form("txtName")) + "%') OR (Description LIKE '%" + Trim(Request.form("txtName")) + "%')"
商品信息复杂查询 • 通过商品信息查询我们将讲解select语句的具体应用:如何对记录集进行高级定义实现查询条件的设定、显示区域的服务器行为。 • 在商品信息查询中,需要有一个页面让用户指定查询条件,用户选定查询条件并输入查询要求后,第二个页面显示查询结果。
具体的实现步骤: • 1 新建一个动态页searchcatalog.asp,定义数据库连接,创建页面中的表单,表单域,如下图;
具体的实现步骤: 在该页面中,利用两个单选按钮来指定查询条件。这两个单选按钮的名称都为radWhichRule;
2 创建显示搜索结果的页面searchresult.asp,定义数据库连接,定义传递参数的请求变量(在绑定面板中):名称分别为txtName、radWhichRule和selCategory,类型为“请求”,定义记录集rstSearchResult,单击高级,进入如下图所示窗口,完成变量部分与SQL部分的定义。
下面重点对SQL中的语句进行讲解:该查询语句用OR连接两个查询条件:关键词查询或种类查询,即where (条件1) OR (条件2),条件1对应的是选取的是关键词查询,即’mmWhichRuleStr’=’bykeyword’,它应该满足的条件是字段name中包含用户输入的名称或description中包含用户输入的描述内容,因此,用AND将这两个条件连接起来。条件2对应的是选取的是种类查询,满足的条件是 category='mmCategoryStr'
第二种实现的方式为,先对搜索条件进行判断:第二种实现的方式为,先对搜索条件进行判断: • 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
利用代码方法实现 • 回顾 • <%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 %> 查询的是所有的记录
但是我们要修改、删除记录的时候不可能是所有记录,我们要学习检索合适的记录。但是我们要修改、删除记录的时候不可能是所有记录,我们要学习检索合适的记录。 先看一条语句:a="张三"b=111 exec="select * from guestbook where name='"+a+"'and tel="+bwhere后面加上的是条件,与是and,或是or,这句话的意思就是搜索name是张三的,并且电话是111的记录。 如果要搜索一个字段里面是不是包含一个字符串就可以这么写:where instr(name,a)也就是搜索name里面有a(张三)这个字符串的人。
刚才的a,b,是常量,大家可以让a,b是表单提交过来的变量,这样就可以做一个搜索了。刚才的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>
<%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>
删除记录 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>
下面我们通过程序先来看看数据库中编号 <%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>
课堂练习 • 练习:搜索一个字段里面是不是包含某个字符串:where instr( ) 。 • 练习搜索指定条件的记录.