Классический ASP Рекурсивная функция - PullRequest
0 голосов
/ 05 мая 2010

Я не делал ни одного классического 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

Любая помощь будет принята с благодарностью.

С уважением, Al

1 Ответ

2 голосов
/ 05 мая 2010

В глобальной области видимости есть один экземпляр objRsTmp, что означает его общий доступ к каждому buildList() в стеке; поэтому всякий раз, когда вы набираете номер buildList() и вызываете objRsTmp.Open(), вы заставляете предыдущий buildList() в стеке использовать новый objRsTmp.

Я не думаю, что это то, что вы после того, как зациклили свои строки, как будто у каждого buildList() был свой набор результатов.

Для этого вам нужно будет сделать набор записей локальным ... однако это * очень дорогой способ сделать это, особенно потому, что каждая итерация также создает новый объект соединения.

В зависимости от вашей схемы / rdbms обычно существует один способ запроса набора иерархически связанных записей.

...