CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

请教解决方案,还是联动选择???

楼主Ngod(天泽)2003-12-03 16:55:48 在 Web 开发 / ASP 提问

我要实现一个4级的选择,数据很多,放在数据库中,很长时间没搞定,各位大哥帮帮忙,给想个办法,用数组肯定很慢!不知用XML行不行,还有什么其他的方法吗?大哥们仁者见仁,给点例子?谢了!!!! 问题点数:100、回复次数:37Top

1 楼bananasmiling(解决问题时间)回复于 2003-12-03 17:13:32 得分 0

我想你还是用三级联动的思路来做四级联动的吧这样会比较省时..Top

2 楼online(龙卷风V4.0--决战江湖(MS MVP-VB))回复于 2003-12-03 21:03:04 得分 0

找一找三级联动的  
  Top

3 楼yllaji(51FE.COM)回复于 2003-12-04 00:19:21 得分 0

用三级联动   的方法来思考   四级  
   
  ……   4级……   这么多?  
   
  呵呵   实在不行   给他来个   “下一步”   什么的,让他们一步步选   算了Top

4 楼Ngod(天泽)回复于 2003-12-05 21:22:20 得分 0

我看到了javascript斑竹的四级菜单,可是select中的value和显示的值是一样,我想用value中的值是代码。可真是很难??郁闷了十天了??现在刚有点想法。但是牺牲了数据库的空间可效率。真是心痛,而且做起来很烦。  
  继续等待赐教。。。。。。Top

5 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-06 00:51:01 得分 100

数据结构公开出来,我正想做一个四级的玩呢!!Top

6 楼Ngod(天泽)回复于 2003-12-06 12:17:17 得分 0

数据库中有编码和名称,编码是十二位的字符,前两位为生产线名称代码,第三位是大类,第四位到第七位为小类名称,最后五位是物品名称。  
  例如:  
  010000000000   XX生产线  
  011000000000   设备  
  012000000000   备件  
  011000100000   电机  
  011000100001   直流电机  
  等等.......Top

7 楼loveme2000ok(* °¤ °*)回复于 2003-12-06 12:44:29 得分 0

联动现在已经太热火了,  
  各位朋友,赐招吧。Top

8 楼yeno(人在广州)回复于 2003-12-06 12:59:36 得分 0

只做过一级联动,呵呵,用内嵌框架做吧,可以实现无限级联运哦Top

9 楼yeno(人在广州)回复于 2003-12-06 13:01:15 得分 0

也就是<iframe>,向<iframe>框架中的页面传值,只要会一级联运,就可以实现无限级联动,呵呵,楼主是否愿意一试?Top

10 楼WapWeb(大白菜芯)回复于 2003-12-06 13:19:15 得分 0

发给你一个联动下拉框的ASP例子吧  
   
  http://www.china-cu.net/bbs/dispbbs.asp?boardid=10&id=153  
   
  Top

11 楼ce200311(末叶)回复于 2003-12-06 13:31:33 得分 0

四级联动哦,也可以放在2或者3个列表里就搞定了,一个主栏目,接着是2级的读出全部的内容,如果还有子栏目的用  
  二级/s三级表示,我就是这样Top

12 楼yeno(人在广州)回复于 2003-12-06 15:11:28 得分 0

能解决一级联动的问题,就可以解决其它联动的问题,很高兴,联动的下一步  
  “根据不定字段查询”的难题在各路英豪帮助下已获解决  
  请参考贴:  
  http://expert.csdn.net/Expert/TopicView1.asp?id=2533108Top

13 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-07 00:59:02 得分 0

数据多和数据少的做法可不一样啊。  
  数据少的做法是一次全下到客户端,根据需要隐藏和显示某些东西。  
  数据多就要隐藏一个查询,模拟不刷新了。Top

14 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-07 04:45:40 得分 0

