14. september 2007 - 21:59
Der er
8 kommentarer og 1 løsning
Generér navigerbart hierarki
Fra en tekstfil har jeg udtrukket et hierarki, som ikke umiddelbart er navigérbart .... eller er det ?? Hierarkiet der således ud : (1) (1.1) (1.1.1) (1.1.2) (1.2) (1.2.1) (1.2.2) o.s.v... ( ialt ca. 15.000 linier ) Denne struktur skulle gerne kunne anvendes til at navigere rundt imellem en lang række data, således at jeg ved hjælp af dropdown bokse kan udvælge en hierarki-knude, og efterfølgende kun vælge blandt de underlagte emner/hierarkiknuder. Min egen umiddelbare løsning var at oprette en række ekstra kolonner, og her kronologisk opgøre hvilke linier der hører til hvilket sted i hierarkiet, dvs : H1 H2 OPRINDELIGT 1 (1) 1 1.1 (1.1) 1 1.1 (1.1.1) 1 1.1 (1.1.2) 1 1.1 (1.2) 1 1.2 (1.2.1) 1 1.2 (1.2.2) Det vil bare tege nogen tid med 15.000 poster, med mindre der er en metode til at gøre dette automatisk ... Det skal bemærkes, at der er 4 niveauer i hierarkier, dvs. laveste niveau er : (1.1.1.1) og det er her alle data allokeres til/fremsøges fra ... How to do ???
Annonceindlæg fra DE-CIX
15. september 2007 - 10:08
#1
Havent looked too closely at this but isnt it possible to make a select using the current node to find the ones directly under for example lets say you are on node 1.1 an dyou want those directly under. SELECT * FROM YouTable WHERE Left(SomeField, Len(CurrentNodeGoesHere)) = CurrentNodeGoesHere
15. september 2007 - 10:14
#2
Thats obviously not going to work, it will also return some at lower levels :o(
15. september 2007 - 10:16
#3
But you could alos make a function which you could us to find the level, or even have it in the record. To find the level in a function you need to to 1 to the number of . there are in the string
15. september 2007 - 11:15
#4
this function returns a node level, for exampel "1" would return 1 and "1.1" = 2 So from this table example ID Node 1 1 2 1.1 3 1.2 4 1.3 5 1.1.1 6 1.1.2 7 1.2.1 8 1.2.2 9 1.2.3 this SQL SELECT tblNodes.ID, tblNodes.Node FROM tblNodes WHERE (((NodeLevel([Node])-1)=NodeLevel("1.2")) AND ((Left([Node],Len("1.2")))="1.2")); returns ID Node 7 1.2.1 8 1.2.2 9 1.2.3
15. september 2007 - 12:35
#5
This function = Function NodeLevel(node As String) As Integer Dim i As Integer NodeLevel = 1 For i = 1 To Len(node) If Mid(node, i, 1) = "." Then NodeLevel = NodeLevel + 1 End If Next i End Function
26. september 2007 - 08:43
#6
Are we back off our holidays Lasse?
26. september 2007 - 08:57
#7
Hi Terry :-) Sorry, but I haven´t had the time to look ( new job ) at your proposal :-( ... but I am sure that it works perfectly ...
26. september 2007 - 09:01
#8
" ... at your proposal :-( "?
26. september 2007 - 09:19
#9
Meaning ... the application that I am working on has been put aside for later user
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser