主题:  TO:面包和小田(排名不分先后!)关于查询中的问题!

udfans

职务:普通成员
等级:2
金币:0.0
发贴:417
注册:2002/2/2 12:32:55
#12002/9/24 22:15:26
喜闻面包重现5D江湖,所以一定不能放过学习请教的机会,下面一个可能对于高手来说绝对简单的问题!
我做了一个报刊查询,结构很简单,就是有一个下拉列表:里面是查询的内容选项(主要有:报刊名称、邮发代号、拚音简写、发行地),一个文本框,用于输入关键字,我在查询结果页的SQL语句为:
SELECT *
FROM bkml
WHERE varname = 'varkeyword'
ORDER BY spcolname2 desc
varname为定义的变量,值从表单的menu里取得,varkeyword为变量,值从表单的文本框里取得,
现在有一个问题,如果是精确查询,一点问题没有,但如果我想对邮发代号做精确查询,而其它三项进行模糊查询,该如何做?
我试了一下:WHERE varname like '%varkeyword%',是能够实现 模糊查询,但邮发代号就显示的不对了,因为如果我输入"1-1"它会显示很多没有用的诸如:1-12,1-13,1-123,等等,我在考虑肯定是SQL语句有更好的解决方案,请两位我非常敬重和喜欢的班主指点迷津!虽然可以通过别的表单方式实现,但这种是最简单和适用的,
www.sd185.com/183/baokan/baokan_cxtjsr.jsp
里面一个例子,我不知它的SQL语句是怎么写的!小生在这里谢谢两位了!

编辑历史:[这消息被udfans编辑过(编辑时间2002-09-24 22:20:31)]


缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
注册:2004/1/14 19:14:47
#22002/9/25 9:50:05
like是模糊查询,跟1-1类似的都回列举出来,所以1-12等等也符合。


如果输入邮发代号需要精确查询而其他进行模糊查询的话,可以写两个SQL,比如if request("type")="邮发代号" then
SQL = SELECT * FROM bkml WHERE varname = 'varkeyword' ORDER BY spcolname2 desc
else
SQL = SELECT * FROM bkml WHERE varname like 'varkeyword' ORDER BY spcolname2 desc

end if

然后丁一记录集时这么写:

Rs.Source = SQL



udfans

职务:普通成员
等级:2
金币:0.0
发贴:417
注册:2002/2/2 12:32:55
#32002/9/25 12:14:21
首先谢谢allinhands能这么快的回复,但如果改UD生成的代码,太费劲了,我的代码能力太差了,以下我按你的方法改的,测试不行,提示最后的一句:SQL.close()错误!好人做到底,能否告诉我应该如何改?
<%@LANGUAGE="VBSCRIPT"%>

<%
Dim sql__spcolname
sql__spcolname = "ming"
if (Request.QueryString("colname") <> "") then sql__spcolname = Request.QueryString("colname")
%>
<%
Dim sql__spcolvalue
sql__spcolvalue = "xyz"
if (Request.QueryString("keyword") <> "") then sql__spcolvalue = Request.QueryString("keyword")
%>
<%
Dim sql__spcolname2
sql__spcolname2 = "id"
if (Request.QueryString("orderby") <> "") then sql__spcolname2 = Request.QueryString("orderby")
%>
<%
set sql = Server.CreateObject("ADODB.Recordset")
sql.ActiveConnection = MM_bkml_STRING
if Request("colname")="dh" then
sql.Source = "SELECT * FROM bkml WHERE " + Replace(sql__spcolname, "'", "''") + " = '" + Replace(sql__spcolvalue, "'", "''") + "' AND dja <>null and dh<>null ORDER BY " + Replace(sql__spcolname2, "'", "''") + " desc"
else

sql.Source = "SELECT * FROM bkml WHERE " + Replace(sql__spcolname, "'", "''") + " = '" + Replace(sql__spcolvalue, "'", "''") + "' AND dja <>null and dh<>null ORDER BY " + Replace(sql__spcolname2, "'", "''") + " desc"
sql.CursorType = 1
sql.CursorLocation = 2
sql.LockType = 3
sql.Open()
sql_numRows = 0
%>
...

编辑历史:[这消息被udfans编辑过(编辑时间2002-09-25 12:16:29)]
[这消息被udfans编辑过(编辑时间2002-09-25 21:35:14)]


缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
注册:2004/1/14 19:14:47
#42002/9/25 13:30:19
少了个end if



udfans

职务:普通成员
等级:2
金币:0.0
发贴:417
注册:2002/2/2 12:32:55
#52002/9/25 21:33:49
对了,非常谢谢您,allinhands!帮我解决大问题了,还是好人多啊!
对我启发很大,原来SQL也可以这么用!再一次谢谢您!