数据少的做法之一是:  
  <form   id=f   name=f>  
  生产线名称:<SELECT   id=s1   name=s1   onchange="vbs:change   me"></SELECT>  
  大   类   名称:<SELECT   id=s2   name=s2   onchange="vbs:change   me"></SELECT>  
  小   类   名称:<SELECT   id=s3   name=s3   onchange="vbs:change   me"></SELECT>  
  物   品   名称:<SELECT   id=s4   name=s4   ></SELECT>  
  </form>  
  <SCRIPT   LANGUAGE=vbscript   >  
  Dim   d,o     '   创建对象变量。  
  dim   v'四个选择框的值  
  dim   L:L=12'编码总长度  
  a=array(0,2,1,4,5)'编码分位规则:四级字符长度分别是2,1,4,5  
  Set   d   =   CreateObject("Scripting.Dictionary")  
  <%  
  Dim   Cn,Rs  
  Dim   SQL,StrDSN    
  Set   cn=Server.CreateObject("ADODB.connection")  
  Set   Rs   =   Server.CreateObject("ADODB.Recordset")  
  StrDSN   =   "Driver={Microsoft   Access   Driver   (*.mdb)};   DBQ="   &   Server.MapPath("db4.mdb")  
  Cn.Open   strDSN  
  SQL="select   *   from   tb"  
  Rs.Open   SQL,cn,3,2  
  do   while   not   Rs.EOF%>  
  d.Add   "<%=rs("code")%>",   "<%=rs("name")%>"   <%Rs.MoveNext  
  loop  
  Rs.Close  
  Cn.Close  
  set   rs=nothing  
  set   cn=nothing  
  %>  
  for   i=1   to   4  
  addo   i    
  next  
  Sub   change(obj)  
  n=right(obj.id,1)'n是级数  
  for   i=n+1   to   4  
  remove   i '移除    
  addo   i '增加  
  next  
  End   Sub  
   
  sub   remove(x)'移除  
  for   each   ooo   in   eval("f.S"   &   x   &   ".options")  
  execScript   "f.S"   &   x   &   ".remove   "   &   ooo.index,"vbs"  
  next  
  end   sub  
   
  sub   addo(x) '增加  
  dim   m:m=0'm代表祖宗字串的长度,假设根节点是12个0  
  for   i=0   to   x-1  
  m=m+a(i)  
  next  
  if   x=1   then  
   
  v=string(L,"0")    
  else  
  set   sss=eval("f.S"   &   x-1)  
  if   sss.length=0   then   exit   sub  
  v=sss.item(sss.selectedIndex).value  
  end   if  
    for   each   code   in   d.Keys      
  if   left(code,m)=left(v,m)   then  
     
  if   mid(code,m+1,a(x))<>string(a(x),"0")   then  
  if   right(code,L-m-a(x))=string(L-m-a(x),"0")   then    
  set   o=document.createElement("option")  
  o.text=d.Item(code)  
  o.value=code  
  execScript   "f.S"   &   x   &   ".add   o","vbs"    
  end   if  
  end   if  
  end   if  
    next  
   
  end   sub  
   
  </SCRIPT>Top

15 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-07 04:49:13 得分 0

周日0点开始到  
  早晨4点半做完的  
  1小时写完成功,3小时把他浓缩优化,顺便实验一下一些技巧  
  想把代码写的短小明了就是费劲!Top

16 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-07 05:27:30 得分 0

