0

我试图为菜单创建一个嵌套循环,但它返回错误。请有人可以帮我解决这个问题。甚至确定循环出错的地方。

Error Type:
Microsoft VBScript compilation (0x800A040E)
'loop' without 'do'
/asp/default.asp, line 64
loop until RS.EOF

编码

msql = "SELECT * FROM tblMenu ORDER BY [link_position] ASC"
Set RS = Server.CreateObject("ADODB.Recordset")
Set RSsub = Server.CreateObject("ADODB.Recordset")
RS.Open msql, Conn, 1,3
RSsub.Open msql

If Not RS.EOF Then
    Do
        Response.Write "<li><a href="""& RS("link")&""" title ="""& RS("link_title")&""">"& RS("link_name") &"</a>"

        If NOT RSsub.EOF Then
            Response.Write("<ul>" & vbcrlf)
            Do While NOT RSsub.EOF
                Response.Write(RSsub("sub_menu") & vbcrlf)
                RSsub.MoveNext
            Loop
            Response.Write("</ul>" & vbcrlf)
            RSsub.Close

            Response.Write("</li>" & vbcrlf)        
            RS.MoveNext
    loop until RS.EOF
End if

预期产出

<li><a href="some-link" title="">Record from DB</a>
    <ul>
        <li><a href="some-link">Records from DB</a></li>
    </ul>
</li>
4

2 回答 2

4

你失踪End IfIf NOT RSsub.EOF Then

于 2013-06-29T06:06:57.207 回答
2

几个语法错误。这是清理后的代码。

    msql = "SELECT * FROM tblMenu ORDER BY [link_position] ASC"
    RS = Server.CreateObject("ADODB.Recordset")
    RSsub = Server.CreateObject("ADODB.Recordset")
    RS.Open(msql, Conn, 1, 3)
    RSsub.Open(msql)

    If Not RS.EOF Then
        Do
            Response.Write("<li><a href=""" & RS("link") & """ title =""" & RS("link_title") & """>" & RS("link_name") & "</a>")

            If Not RSsub.EOF Then
                Response.Write("<ul>" & vbcrlf)
                Do While Not RSsub.EOF
                    Response.Write(RSsub("sub_menu") & vbcrlf)
                    RSsub.MoveNext()
                Loop
                Response.Write("</ul>" & vbcrlf)
                RSsub.Close()
            End If

            Response.Write("</li>" & vbcrlf)
            RS.MoveNext()
        Loop Until RS.EOF
    End If

更新 :

根据您发布的图片,您表中的 sub_menu 只是一堆 html li 元素,您可以直接附加到响应中。您不需要单独的记录集来读取子菜单。试试这个代码:

msql = "SELECT * FROM tblMenu ORDER BY [link_position] ASC"
RS = Server.CreateObject("ADODB.Recordset")
RS.Open(msql, Conn, 1, 3)

Do
    Response.Write("<li><a href=""" & RS("link") & """ title =""" & RS("link_title") & """>" & RS("link_name") & "</a>" & vbcrlf)

    If Not String.IsNullOrEmpy(RS("sub_menu")) Then
        Response.Write("<ul class=""sub-menu"">" & vbcrlf)
        Response.Write(RS("sub_menu") & vbcrlf)
        Response.Write("</ul>" & vbcrlf)
    End If
    Response.Write("</li>" & vbcrlf)
    RS.MoveNext()
Loop Until RS.EOF
于 2013-06-29T06:09:47.457 回答