经典的ASP递归函数

时间:2010-05-05 12:18:54

标签: asp-classic recursion vbscript ado

我没有做过任何经典的ASP几年,现在试图从c#重新进入它是不可能的!我有一个递归函数,非常简单地应该根据传递给函数的值查询数据库,一旦函数停​​止调用自身它返回记录集....但是我得到旧错误'80020009'消息。我已经在函数之外声明了记录集。

任何人都会以我的方式看到错误吗?

Dim objRsTmp

Function buildList(intParentGroupID)

 Set objRsTmp = Server.CreateObject("Adodb.Recordset")
 SQLCommand = "SELECT * FROM tblGroups WHERE tblGroups.intParentGroupID = " & intParentGroupID & ";"
 objRsTmp.Open SQLCommand, strConnection, 3, 3

 If Not objRsTmp.Eof Then

  While Not objRsTmp.Eof

   Response.Write(objRsTmp("strGroup") & "<br />")

   buildList(objRsTmp("intID"))

   objRsTmp.MoveNext

  Wend

 End If

 Set buildList = objRsTmp

 '#objRsTmp.Close()
 'Set objRsTmp = Nothing

End Function

Set objRs = buildList(0)

If Not objRs.Eof Then

 Response.Write("There are records")

 While Not objRs.Eof

  For Each oFld in objRs.Fields
   Response.Write(oFld.Name & ": " & oFld.Value & ",")
  next

  Response.Write("<br />")

  objRs.MoveNext

 Wend

End If

非常感谢任何协助。

此致 人

1 个答案:

答案 0 :(得分:2)

全局范围内有一个objRsTmp实例,这意味着它在堆栈中的每个buildList()之间共享;因此,无论何时递归到buildList()并致电objRsTmp.Open(),您都会导致堆叠中的先前buildList()使用新的objRsTmp

我不认为这就像你循环它的行一样,好像每个buildList()都有自己的结果集。

要做到这一点,你必须使记录集本地...但是,这是一种非常昂贵的方法,特别是因为每次迭代也创建了一个新的连接对象。

根据您的架构/ rdbms,通常采用单一查询方式来提取一组与层次相关的记录。