四级连动(数据量少版)思路:  
  数据库db4.mdb  
  一个表TB,三个字段  
  id         code               name  
  1   |010000000000|XX生产线  
  2   |011000000000|XX设备  
  3   |012000000000|备件  
  4   |011000100000|电机  
  5   |011000100001|直流电机  
  6   |020000000000|YY生产线  
  8   |021000000000|YY设备  
  9   |022000000000|YY备件  
  10|021000100000|YY电机  
  11|021000100001|交流电机  
  12|030000000000|XX生产线  
  13|031000000000|XX设备  
  14|032000000000|备件  
  15|031000100000|电机  
  16|031000100001|直流电机  
  17|040000000000|zz生产线  
  18|041000000000|zz设备  
  19|042000000000|zz备件  
  20|041000100000|zz电机  
  21|041000100001|zz直流电机  
  22|050000000000|aa生产线  
  23|051000000000|aa设备  
  24|052000000000|aa备件  
  25|051000100000|aa电机  
  26|051000100001|aa直流电机  
   
  数据库中有编码和名称,  
  编码是十二位的字符,  
  前两位为生产线名称代码,  
  第三位是大类,  
  第四位到第七位为小类名称,  
  最后五位是物品名称。  
   
  首先声明这么设计数据库实际会给编程带来麻烦,  
  也不适合海量数据。  
  具体先不探讨。  
  但是既然数据库不能更改,那么说一下思路:  
   
  1,第一步:  
  数据量不是海量的情况下,可以一次载到客户端  
  只要能弄到客户端,什么都好办。  
  这里采用了dictionary对象,比常规数组方便些。  
  Dictionary   对象等价于   PERL   联合数组。  
  项目可以是数据的任何形式,并存储在数组中。每个项目都与一个具有唯一性的键相联。  
  该键用于取得单个项目,并且通常是整数或字符串,但也可以是除数组以外的任何类型。  
  客户端脚本中夹服务器端脚本,为项目赋值  
  <SCRIPT   LANGUAGE=vbs>  
          略  
  Set   d   =   CreateObject("Scripting.Dictionary")  
  <%   服务器读数据库循环%>  
                  d.Add   "<%=rs("code")%>",   "<%=rs("name")%>"  
  <%   循环结束%>  
  </SCRIPT>  
   
  还有一种办法用控件载到客户端,参考二级连动select:  
  http://expert.csdn.net/Expert/topic/2174/2174874.xml?temp=.9758264  
  就是每级都生成无数隐藏起来的select,假连动,实际上是隐藏和显示  
   
  2,第二步:  
   
  动态增加option的原理  
  set   opt=document.createElement("option")  
  opt.text="text"  
  opt.value="value"  
  form1.select1.add   opt  
   
  删除  
  for   each   opt   in   form1.select1.options  
  form1.select1.remove   opt.index  
  next  
   
  这样为每个下拉框写上onchange代码,基本成功  
   
   
  2,第三步:  
  合并类似的函数,优化,调试Top

17 楼Ngod(天泽)回复于 2003-12-07 13:33:03 得分 0

先谢谢superdullwolf(超级大笨狼)   兄。  
  我试试。Top

18 楼Ngod(天泽)回复于 2003-12-07 13:50:47 得分 0

superdullwolf(超级大笨狼)   说的没错,我也是把数据一次性的读到客户端,结果考虑到效率问题,才发了这个帖子,这种情况如果改变数据库的结构该怎么办呢?  
  要想每次只读出所需要的数据,是不是只能一步一步的提交数据,然后返回。  
  两种方法有得有失,有没有方法两全其美,那么如果是用这两种方法中的一种,分析一下那种更划算,数据量大概有几万条,十万以下。Top

19 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-07 15:17:53 得分 0

