Vanwege een eerder gesloten topic (http://gathering.tweakers.net/forum/list_messages/992084) nogmaals een poging.
De applicatie bestaat uit 2 delen, de database en het client gedeelte.
De database wordt aangesproken om een menu op te bouwen in de applicatie. Het menu bouwt zich op doormiddel van een kolom welke het vorige menu item opgeeft. En dit geeft als voordeel dat je onbeperkt diep kan gaan, met een redelijk overzichtelijk geheel.
Het probleem is echter wanneer ik een hoofditem/rootitem ga verwijderen, laat hij (logischer wijs) de rest van de items staan, dit houd in dat
1)de database 'volloopt' (en daardoor onoverzichtelijk(er) word)
2)wanneer ik een nieuw hoofd/root item aanmaak hij alle 'oude items' weer heeft onder het nieuwe hoofditem.
Wat er dus moet gebeuren is dat er dus een functie is/komt die er voor zorgt dat ook die subnodes/subitems worden verwijderd. Hier heb ik al wel naar gekeken, en ook een stukje code voor geschreven.
Ik zie zelf alleen niet echt waar het probleem zit.
Ik heb de code door de debugger gehaald en ' #1 tot ' 1# gaat perfect. Alleen wanneer ik de functie opnieuw aanspreek, loopt de boel de soep in.
Ik heb commentaar er nu bijgezet, in de hoop dat dit nu duidelijk genoeg is.
In principe gaat het eerste gedeelte dus goed, alleen wanneer hij die recursieve functie aanspreekt blijft hij loopen.
Dus mijn voornaamste vraag, zet ik die recursieve link (naar de procedure) op/naar de verkeerde plek, of maak ik programmeer-technisch een grote fout ? Het nadeel is dat je na een 1.5 uur kijken naar de zelfde code je uiteindelijk zelf ook door de bomen het bos niet meer ziet.
Ik hoop dat jullie me in dit geval wel kunnen helpen, en dat dit topic nu niet wordt gesloten.
Het mag dan wel een lang topic zijn, maar ik geef nu toch veel informatie. Heb tevens de 'onnozele' code weggehaald (volgens jou) maar anders kan ik me Watches niet in de gaten houden (dat laaste stukje code, had ik een breakpoint op).
De applicatie bestaat uit 2 delen, de database en het client gedeelte.
De database wordt aangesproken om een menu op te bouwen in de applicatie. Het menu bouwt zich op doormiddel van een kolom welke het vorige menu item opgeeft. En dit geeft als voordeel dat je onbeperkt diep kan gaan, met een redelijk overzichtelijk geheel.
Het probleem is echter wanneer ik een hoofditem/rootitem ga verwijderen, laat hij (logischer wijs) de rest van de items staan, dit houd in dat
1)de database 'volloopt' (en daardoor onoverzichtelijk(er) word)
2)wanneer ik een nieuw hoofd/root item aanmaak hij alle 'oude items' weer heeft onder het nieuwe hoofditem.
Wat er dus moet gebeuren is dat er dus een functie is/komt die er voor zorgt dat ook die subnodes/subitems worden verwijderd. Hier heb ik al wel naar gekeken, en ook een stukje code voor geschreven.
Ik zie zelf alleen niet echt waar het probleem zit.
Ik heb de code door de debugger gehaald en ' #1 tot ' 1# gaat perfect. Alleen wanneer ik de functie opnieuw aanspreek, loopt de boel de soep in.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| ' #1
Sub subRecursief(ByVal intMenunr As Integer)
Dim dbCount As Integer
' leeghalen van de dataset (om 'rare' dingen te voorkomen)
ds.Clear()
' functie om de database gegevens uit te laden, en
' hier de records uit te halen welke ik later moet verwijderen.
' intMenunr is het "subitem" in dit geval, en die wordt dus ook meegegeven in deze
' query om later het "menunummer" uit de query te krijgen.
dbQuery(intMenunr)
dbCount = ds.Tables("table1").Rows.Count - 1
' als er geen subitems zijn in de dataset, returned hij -1 hij moet wel het item
' toevoegen omdat hij anders het hoofditem in het vervolg stuk niet kan verwijderen.
If dbCount = -1 Then
arrList.Add(intMenunr)
Else
' stukje wat gegevens uit de dataset haalt, om daarna deze in de ArrayList
' (collection) te plaatsen om daarna de recursieve functie te starten welke dit
' herhaaldelijk blijft doen.
Dim dbrecord As Data.DataRow
Dim i As Integer
For i = 0 To dbCount
Try
dbrecord = ds.Tables("table1").Rows.Item(i)
intMenunr = CInt(dbrecord("menunummer"))
Try
arrList.Add(intMenunr)
Catch ex As Exception
System.Diagnostics.Debug.WriteLine(ex.Message)
End Try
'1#
subRecursief(intMenunr)
Catch ex As Exception
System.Diagnostics.Debug.WriteLine(ex.Message)
End Try
Next i
End If
End Sub |
Ik heb commentaar er nu bijgezet, in de hoop dat dit nu duidelijk genoeg is.
In principe gaat het eerste gedeelte dus goed, alleen wanneer hij die recursieve functie aanspreekt blijft hij loopen.
Dus mijn voornaamste vraag, zet ik die recursieve link (naar de procedure) op/naar de verkeerde plek, of maak ik programmeer-technisch een grote fout ? Het nadeel is dat je na een 1.5 uur kijken naar de zelfde code je uiteindelijk zelf ook door de bomen het bos niet meer ziet.
Ik hoop dat jullie me in dit geval wel kunnen helpen, en dat dit topic nu niet wordt gesloten.
Het mag dan wel een lang topic zijn, maar ik geef nu toch veel informatie. Heb tevens de 'onnozele' code weggehaald (volgens jou) maar anders kan ik me Watches niet in de gaten houden (dat laaste stukje code, had ik een breakpoint op).