注册 登录
编程论坛 ASP技术论坛

求助:实现ASP——ACCESS的复合查询。

atian 发布于 2010-05-15 12:22, 1046 次点击
求助:
表结构如下:
代码(A)    名称(B)    上级代码(C)      级别(D)
1002         银行存款          0 表示无上级   1
1002001      工商银行          1002           2
1002001001   广东分行          1002001        3
1002001002   江西分行          1002001        3
1002002      农业银行          1002           2
1002002001   广东分行          1002002        3
1002002002   福建分行          1002002        3


如何写一查询语句,得到这种效果:

输入A字段代码,B字段名称显示为多级的,例如

      A                      B

若输入:1002001      则显示为 银行存款-工商银行
若输入:1002002002   则显示为 银行存款-农业银行-福建分行
若输入:1002         则显示为银行存款
若输入:1002001001   则显示为银行存款-工商银行-广东分行

请贴相关代码。多谢。

只有本站会员才能查看附件,请 登录


[ 本帖最后由 atian 于 2010-5-15 17:25 编辑 ]
7 回复
#2
hams2010-05-15 15:28
a=1002001
b=""
i=2
dim rootRs
Do While i>1
sql="SELECT * FROM 表名 WHERE 代码(A)="&a
Set rootRs=Server.CreateObject("ADODB.RecordSet")
rootRs.Open sql,conn,1,1
If rootRs.Bof OR rootRs.Eof Then
else
   i=rootrs("级别(D)")
   b=rootrs("名称(B)")&"-"&b
   a=rootrs("上级代码(C)")
end if
Loop
if len(b)>1 then b=Left(b,len(b)-1)
response.write b
#3
gupiao1752010-05-15 15:34
   ABCD前面的中文是字段名吗?还有你就一个表,而且表结构就4个字段,总感觉这样设计很不合理!复合多表,至少也有2个表的数据,而你只有一个表!
如果要实现你的效果,并且只用一个表,也可达到你要的效果!
   思路规律就是:对从客户端输入的字符串1002001001进行分组:1002,1002001,1002001001分成这样3个数字组!然后分别在数据库里查找代码A字段等于这3个数字组的名称B字段,最后把结果进行组合就是你要的效果!
获取字符分组的FUN如下:
function splitt(str)
length=len(str)
select case length
case 4: splitt=str
case 7:
  dim arr(2)
  arr(0)=left(str,4)
  arr(1)=right(str,3)
  splitt=arr
case 10:
   dim arr1(3)
  arr1(0)=left(str,4)
  arr1(1)=mid(str,5,3)
  arr1(2)=right(str,3)
  splitt=arr1
end select
end function
mname=request.form("mname")'这个是从客户端表单查询文本框里获取的数据!下面是处理!
mname=splitt(mname)
if isarray(mname) then
for i=0 to ubound(mname)
response.write(mname(i)&"<br>")
执行SQL语句。。。省略,看数组程度,至少执行2次!
next
else
response.write mname
执行SQL语句。。。省略,仅执行1次!
end if
#4
gupiao1752010-05-15 15:43
补充:客户端JS需要做一个限制,只允许输入,4。7。10位的数字!如下:
<input name="mname" type="text" id="mname" onblur="check(this.value)">
<script>
function check(str)
{
var re=/^(\d{4}|\d{7}|\d{10})$/g;
var cj=re.test(str);
if (!cj)
{alert("输入的非数字或不满足4,7,10位的查询要求!");
return false;
}
}
</script>

#5
hams2010-05-15 17:22
也许人家输入的不止4。7。10位的数字呢

查表好了,没有就结束
#6
atian2010-05-15 17:32
还是没有实现这种效果。我贴图在一楼
#7
gupiao1752010-05-15 18:44
还是那句老话,如果还看不懂或者搞不定,就发源文件上来,并在里面建立一个TXT文件,详细说明你的要求和问题!谁有时间改好了就再发上来并标注在哪有改动即可!
#8
atian2010-05-16 14:51
那个属不属于多级联动的呀。或都有没有多级联动的代码。要ASP的,不要JS的
1