别着急,我的代码还没贴完呢,以上是为真正海量数据打基础,通过以上代码明白原理  
  下面的代码适合海量数据,原理是隐藏一个框架ifram尺寸0   X   0,每次改他的地址查寻结果通过parent传递。两个小文件,我敢说在csdn我做的4级连动代码最短!!  
  ss3.asp  
  <%  
  Dim   Cn,Rs  
  Dim   SQL,StrDSN  
  dim   L:L=12'编码总长度  
  dim   first:first=string(L,"0")    
  a=array(0,2,1,4,5)  
  Set   cn=Server.CreateObject("ADODB.connection")  
  Set   Rs   =   Server.CreateObject("ADODB.Recordset")  
  StrDSN   =   "Driver={Microsoft   Access   Driver   (*.mdb)};   DBQ="    
  StrDSN   =   StrDSN   &   Server.MapPath("db4.mdb")  
  Cn.Open   strDSN  
  %>  
  <html>  
  <head>  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">  
  <title>无标题文档</title>  
  </head>  
  <body>  
  <IFRAME   id=ifr    
  src="Q.asp?x=1&first=000000000000"  
    width=0   height=0>   </IFRAME>  
  </div>  
  <form   id=f   name=f>  
  生产线名称:  
  <SELECT   id=s1   name=s1   onchange="vbs:change   me">  
  <%addfirst   1%>  
  </SELECT>  
  大   类   名称:  
  <SELECT   id=s2   name=s2   onchange="vbs:change   me">  
  <%addfirst   2%>  
  </SELECT>  
  小   类   名称:  
  <SELECT   id=s3   name=s3   onchange="vbs:change   me">  
  <%addfirst   3%>  
  </SELECT>  
  物   品   名称:<SELECT   id=s4   name=s4   >  
  <%addfirst   4%></SELECT>  
  </form>  
  <%  
  Cn.Close  
  set   rs=nothing  
  set   cn=nothing  
   
  sub   addfirst(x)  
  dim   m:m=0'm代表祖宗字串的长度,假设根节点是12个0  
  for   i=0   to   x-1  
  m=m+a(i)  
  next  
  SQL="select   *   from   tb   where   code   like   '"   &   left(first,m)   &   string(a(x),"_")     &   string(L-m-a(x),"0")   &   "'   and   code<>'"   &   first     &   "'"  
  'Response.Write   SQL  
  Rs.Open   SQL,cn,3,2  
  if   Rs.RecordCount>0   then  
  first=rs("code")  
  do   while   not   Rs.EOF%>  
  <option   value="<%=rs("code")%>"><%=rs("name")%></option>  
  <%Rs.MoveNext  
  loop  
  end   if  
  Rs.Close  
  end   sub  
  %>  
  </body>  
  </html>  
  <SCRIPT   LANGUAGE=vbscript   >  
  Sub   change(obj)  
  n=right(obj.id,1)'n是级数  
  ifr.location.href="Q.asp?x="   &   n   &   "&first="   &   obj.value  
  End   Sub  
  </SCRIPT>  
   
  第二个文件  
  Q.asp  
   
   
  <%  
  Dim   Cn,Rs  
  Dim   SQL,StrDSN  
  dim   L:L=12'编码总长度  
  dim   first:first=string(L,"0")    
  a=array(0,2,1,4,5)  
  Set   cn=Server.CreateObject("ADODB.connection")  
  Set   Rs   =   Server.CreateObject("ADODB.Recordset")  
  StrDSN   =   "Driver={Microsoft   Access   Driver   (*.mdb)};   DBQ="    
  StrDSN   =   StrDSN   &   Server.MapPath("db4.mdb")  
  Cn.Open   strDSN  
   
  x=Request("x")  
  first=Request("first")  
  sub   addfirst(x)  
  dim   m:m=0'm代表祖宗字串的长度,假设根节点是12个0  
  for   i=0   to   x-1  
  m=m+a(i)  
  next  
  SQL="select   *   from   tb   where   code   like   '"   &   left(first,m)       &   string(L-m,"_")   &   "'   and   code<>'"   &   first     &   "'"  
  'Response.Write   SQL  
  Rs.Open   SQL,cn,3,2  
  if   Rs.RecordCount>0   then  
  first=rs("code")  
  do   while   not   Rs.EOF%>d.Add   "<%=rs("code")%>",   "<%=rs("name")%>"  
  <%  
  Rs.MoveNext  
  loop  
  end   if  
  Rs.Close  
  end   sub  
  %>  
  <SCRIPT   LANGUAGE=vbscript   >  
  Dim   d,o     '   创建对象变量。  
  dim   v'四个选择框的值  
  dim   L:L=12'编码总长度  
  a=array(0,2,1,4,5)'编码分位规则:四级字符长度分别是2,1,4,5  
  Set   d   =   CreateObject("Scripting.Dictionary")  
  <%addfirst   x%>  
  change   <%=x%>  
   
  Sub   change(x)  
  n=right(x,1)'n是级数  
  for   i=n+1   to   4  
  remove   i '移除    
  addo   i '增加  
  next  
  End   Sub  
  sub   remove(x)'移除  
  for   each   ooo   in   eval("parent.f.S"   &   x   &   ".options")  
  execScript   "parent.f.S"   &   x   &   ".remove   "   &   ooo.index,"vbs"  
  next  
  end   sub  
   
  sub   addo(x) '增加  
  dim   m:m=0'm代表祖宗字串的长度,假设根节点是12个0  
  for   i=0   to   x-1  
  m=m+a(i)  
  next  
  if   x=1   then  
  v=string(L,"0")    
  else  
  set   sss=eval("parent.f.S"   &   x-1)  
  if   sss.length=0   then   exit   sub  
  v=sss.item(sss.selectedIndex).value  
  end   if  
    for   each   code   in   d.Keys      
  if   left(code,m)=left(v,m)   then    
  if   mid(code,m+1,a(x))<>string(a(x),"0")   then  
  if   right(code,L-m-a(x))=string(L-m-a(x),"0")   then    
  set   o=document.createElement("option")  
  o.text=d.Item(code)  
  o.value=code  
  execScript   "parent.f.S"   &   x   &   ".add   o","vbs"    
  end   if  
  end   if  
  end   if  
    next  
  end   sub  
  </SCRIPT>Top

