求助~~ASP实现数据库查询

db1.mdb的表dep中有若干字段,设备编号,设备名称,设备类型,使用年限,所属部门等等。页面上有两个下拉列表框,分别是各部门和设备各种类型,要求能够分别按下拉列表所选的项目单独查询某一部门的设备或者某种类型的设备,也要能够两个下拉列表结合查询,如:输出指定部门的指定类型设备。
小妹是初学者,现在数据库已经建立好了连接,用SELECT *可以输入整张表,按要求查询还没有一个明确的思路,麻烦各位大侠帮帮忙,有知道的给个主要部分代码或者清晰思路。能帮我解决的还会追加分。
还有一个问题,想让提交表单和查询结果在同一个页面上,就是那个页面是可以反复查询的,代码怎么编??表单提交后下拉列表的值又变成了原来的值,要怎么设置才能让那个值在提交后不还原呢?

首先不推荐使用SELECT *,最好是你要使用哪些字段,就列出那些字段.

SELECT 备编号,设备名称,设备类型,使用年限,所属部门 FROM 表名
WHERE 所属部门=[选中的部门] AND 设备类型 = [选中的类型]

我想你SQL语句应该会写,这个地方难点在于,你检索的条件,不一定同时出现,有可能只出现一个,



SELECT 备编号,设备名称,设备类型,使用年限,所属部门 FROM 表名
WHERE 所属部门=[选中的部门]


SELECT 备编号,设备名称,设备类型,使用年限,所属部门 FROM 表名
WHERE 设备类型 = [选中的类型]

还有最初的一条

这三条检索词句都可能出现.这个也是开发时常遇到的动态SQL问题

在程序中,执行SQL语句的是API提供的方法,一般只要传一个字符串即可,
那我们就可以在字符串上做手脚.

首先创建一个条件为真的SQL语句.

String strSQL = "SELECT 备编号,设备名称,设备类型,使用年限,所属部门 FROM 表名 WHERE 1=1 "

这条SQL执行的结果,与不加WHERE的结果是相同的,

这样做了以后,条再有变化就可以添加字符串" AND 字段=表达式 "
这样的字符串,以达到运态SQL所要求的效果.

以你的问题举例

if 部门选择了
strSQL += "AND 所属部门=选中的部门 ";

if 部门选择了
strSQL += "AND 设备类型 = 选中的类型 ";

这样,根据选择的不同可以得到三种SQL

SELECT 备编号,设备名称,设备类型,使用年限,所属部门 FROM 表名
WHERE 1=1 AND 所属部门=[选中的部门]

SELECT 备编号,设备名称,设备类型,使用年限,所属部门 FROM 表名
WHERE 1=1 AND 设备类型 = [选中的类型]

SELECT 备编号,设备名称,设备类型,使用年限,所属部门 FROM 表名
WHERE 1=1 AND 所属部门=[选中的部门] AND 设备类型 = [选中的类型]

这样应该可以达到你想要的结果了

这个要注意的是,在你写的字符串后,都要加一个空格,

要不然拼出来的结果就是

SELECT 备编号,设备名称,设备类型,使用年限,所属部门 FROM 表名
WHERE 1=1AND 所属部门=[选中的部门]AND 设备类型 = [选中的类型]

AND与前面的表达式挨在一起了,这样,这就不是一个合法的SQL语句,这点要注意

这也是在实际中常遇到的问题

就是那个页面是可以反复查询的,代码怎么编

对于这个问题很迷惑,你做完查询以后,不是回到这个页吗?这个问题实再不知道你想问什么

表单提交后下拉列表的值又变成了原来的值,

这个是正常的,因为页面刷新后,页面上的控件如时不控制的话,都会变成初始状态.

这个需要手动控制,

<select name="sel">
<option value="0"> </option>
<option value="1">>部门1</option>
<option value="2">>部门2</option>
<option value="3">>部门3</option>
</select>

假如说你提交的是部门3,你得到了3这个值,那么在回到页面时,你要在option中加上selected这个标记,即

<select name="sel">
<option value="0"> </option>
<option value="1">>部门1</option>
<option value="2">>部门2</option>
<option value="3" selected>>部门3</option>
</select>

