Ms access ASP嵌套循环返回错误

Ms access ASP嵌套循环返回错误,ms-access,asp-classic,Ms Access,Asp Classic,我试图为菜单创建嵌套循环,但它返回错误。请有人帮我解决这个问题。甚至可以确定循环哪里出了问题 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.Cre

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

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
msql=“通过[link\u position]ASC从tblMenu订单中选择*
Set RS=Server.CreateObject(“ADODB.Recordset”)
Set RSsub=Server.CreateObject(“ADODB.Recordset”)
康涅狄格州1,3号开放式msql
RSsub.openmsql
如果不是卢比,那么
做
回答。写“
  • ” 如果不是RSsub.EOF,则 响应。写入(“
      ”&vbcrlf) 不使用RSsub.EOF时请勿使用 响应写入(RSsub(“子菜单”)和vbcrlf) RSsub.MoveNext 环 响应。写入(“
    ”&vbcrlf) RSsub.关闭 响应。写入(“
  • ”&vbcrlf) 下一个 循环至RS.EOF 如果结束
    预期产出

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

  • 对于
    如果不是RSsub.EOF,则缺少
    如果结束,则缺少
    如果不是RSsub.EOF,则缺少
    如果结束,则缺少
    几个语法错误。这是清理后的代码

        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
    
    msql=“通过[link\u position]ASC从tblMenu订单中选择*
    RS=Server.CreateObject(“ADODB.Recordset”)
    RSsub=Server.CreateObject(“ADODB.Recordset”)
    RS.Open(msql,康涅狄格州,1,3)
    RSsub.Open(msql)
    如果不是卢比,那么
    做
    回答。写(“
  • ”) 如果不是RSsub.EOF,则 响应。写入(“
      ”&vbcrlf) 不使用RSsub.EOF时请勿使用 响应写入(RSsub(“子菜单”)和vbcrlf) RSsub.MoveNext() 环 响应。写入(“
    ”&vbcrlf) RSsub.Close() 如果结束 响应。写入(“
  • ”&vbcrlf) R.MoveNext() 循环至RS.EOF 如果结束
    更新:

    根据您发布的图像,表中的sub_菜单只是一组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
    
    msql=“通过[link\u position]ASC从tblMenu订单中选择*
    RS=Server.CreateObject(“ADODB.Recordset”)
    RS.Open(msql,康涅狄格州,1,3)
    做
    响应。写入(“
  • ”&vbcrlf) 如果不是String.IsNullOrEmpy(RS(“子菜单”)),则 响应。写入(“
      ”&vbcrlf) 响应写入(RS(“子菜单”)和vbcrlf) 响应。写入(“
    ”&vbcrlf) 如果结束 响应。写入(“
  • ”&vbcrlf) R.MoveNext() 循环至RS.EOF
    几个语法错误。这是清理后的代码

        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
    
    msql=“通过[link\u position]ASC从tblMenu订单中选择*
    RS=Server.CreateObject(“ADODB.Recordset”)
    RSsub=Server.CreateObject(“ADODB.Recordset”)
    RS.Open(msql,康涅狄格州,1,3)
    RSsub.Open(msql)
    如果不是卢比,那么
    做
    回答。写(“
  • ”) 如果不是RSsub.EOF,则 响应。写入(“
      ”&vbcrlf) 不使用RSsub.EOF时请勿使用 响应写入(RSsub(“子菜单”)和vbcrlf) RSsub.MoveNext() 环 响应。写入(“
    ”&vbcrlf) RSsub.Close() 如果结束 响应。写入(“
  • ”&vbcrlf) R.MoveNext() 循环至RS.EOF 如果结束
    更新:

    根据您发布的图像,表中的sub_菜单只是一组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
    
    msql=“通过[link\u position]ASC从tblMenu订单中选择*
    RS=Server.CreateObject(“ADODB.Recordset”)
    RS.Open(msql,康涅狄格州,1,3)
    做
    响应。写入(“
  • ”&vbcrlf) 如果不是String.IsNullOrEmpy(RS(“子菜单”)),则 响应。写入(“
      ”&vbcrlf) 响应写入(RS(“子菜单”)和vbcrlf) 响应。写入(“
    ”&vbcrlf) 如果结束 响应。写入(“
  • ”&vbcrlf) R.MoveNext() 循环至RS.EOF
    感谢您清理代码,但它返回一个错误
    Microsoft VBScript编译(0x800A0414)在调用Sub/asp/default.asp,第46行第25列RS.Open(msql,Conn,1,3)时不能使用括号
    @YAQOOB Replace
    Response.Write(“&vbcrlf)
    Response.Write“”&vbcrlf
    @Dai我已经按照您的要求进行了更改,但是现在出现了此错误
    ADODB.Recordset(0x800A0E78)操作在对象关闭时是不允许的。
    @Dai如果我对
    RSsub.Close()
    进行了注释,页面将继续加载。。没有显示我修改了代码。我认为结束if的位置应该在
    RS.MoveNext()之前。您真的应该逐行检查代码,看看它是否在做它应该做的事情,以及错误会出现在哪里。感谢清理代码,但它返回一个错误
    Microsoft VBScript编译(0x800A0414)在调用Sub/asp/default.asp,第46行,第25列RS.Open(msql,Conn,1,3)时不能使用括号
    @YAQOOB Replace
    Response.Write(“&vbcrlf)
    带有
    Response.Write“”&vbcrlf
    @Dai我已经按照您的要求进行了更改,但现在出现了此错误
    ADODB.Recordset(0x800A0E78)操作,当对象关闭时不允许操作。
    @Dai如果我对
    RSsub.Close()进行了注释
    页面将继续加载。。没有显示我修改了代码。我认为结束if的位置应该在
    RS.MoveNext()之前。你真的应该逐行检查你的代码,看看它是否在做它应该做的事情,以及哪里会出现错误。谢谢,循环现在已经修复,但是输出破坏了整个菜单:(谢谢,循环现在已经修复,但是输出破坏了整个菜单:(