20 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-07 15:21:17 得分 0

以上代码适合海量数据,经简单测试好使,  
  因为每次调用查询传到客户端的东西有限,所以理论上适合海量数据。  
  Top

21 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-07 15:23:29 得分 0

还有100分双星!!!  
  superdullwolf在CSDN各个板块的得分综合表    
  板块   专家分   信誉分   等级      
  Web   开发   9902   97    
   
   
  Top

22 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-07 15:25:40 得分 0

数据量大概有几万条,十万以下。不算大。  
  用我的两种做法对比一下,看那个快?Top

23 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-07 16:06:26 得分 0

我用下面代码增加了1万多记录,速度还可以,还可以优化。  
  <%  
  Dim   Cn,Rs  
  Dim   SQL,StrDSN  
  dim   a,b,c,d  
  dim   AA,BB,CC,DD,EE  
  AA=10:BB=9:CC=10:DD=10  
  'AA=1:BB=1:CC=1:DD=1  
  '共10*9*10*10=10000个数据  
  Set   cn=Server.CreateObject("ADODB.connection")  
  Set   Rs   =   Server.CreateObject("ADODB.Recordset")  
  StrDSN   =   "Driver={Microsoft   Access   Driver   (*.mdb)};   DBQ="    
  StrDSN   =   StrDSN   &   Server.MapPath("db4.mdb")  
  Cn.Open   strDSN  
  sql="select   *   from   tb"  
  Rs.Open   sql,cn,3,2  
  for   a=1   to   AA'增加10个生产线  
  Rs.AddNew    
  rs("code")=f(a,2)   &   string(10,"0")  
  rs("name")="生产线"   &   f(a,2)    
  for   b=1   to   BB '增加9个生产设备  
  Rs.AddNew    
  rs("code")=f(a,2)   &   b   &   string(9,"0")  
  rs("name")="设备"   &   f(a,2)   &   b  
  for   c=1   to   CC'增加10个备件类型  
  Rs.AddNew    
  rs("code")=f(a,2)   &   b   &   f(c,4)   &   string(5,"0")  
  rs("name")="备件类型"   &   f(a,2)   &   b   &   c  
  for   d=1   to   DD   '增加10个电机  
  Rs.AddNew    
  rs("code")=f(a,2)   &   b   &   f(c,4)   &   f(d,5)  
  rs("name")="零件"   &   f(a,2)   &   b   &   f(c,4)   &   f(d,5)  
  next  
  next  
  next  
  next  
  Rs.Update  
  Rs.Close  
  Cn.Close  
  set   rs=nothing  
  set   cn=nothing  
  function   f(x,y)  
  f=cstr(x)  
  do   while   len(f)<y  
  f="0"   &   f  
  loop  
  end   function  
  %>Top

24 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-07 16:09:50 得分 0

如果4级分别用3个iframe能更快些!Top

25 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-07 16:10:54 得分 0

1万条记录还是第一种快!Top

26 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-07 16:23:49 得分 0

9万条也是第一种快!  
  建议用第一种!!Top

27 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-07 16:27:32 得分 0

哦,错了,9万条两种都很慢,看来我还要改Top

28 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-07 17:38:11 得分 0

