Avatar billede weiland Nybegynder
21. august 2004 - 16:42 Der er 4 kommentarer og
1 løsning

Rekursiv funktion giver "Exception occured"

Jeg har en rekursiv funktion i et adresse-kartotek, som angiveligt skal undersøge om en gruppen eller dens undergrupper indeholder personer

Dim Tom

function members(AdressCategoryID)
    SQL = "SELECT AdressCategoryID FROM AdressCategory WHERE ParentAdressCategoryID = "& AdressCategoryID &""
    set rs = Myconn.Execute(SQL)
       
        do while not rs.EOF   
          members(rs("AdressCategoryID"))
          rs.movenext
        loop
          SQL2 = "SELECT AdressPropertiesID FROM AdressProperties WHERE AdressPropertiesAdressCategoryID_FK = "& AdressCategoryID &""
          Set rsPersons = Myconn.Execute(SQL2)
              if not rsPersons.eof then
              Tom = "No"
            end if                   
          rsPersons.Close
          Set rsPersons = Nothing
      rs.Close
      Set rs = Nothing
end function

members(AdressCategoryID)

if Tom = "No" then
    response.write "Der findes personer"
else
    response.write "Gruppen/grupperne er tomme"
end if

Men jeg får fejlen "Exception occured" og der henvises til linien "SQL2 = "SELECT AdressPropertiesID FROM ...."
Nogen der kan gennemskue problemet????
Avatar billede weiland Nybegynder
21. august 2004 - 17:04 #1
Måske skylder jeg at forklare, at jeg har 3 tabeller:

Adress
AdressCategory
AdressProperties

- hvor AdressProperties indholder felterne
AdressPropertiesID
AdressPropertiesAdressID_FK
AdressPropertiesAdressCategoryID_FK
Avatar billede weiland Nybegynder
21. august 2004 - 17:28 #2
Hmmm.... hvis jeg sætter funktionen ind i en anden side, virker det fint nok.

Der må være et eller andet på den nuværende ASP-side, som griber forstyrrende ind. Jeg kigger på det.
Avatar billede weiland Nybegynder
21. august 2004 - 18:37 #3
Nu virker det. Ved ikke hvorfor :-)
Avatar billede fennec Nybegynder
21. august 2004 - 18:43 #4
Det kan måske have noget at gøre med hvordan dine variabler bliver oprettet. Her tænker jeg specielt på din rs og rsPersons.

Første gang du kommer ind i funktionen henter du data ind i rs. Så laver du et/flere rekursiv kald til samme funktion, hvor du henter data ind i rs igen. Da rs er blevet oprettet globalt, betyder det at de første data du hentede ind i rs bliver overskrevet anden gang du kommer ind i funktionen. Du skal derfor oprette dine variabler i funktionen. Så eksistere de kun i funktionen, men der bliver oprettet en ny variabel hver gang funktionen bliver kaldt (selv om de hedder det samme).

function members(AdressCategoryID)
dim rs, rsPersons
  ...
  ...
end function

Er det sådan du kan have løst det????
Avatar billede weiland Nybegynder
21. august 2004 - 18:48 #5
Mange tak for din forklaring!

Jeg har ganske enkelte flyttet funktionen over i et nyt dokument, og nu virker det. Det var givet "noget" på den anden side, der "ødelagde" funktionen - undersøgte det ikke til bunds. Orker ikke i aften.

Men din forklaring er jo uhyre nyttig, næste gang jeg kæmper med noget tilsvarende :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester