主题:  问一个服务器行为中循环的问题

mantou_5d

职务:普通成员
等级:3
金币:1.0
发贴:437
注册:2002/10/27 0:08:41
#12003/9/1 21:30:20
问一个问题,双重循环,
dwmx中的repeate****(有版本翻译为重复区域)想必大家都会用了吧?就是先选中一段,服务器行为/重复区域,然后选择重复多少次。

我现在想做这样的效果:

亚洲
中国 日本 韩国 泰国 印度

欧洲
英国 法国 瑞典 挪威 德国

美洲
巴西 智利 加拿大 墨西哥 美国

非洲
南非 埃及 尼日利亚 索马里

数据库的设置是这样的:
有两个表,一个是zhou,一个是guojia

表zhou有3个字段
id 自动编号
zhouming 字符
jianjie 备注
表 guojia

表guojia有4个字段
id 自动编号
guojiaming 字符
zhou 数字
jianjie 备注

我不想每一个洲循环一遍,那样就失去了程序的意义了,而且原来我的想法也不是这样,远比这个复杂,我只是举了这个例子而已。我不是浮躁的人,我到处都找不到这方面的资料,精华里也没有。一些所谓的精通asp之类的书更是连皮毛都没够到,所以才在这里问,希望高手解答,非常感谢。
(不好意思,写错了,国家少了一个字段)

编辑历史:[这消息被mantou编辑过(编辑时间2003-09-01 22:15:52)]


缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
注册:2004/1/14 19:14:47
#22003/9/1 21:42:35
循环州
|___循环国家


注意在循环国家时要即使关闭记录集,就是rs.close()需要在循环洲以内



mantou_5d

职务:普通成员
等级:3
金币:1.0
发贴:437
注册:2002/10/27 0:08:41
#32003/9/1 22:16:23
不好意思,国家的表少了一个字段,请您再看看!



缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
注册:2004/1/14 19:14:47
#42003/9/1 22:53:09
不管少没有少,原理是这样



Such a lovely place

职务:普通成员
等级:2
金币:10.0
发贴:573
注册:2001/11/4 21:15:56
#52003/9/1 23:02:01
我想请教一下allinhands:
如果不及时关闭国家纪录集,我想问题也不是很大吧?

while not rs洲.eof
dim rs国家
rs国家.source="select * from tb2 where zhou= rs洲.id"
while not rs国家.eof
response.write"国家”
rs国家.movenext()
wend
rs洲.movenext()
wend
rs洲.Close()
Set rs洲 = Nothing
rs国家.Close()
Set rs国家 = Nothing

代码大致是这样,因为每个洲的国家循环完毕,重新定义国家记录集,记录集名称都是一样的,也就是说后一记录集变量会覆盖前一记录集变量,对服务器不会造成额外负担,我是这么理解的,不知道对不对,请指教。谢谢。



mantou_5d

职务:普通成员
等级:3
金币:1.0
发贴:437
注册:2002/10/27 0:08:41
#62003/9/1 23:42:28
国家的记录集怎么写?怎么筛选?WHERE ……再怎么写?



Such a lovely place

职务:普通成员
等级:2
金币:10.0
发贴:573
注册:2001/11/4 21:15:56
#72003/9/2 15:13:12
呵呵。这要谈到数据库两张表了:
洲表字段:zhouid zhouming jianjie
国家表字段:guojiaid guojiaming jianjie zhouid
其中国家表字段zhouid要为长整型,并在关系里把洲表zhouid和国家表zhouid两个同名字段设为“一对多”对应关系。ok,这是前奏,到这步,数据库设置完毕。

接下来就是建造记录集,在dw-mx建recordset1为洲,建recordset2为国家。选择服务器重复行为,分别加在两个记录集上,假设都为显示全部记录。转到代码编辑模式下,修改为:
<%
While ((Repeat1__numRows <> 0) AND (NOT Recordset1.EOF))
Dim Recordset2
Dim Recordset2_numRows

Set Recordset2 = Server.CreateObject("ADODB.Recordset")
Recordset2.ActiveConnection = MM_XXXXXXX_STRING
Recordset2.Source = "SELECT * FROM tb2 where zhouid="&Recordset1.Fields.Item("zhouid").value&""
Recordset2.CursorType = 0
Recordset2.CursorLocation = 2
Recordset2.LockType = 1
Recordset2.Open()

Recordset2_numRows = 0

Dim Repeat2__numRows
Dim Repeat2__index

Repeat2__numRows = -1
Repeat2__index = 0
Recordset2_numRows = Recordset2_numRows + Repeat2__numRows
%>

<%=(Recordset1.Fields.Item("zhouming").value)%>
<%
While ((Repeat2__numRows <> 0) AND (NOT Recordset2.EOF))
%>
<%=(Recordset2.Fields.Item("guojiaming").value)%>
<%
Repeat2__index=Repeat2__index+1
Repeat2__numRows=Repeat2__numRows-1
Recordset2.MoveNext()
Wend
%>
<%
Repeat1__index=Repeat1__index+1
Repeat1__numRows=Repeat1__numRows-1
Recordset1.MoveNext()
Wend
%>

一 切 ok 了……

编辑历史:[这消息被b小调雨后编辑过(编辑时间2003-09-02 15:14:39)]