哈哈,终于完成,四级连动完美版,access数据库,速度非常快!!!  
  两个小文件总共代码不超过80行!  
  文件一:ss3.htm  
  <form   id=f   name=f>  
  生产线名称:  
  <SELECT   id=s1   name=s1   onchange="vbs:change   me"></SELECT>  
  大   类   名称:  
  <SELECT   id=s2   name=s2   onchange="vbs:change   me"></SELECT>  
  小   类   名称:  
  <SELECT   id=s3   name=s3   onchange="vbs:change   me"></SELECT>  
  物   品   名称:<SELECT   id=s4   name=s4   ></SELECT>  
  </form>  
  <IFRAME   id=ifr    
  src="Q.asp?x=0&first=000000000000"  
    width=0   height=0>   </IFRAME>  
  <SCRIPT   LANGUAGE=vbscript   >  
  Sub   change(obj)  
  n=right(obj.id,1)'n是级数  
  ifr.location.href="Q.asp?x="   &   n   &   "&first="   &   obj.value  
  End   Sub  
  </SCRIPT>  
   
   
   
  文件二:Q.asp  
   
   
   
  <%  
  Dim   Cn,Rs  
  Dim   SQL,StrDSN  
  dim   L:L=12'编码总长度  
  dim   first:first=string(L,"0")    
  a=array(0,2,1,4,5)  
  Set   cn=Server.CreateObject("ADODB.connection")  
  Set   Rs   =   Server.CreateObject("ADODB.Recordset")  
  StrDSN   =   "Driver={Microsoft   Access   Driver   (*.mdb)};   DBQ="    
  StrDSN   =   StrDSN   &   Server.MapPath("db4.mdb")  
  Cn.Open   strDSN  
  x=cint(Request("x"))+1  
  first=trim(Request("first"))  
  sub   addfirst(x)  
  dim   m:m=0'm代表祖宗字串的长度,假设根节点是12个0  
  for   i=0   to   x-1  
  m=m+a(i)  
  next  
  SQL="select   *   from   tb   where   code   like   '"   &   left(first,m)       &   string(a(x),"_")     &   string(L-m-a(x),"0")   &   "'   and   code<>'"   &   first     &   "'"  
  Rs.Open   SQL,cn,3,2  
  if   Rs.RecordCount>1   then  
  first=rs("code")  
  do   while   not   Rs.EOF%>d.Add   "<%=rs("code")%>",   "<%=rs("name")%>"  
  <%  
  Rs.MoveNext  
  loop  
  end   if  
  Rs.Close  
  end   sub  
  %>  
  <SCRIPT   LANGUAGE=vbscript   >  
  Dim   d,o     '   创建对象变量。  
  Set   d   =   CreateObject("Scripting.Dictionary")  
  <%addfirst   x%>  
  dim   x:x=<%=x%>  
  dim   first:first="<%=first%>"  
  remove   x '移除    
  addo   x '增加  
  sub   remove(x)'移除  
  for   each   ooo   in   eval("parent.f.S"   &   x   &   ".options")  
  execScript   "parent.f.S"   &   x   &   ".remove   "   &   ooo.index,"vbs"  
  next  
  end   sub  
  sub   addo(x) '增加  
    for   each   code   in   d.Keys  
  set   o=document.createElement("option")  
  o.text=d.Item(code)  
  o.value=code  
  execScript   "parent.f.S"   &   x   &   ".add   o","vbs"  
    next  
  end   sub  
  if   x   <4   and   eval("parent.f.S"   &   x   &   ".length")<>0   then   window.location.href="Q.asp?x="   &   x   &   "&first="   &   first  
  </SCRIPT>  
  <%Cn.Close  
  set   rs=nothing  
  set   cn=nothing%>  
   
  Top

29 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-07 17:38:46 得分 0

9万条记录运行如飞!!Top

30 楼possible_Y(████本人签名需要刮开,方可看到 )回复于 2003-12-07 18:01:35 得分 0

哇塞……  
   
  哈哈Top

31 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-07 18:11:21 得分 0

