Avatar billede tchami Nybegynder
20. januar 2003 - 18:55 Der er 3 kommentarer og
1 løsning

Loope i array

Hej

Jeg har et array som er genereret ud fra et database udtræk med getrows.  Dette ser sådan ud:

strMenuSQL = "SELECT menuID,mName,mLink,parent from cam_menu ORDER BY parent, menuID ASC"

'## Opretter MenuRS
Set MenuRS = Conn.Execute(strMenuSQL)

'## Smider indholdet af MenuRS ind i et array vha. getRows
If NOT MenuRS.EOF Then
  arrMenuRS = MenuRS.GetRows()
  max = Ubound(arrMenuRS,2)
Else
  max = 0
End If

Dernæst kan jeg så loope med denne Do Loop:

row = 0
Do While (row<=max) '## Looper rækker

'## Definerer variabler
menuID = arrMenuRS(0,row)
mName = arrMenuRS(1,row)
mLink = arrMenuRS(2,row)
If(mLink="null") Then mLink=""
parent = arrMenuRS(3,row)

If (parent<>0) Then
  parent = parent
Else
  parent=""
End If

'## Udskriv
Response.write "<strong>menuID:</strong> " & menuID & " <strong>parent:</strong> " & parent & " <strong>Name:</strong> " & mName & "<br>" & vbcrlf

row = row + 1

Loop

Dette resulterer i følgende output:

menuID: 1 parent: Name: Top element1
menuID: 2 parent: Name: Top element2
menuID: 9 parent: Name: Top Element 3
menuID: 3 parent: 1 Name: Sub element1
menuID: 4 parent: 1 Name: Sub element2
menuID: 5 parent: 2 Name: Sub element1
menuID: 6 parent: 2 Name: Sub element2
menuID: 7 parent: 4 Name: Sub element1
menuID: 13 parent: 4 Name: Sub element2
menuID: 8 parent: 7 Name: Sub element1
menuID: 12 parent: 7 Name: Sub element2

Det er også fint nok sådan da, men jeg ville gerne ha' det skrevet ud så den skrev menuID efterfulgt af de parent der svarede til menuID, altså f.eks. således:

menuID: 1 parent: Name: Top element1
menuID: 3 parent: 1 Name: Sub element1
menuID: 4 parent: 1 Name: Sub element2
menuID: 7 parent: 4 Name: Sub element1
menuID: 8 parent: 7 Name: Sub element1
menuID: 12 parent: 7 Name: Sub element2
menuID: 13 parent: 4 Name: Sub element2
menuID: 2 parent: Name: Top element2
menuID: 5 parent: 2 Name: Sub element1
menuID: 6 parent: 2 Name: Sub element2
menuID: 9 parent: Name: Top Element 3

Er der nogle der har en god idé til dette? Jeg har set mig blind på løsningen i hvert fald :)

Mvh. Tchami
Avatar billede hossein Nybegynder
21. januar 2003 - 11:19 #1
kig på dette besvarelse hvor jeg bruger getrow methoden + en array i en loop. håber det hjælper.

vh  hossein
Avatar billede hossein Nybegynder
21. januar 2003 - 11:22 #2
den kommentar: 31/12-2002 20:27:31
Avatar billede tchami Nybegynder
22. januar 2003 - 10:25 #3
Jeg fandt selv ud af det. Det endte med at komme til at se sådan ud:

Sub subInsertNewMenuItem

  Call subDesignInsertNewMenuItemTop

  '## Erklær variabler
  Dim Conn,strMenuSQL,MenuRS,arrMenuRS, arrMaxSize, arrRow, intPid, strMenuName, strMenuLink, intParentPid

  '## Åbner databasen
  Set Conn = Createobject("ADODB.Connection")
  Call Conn.Open(strConnectionString)

  '## Vælg alle hovedpunkter fra menuen
  strMenuSQL = "SELECT * FROM cam_menu WHERE parent_pid = 0"

  Set MenuRS = Server.CreateObject("ADODB.Recordset")

  '## Cache 25 records i hukommelsen
  MenuRS.CacheSize = 25
  '## Åbner en statisk cursor
  MenuRS.CursorType = 3
  '## Låser records når Update method'en bliver kaldt
  MenuRS.LockType = 3

  '## Opretter MenuRS
  Set MenuRS = Conn.Execute(strMenuSQL)

  '## Smider indholdet af MenuRS ind i et array vha. getarrRows hvis MenuRS ikke er tom
  If NOT MenuRS.EOF Then
        arrMenuRS = MenuRS.GetRows()
        arrMaxSize = Ubound(arrMenuRS)
  Else
        arrMaxSize = 0
  End If

  '## Lukker MenuRS da vi allerede har hentet hvad vi skal bruge ned i arrMenuRS
  MenuRS.close()
  Set MenuRS = Nothing

    arrRow = 0

    '## Looper rækker indtil arrMaxSize er større eller lig arrRow
    Do While arrRow <= arrMaxSize

        '## Tildeler værdier i arrMenuRS til variabler
        intPid = arrMenuRS(0,arrRow)
        strMenuName = arrMenuRS(1,arrRow)
        strMenuLink = arrMenuRS(2,arrRow)
            If strMenuLink = "null" Then strMenuLink = ""
        intParentPid = arrMenuRS(3,arrRow)
            If intParentPid <> 0 Then
                    intParentPid = intParentPid
            Else
                    intParentPid = ""
            End If

            '## Udskriv oversigt
            Response.write strMenuName & funcInsertImageLevels(InsertImages) & "<br>" & vbcrlf

            '## Kald subproceder hvor sub menupunkter udskrives
            Call subShowSubMenu(intPid, intParentPid, 0)

    arrRow = arrRow + 1

    Loop

    '## Luk database connection
    Conn.Close
    Set Conn = Nothing

    Call subDesignInsertNewMenuItemBottom

End Sub

Sub subShowSubMenu (ByRef varMenuID, parentID, Level)

    strSubMenuItemsSQL = "SELECT * FROM cam_menu WHERE parent_pid = " & varMenuID & ""
    Set SubMenuRS = Conn.Execute(strSubMenuItemsSQL)

    Do until SubMenuRS.EOF

        intLevel = 0
        Response.Write "<img src=""" & strPathAdmin & "/img/space.gif"" width=""" & Level*20 & """ height=""1"">"
        Response.Write "- " & SubMenuRS("menu_name") & funcInsertImageLevels(InsertImages) & "<br>" & vbCrlf
        Call subShowSubMenu(SubMenuRS("pid"), SubMenuRS("parent_pid"), Level+1)

    SubMenuRS.MoveNext

    Loop

    SubMenuRS.Close
    Set SubMenuRS = Nothing

End Sub

Muligvis ikke den pæneste løsning, men det virker :)
Avatar billede tchami Nybegynder
08. september 2003 - 17:59 #4
Lukker..
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