一船的做法是,记住提交的值.

<select name="sel">
<option value="0"> </option>
<option value="1" <% if(value==1){out.println("selected");}%>>>部门1</option>
<option value="2" <% if(value==2){out.println("selected");}%>>>部门2</option>
<option value="3" <% if(value==3){out.println("selected");}%> >>部门3</option>
</select>

以上是JSP代码,你可以参考一下,

这样页面刷新后,就可以保持住你选择的那个选项的状态了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-09-17
1,让提交表单和查询结果在同一个页面上,就是那个页面是可以反复查询的,代码怎么编??

页面里搞个判断吗,比如用GET传递变量,xx.asp?out=true 这样如果request("out")="true" 就输出结果,不=就不输出查询结果,或者可以根据是否有提交查询条件来决定是否输出查询结果,并不影响表单的输出

2,表单提交后下拉列表的值又变成了原来的值,要怎么设置才能让那个值在提交后不还原呢

每次处理查询条件的时候 把查询条件记录下来,输出下拉框时进行判断,碰到相同选项就 输出selected默认选中,如<option selected>部门1</option>

3,查询代码

先定义前半截SQL语句 SQL="SELECT * FROM 表dep WHERE 1=1"(此处1=1以方便衔接下面语句)

然后判断查询条件,假如需判断部门,则SQL=SQL&" and 部门=什么部门"

然后判断是否需要查询设备类型,如需要则,SQL=SQL&" and 类型=什么类型"

最后可加上排序SQL=SQL&" ORDER BY 什么顺序"
第2个回答  2008-09-18
呵呵 修改提交之后,时间就变了。

【connect.cfg】文件
<%
set connect=server.createobject("adodb.connection")
constr="provider=microsoft.jet.oledb.4.0;data source=" & datafile '【设置数据库】
connect.open constr
set rs=server.createobject("adodb.recordset")
%>

【index.asp】文件
<!--#include file="connect.cfg"-->

<form name="form1" method="post">

<!-- 【部门】
<select name="select">
<option value="*">不区分</option> //【这里是所有部门】
<option>部门1</option>
<option>部门2</option>
<option>部门3</option>
</select>
-->

<%
'从【数据库】表中动态读取所有部门

sql='select 【部门字段】 from 【表名】 order by 【部门字段】'
rs.open sql,connect,1,1

response.write("<select name='select'>")
response.write("<option value="*">不区分</option>")

while not rs.eof
if request.form("select")=rs(0) then
response.write("<option selected>" &rs(0) & "</option>") '这里实现【选中】功能
else
response.write("<option>" &rs(0) & "</option>")
rs.movenext
wend
response.write("</select>")

'读取【设备】名称

%>

<select name="select2">
<option value="*">不区分</option> 【这里是所有设备】
<option>设备1</option>
<option>设备2</option>
<option>设备3</option>
</select>
<input type="submit" name="Submit" value="查询">
</form>
</body>
</html>

<%

if request.form("select")="*" then
sqlwhere=sqlwhere+"1=1" 【这里是所有部门】
else
sqlwhere=sqlwhere+"部门='"+request.form("select")+"'"
end if

sqlwhere=sqlwhere+" and "

if request.form("select2")="*" then
sqlwhere=sqlwhere+"1=1" 【这里是所有设备】
else
sqlwhere=sqlwhere+"设备='"+Request.form("select2")+"'"
end if

sql = "SELECT * FROM " +sqlwhere '【这里设置你的数据库 附加条件】
rs.open sql,connect,1,1

'【显示结果】

response.write "<TABLE BORDER=1>"

' if 中实现读取表头
if not rs.eof then
response.write "<tr>"
response.write "<td>表标题</td>"

for i=0 to rs.fields.count-1
if i/rs.fields.count-1=0 then response.write "<br>"
response.write "<td>" & rs(i).name & " </td>"
next
response.write "</tr>"
end if

rs.movefirt '设置到第一条记录

'读取表体部分
while not rs.eof
response.write "<td>" & rs(0) & " </td>"
response.write
response.write "</tr>"
wend

rs.close
set rs=nothing
connect.close
set connect=nothing
%>