说明:  
   
  哈哈,终于完成,我做的四级连动完美版,access数据库,速度非常快!!!  
  两个小文件总共代码一共不超过80行!9万条记录运行如飞!!  
  问题起因:  
  http://expert.csdn.net/Expert/topic/2523/2523437.xml?temp=.5512812  
  我马上要升两星了,还差一百分,估计是明天  
  升完后我也要忙工作了  
  不能再沉迷在这里了  
  哎,舍不得这里给我这样的快乐和成就感!  
  哈哈,终于完成  
  我敢说csdn里面数据库下拉列表我的代码最短!  
  完全vbs,无特殊组件  
   
  思路:  
  数据库db4.mdb  
  一个表TB,三个字段  
  id         code               name  
  1   |010000000000|XX生产线  
  2   |011000000000|XX设备  
  3   |012000000000|备件  
  4   |011000100000|电机  
  5   |011000100001|直流电机  
  6   |020000000000|YY生产线  
  8   |021000000000|YY设备  
  9   |022000000000|YY备件  
  10|021000100000|YY电机  
  11|021000100001|交流电机  
  12|030000000000|XX生产线  
  13|031000000000|XX设备  
  14|032000000000|备件  
  15|031000100000|电机  
  16|031000100001|直流电机  
  17|040000000000|zz生产线  
  18|041000000000|zz设备  
  19|042000000000|zz备件  
  20|041000100000|zz电机  
  21|041000100001|zz直流电机  
  22|050000000000|aa生产线  
  23|051000000000|aa设备  
  24|052000000000|aa备件  
  25|051000100000|aa电机  
  26|051000100001|aa直流电机  
   
  数据库中有编码和名称,  
  编码是十二位的字符,  
  前两位为生产线名称代码,  
  第三位是大类,  
  第四位到第七位为小类名称,  
  最后五位是物品名称。  
   
  首先声明这么设计数据库实际会给编程带来麻烦,  
  也不适合海量数据。  
  具体先不探讨。  
  但是既然数据库不能更改,那么说一下思路:  
   
  1,第一步:  
  数据量大,必须考虑异步调用,采用隐藏iframe的办法  
  前三个每次change事件刷新这个iframe  
  <SELECT   id=s1   name=s1   onchange="vbs:change   me"></SELECT>  
  。。。  
  ifr.location.href="Q.asp?x="   &   n   &   "&first="   &   obj.value  
   
   
  2,第二步:  
   
  动态增加option的原理  
  set   opt=document.createElement("option")  
  opt.text="text"  
  opt.value="value"  
  form1.select1.add   opt  
   
  删除  
  for   each   opt   in   form1.select1.options  
  form1.select1.remove   opt.index  
  next  
  在iframe里面偷换parent里面的显示  
   
   
  3,第三步:  
  因为是连动,那么iframe每次刷新都要继续向后刷新,直到最后  
  if   x   <4   and   eval("parent.f.S"   &   x   &   ".length")<>0   then   window.location.href="Q.asp?x="   &   x   &   "&first="   &   first  
  Top

32 楼nbstoneboy(stoneboy)回复于 2003-12-07 18:23:03 得分 0

关注Top

33 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-07 18:23:37 得分 0

下载:http://www.ymdg.com/s4.rarTop

34 楼monkeys(Myron.Liu)回复于 2003-12-07 18:42:44 得分 0

好人Top

35 楼Ngod(天泽)回复于 2003-12-09 13:07:51 得分 0

感动中.......  
  Top

36 楼xhbmj(《升龙道》)回复于 2003-12-09 16:09:07 得分 0

感谢笨狼的热心Top

37 楼netfly2003(netfly)回复于 2004-02-24 18:02:08 得分 0

我們現在用的都五級連動的,Top

相关问题

  • 哪位大侠能帮忙把这个联动选择头像的给改成c#的,我改了半天还是不行。
  • 多种选择方式的二级联动菜单如何写?
  • 又一个选择框联动的问题,请求解救度
  • 还是联动,又是JavaScipt惹祸.
  • 还是关于联动的问题
  • 无刷新二级联动菜单的用户选择值获取问题
  • 联动
  • 你会选择哪种方案?
  • 困惑,报表方案的选择?
  • 在datalist里绑定多个dropdownlist,怎么能够选择一个触发另一个呢,实现联动效果

关键词

  • .net
  • rs

得分解答快速导航

  • 帖主:Ngod
  • superdullwolf

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo