高分寻求ASP源代码。
要求,与Access数据库连接,需有2个或多个下拉框,当一个下拉框的内容选定时,其余1个或2个中的内容也相应变化(如选择北京市时,其余一个就会出现北京市的几个区)。我找了好长时间没找到,还望各位帮帮忙吧! 问题点数:0、回复次数:17Top
1 楼dmm217(零点杀手)回复于 2003-01-03 20:58:45 得分 0
各位好心人,帮帮我吧!有的话发到我信箱dmm217@sina.comTop
2 楼dmm217(零点杀手)回复于 2003-01-04 08:22:34 得分 0
有好心人响应一下啊!救救我吧!Top
3 楼HLPACK(景天)回复于 2003-01-04 11:34:12 得分 0
我的能实现不过需要用到JavaScriptTop
4 楼HLPACK(景天)回复于 2003-01-04 11:47:41 得分 0
'我用的是SQL,用到查询变量,你自己改一下吧,
'假设有两个下拉列表,如果SELECT1改变则SELECT2也改变:
'假设你有一个区域表,它有一个TYPE字段用来记录该记录是哪个区哉的,对就于变量displaytype,其实你还可以把SELECT1也用数据库边起来,这里我就不多写了,你改一下吧
'有些数据库边接我省了
<script language="JavaScript">
function changedisplaytype(selvalue)
{
displaytype=selvalue;
location.href="/test/personal/default.asp?select=" + displaytype;
}
</script>
<%
displaytype=Request.QueryString("DisplayType")
If displaytype="" then displaytype=1 '第一次进入时默认显示第一条
Set CON1 = Server.CreateObject("ADODB.Connection")
CON1.Open "PROVIDER=SQLOLEDB;DATA SOURCE=WWW;UID=;PWD=;DATABASE="
Set Rs1=Server.CreateObject("ADODB.Recordset")
%>
<p>选择<select name="select1" onChange="javascript:changedisplaytype(this.value);">
<option value="北京">北京</option>
<option value="天津">天津</option>
....
</select></p>
<%
mysql="Select * From 区域表 Where type='" & displaytype & "'"
Set RS1=CON1.EXECUTE(mysql)
Response.Write "<select name='select2'>"
While NOT RS1.EOF
rstemp=RS1("typename")
valuetemp=RS1("papertype_id")
Response.Write "<option value=" & valuetemp & " " & selected(displaytype,valuetemp) & ">" & rstemp & "</option>"
RS1.MOVENEXT
WEND
Response.Write "</select>"
%>Top
5 楼dmm217(零点杀手)回复于 2003-01-04 16:41:42 得分 0
HLPACK(黑>>) 你好!还得再麻烦您。我实在是太笨了。关于您说的那个下拉框数据关联问题,我还没解决。不知道您是否有时间给我做一个例子。用Access库。假设有表mytable,表中2个域:项目名称、项目号。项目名称和项目号是一一对应的,选中项目名称就相当于选定项目号。我得信箱是dmm217@sina.com.企盼恢复!谢谢!Top
6 楼allforly(白衣胜血)回复于 2003-01-04 18:34:46 得分 0
province表:id[自动编号],province[文本]
city表:id[自动编号],province[数字],city[文本]
<script language="javascript">
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
function getcity(str){
xmlhttp.open("POST","city.asp",false)
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
xmlhttp.send("id="+str)
if(xmlhttp.readyState==4){
var xmldoc = new ActiveXObject("Microsoft.XMLDOM")
xmldoc.load(xmlhttp.responseXML)
xmldoc.async = false
var a = xmldoc.selectNodes("//citylist")
for (m=winform.city.options.length-1;m>0;m--)
winform.city.options[m]=null
for(i=0;i<a.length;i++){
winform.city.options[i] = new Option(a[i].selectSingleNode("name").text,a[i].selectSingleNode("id").text)
}
}
}
</script>
<form name="winform">
<select name="province" onchagne="getcity(this.value)">
......省略省份列表
</select>
<select name="city">
<option value="0">--请选择--</option>
</select>
</form>
city.asp
<%@language=vbscript%>
<%option explicit%>
<!--#include file="conn.asa"-->
<%
response.ContentType="text/xml"
response.CharSet="gb2312"
dim sql,rs
dim id
id = request.form("id")
if Request.ServerVariables("REQUEST_METHOD")="POST" then
sql = "select * from city where province="&id
set rs = conn.Execute(sql)
if not (rs.eof or rs.bof) then
%>
<?xml version="1.0" encoding="gb2312"?>
<city>
<%while not rs.eof%>
<citylist>
<id><%=rs("id")%></id>
<name><%=rs("city")%></name>
</citylist><%
rs.movenext
wend
rs.close
%>
</city>
<%else%>
<?xml version="1.0" encoding="gb2312"?>
<city>
<citylist>
<id>0</id>
<name>--请选择--</name>
</citylist>
</city>
<%end if%>
<%end if%>Top
7 楼y7967(三千)回复于 2003-01-04 19:27:27 得分 0
看看用Dreamweaver怎么做的,Access数据库:
二级连动菜单教程:
http://211.101.238.39/udsky/exmples/udskymenu/01.htm
三级连动菜单教程(插件+代码分析+教程):
http://211.101.238.39/udsky/exmples/dymacselectbox/01.htmTop
8 楼dmm217(零点杀手)回复于 2003-01-05 08:26:51 得分 0
y7967(能睡三天) 朋友,这不是动态的,当我增加数据时还需从新关联。不适用。因为我的项目号和项目名称每天都是在添加的,不是不变的。要是不变的我可以用数组解决,但是变为动态的时候我不知道该怎么做了。Top
9 楼HLPACK(景天)回复于 2003-01-05 20:30:46 得分 0
dmm217(零点杀手):
好的,明天发给你,今天一天没上网了,晚上才来CSDNTop
10 楼HLPACK(景天)回复于 2003-01-05 20:32:02 得分 0
allforly(白衣胜血) 的可以用,你先试试他的吧Top
11 楼dmm217(零点杀手)回复于 2003-01-06 09:20:50 得分 0
HLPACK(黑>>) 你好,allforly(白衣胜血)代码我试过了,是不错的。能解决有固定的数据问题。但是我的库是动态改变的,每天都要加入几个项目。库说起很简单,用VB实现起来也很容易,但是ASP就不好实现了。用Access库。假设有表mytable,表中2个域:项目名称、项目号。项目名称和项目号是一一对应的,选中项目名称就相当于选定项目号。不使用那种在Access中建立查询那种象 y7967(能睡三天)介绍的用Dreamweaver做的,如果你有时间就给我做一个例子吧。我想了好几天了。谢谢!
Top
12 楼dmm217(零点杀手)回复于 2003-01-06 09:32:51 得分 0
对了HLPACK(黑>>),我的下拉框的内容是这样和数据库相连的:
<%
set rs=server.createobject("adodb.recordset")
conn = "DBQ=" + server.mappath("message.mdb") + ";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
sql= "Select * from 项目表"
rs.open sql,conn,1,1
%>
<select name=caption style=background-color:#6699FF;font-size:9pt;color:#ffffff
>
"<option selected>项目名称</option>
<% do while not rs.eof
dd= rs.fields("项目名称")
tt=rs.fields("项目号")%>
document.write("<option><%=dd%></option>");
<%rs.movenext
loop %>
</select>
Top
13 楼scu96124678(冰河)回复于 2003-01-06 09:45:34 得分 0
也给我发一个吧,谢谢
suncathay@hotmail.comTop
14 楼gamebill(感谢你的帮助)回复于 2003-01-06 09:52:41 得分 0
ASP文件:
<%@ Language=VBScript %>
<%Option Explicit%>
<html>
<head>
<title>List</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<%
dim conn
dim rs
dim sql
dim count
dim rs1
dim sql1
set conn = server.CreateObject ("adodb.connection")
conn.Open "test","sa",""
sql = "select * from district order by locationid asc"
set rs = conn.execute(sql)
%>
<script language = "JavaScript">
var onecount;
onecount=0;
subcat = new Array();
<%
count = 0
do while not rs.eof
%>
subcat[<%=count%>] = new Array("<%= trim(rs("districtname"))%>","<%= trim(rs("locationid"))%>","<%= trim(rs("districtid"))%>");
<%
count = count + 1
rs.movenext
loop
rs.close
set rs=nothing
%>
onecount=<%=count%>;
function changelocation(locationid)
{
document.myform.smalllocation.length = 0;
var locationid=locationid;
var i;
document.myform.smalllocation.options[0] = new Option('====所有地区====','');
for (i=0;i < onecount; i++)
{
if (subcat[i][1] == locationid)
{
document.myform.smalllocation.options[document.myform.smalllocation.length] = new Option(subcat[i][0], subcat[i][2]);
}
}
}
</script>
</head>
<body>
<form name="myform" method="post">
<select name="biglocation" onChange="changelocation(document.myform.biglocation.options[document.myform.biglocation.selectedIndex].value)">
<%
sql1 = "select * from location order by locationname asc"
set rs1 = conn.Execute (sql1)
do while not rs1.eof
%>
<option value="<%=trim(rs1("locationid"))%>"><%=trim(rs1("locationname"))%></option>
<%
rs1.movenext
loop
rs1.close
set rs1 = nothing
conn.Close
set conn = nothing
%>
</select>
<select name="smalllocation">
<option selected value="">==所有地区==</option>
</select>
</form>
<script LANGUAGE="javascript">
changelocation(document.myform.biglocation.options[document.myform.biglocation.selectedIndex].value);
</script>
</body>
</html>
数据库:
create table location
(
locationid char(2) not null primary key,
locationname char(50) not null
)
create table district
(
districtid char(3) not null primary key,
districtname char(50) not null,
locationid char(2) not null
)Top
15 楼dmm217(零点杀手)回复于 2003-01-06 10:35:02 得分 0
感谢你的帮助,你的那段代码我看来,很明白的。刚才我可能是没说清楚。我再说一下吧!我用Access库。假设有表mytable,表中2个域:项目名称、项目号。项目名称和项目号是一一对应的。这些项目是每天更新的,主要是增加。有两个下拉框,初始化时“项目名称”框中从数据库中读出所有的项目名供用户选择,当选中“项目名称”框中某一项目时就会在“项目号”框中自动显示该项目的项目号。我的问题就是不知道该怎么写入项目号。你要是有时间麻烦您做一个例子吧!我实在是太笨了啊。
Top
16 楼antiking(生活就象拉大便有时顺畅有时不顺畅.)回复于 2003-01-06 10:40:46 得分 0
用onchanged=submit()可以的不过你要考虑值变换时的在下拉框保存原来的值不变Top
17 楼theghost(鬼魅)回复于 2003-01-06 10:46:55 得分 0
你的源码这只是一个select,另一个需要连动的呢?Top




