[VB.NET] Problemen Recursive Function

Pagina: 1
Acties:
  • 40 views sinds 30-01-2008

  • MikevanEngelen
  • Registratie: Mei 2001
  • Laatst online: 15-05 12:18
Mensen ik heb een probleem onder VB.NET (2005, maar ook onder 2002/2003) met een recursieve functie. Het probleem is dat ik waarschijnlijk een fout maak in de code waardoor de boel niet helemaal lekker gaat.

Wat ik wil is dat ik een array heb waar hij items in plaatst als ik een item wil verwijderen. Klinkt vrij wazig, zal het proberen uit te leggen:
- Heb een database met de tabel: tbl_sitecontent_menu, in deze tabel staan een aantal kolommen welke afhankelijk van mekaar zijn, op het gebied van menu structuur.

Het zit zo in mekaar:
5 Hoofditem
\ ___ 17 Subitem
\___ 28 Subitem
7 Hoofditem
\___ ** Subitem
\___ ** Subitem
Ze kunnen onbeperkt aantal diep zijn, en de tabel structuur zit als volgende inmekaar:
menunr omschrijving submenu
5 Hoofditem 0
7 Hoofditem 0
17 Subitem 5
28 Subitem 17

Nu wil ik, dat als men een hoofditem verwijderd dat automatisch de rest ook verwijderd wordt. Helaas gebeurd dit niet.
Ik heb het volgende geprobeerd, maar dit werkt niet:
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 Public dbcon As New ByteFX.Data.MySqlClient.MySqlConnection
 Public da As New ByteFX.Data.MySqlClient.MySqlDataAdapter
 Public ds As New Data.DataSet
 Dim arrList As New ArrayList

 Function dbOpen() As Boolean
 dbCon.ConnectionString = "server=www.logres.lan;database=elogres;uid=logres;pwd=******;"
 Try
  dbcon.Open()
  Return True
 Catch ex As Exception
  System.Diagnostics.Debug.WriteLine(ex.Message)
  Return False
 End Try
End Function

Function dbClose() As Boolean
 Try
  dbcon.Close()
  Return True
 Catch
  Return False
 End Try
End Function

Function dbQuery(ByVal intMenunr As Integer) As Boolean
 If Not dbOpen() Then
  MsgBox("Databeest error")
  dbClose()
 Else
  da.SelectCommand = New ByteFX.Data.MySqlClient.MySqlCommand("SELECT * FROM TBL_SITECONTENT_MENU WHERE SUBMENU='" & intMenunr & "'", dbcon)
  da.Fill(ds, "table1")
  dbClose()
 End If
dbClose()
End Function

Sub subRecursief(ByVal intMenunr As Integer)
Dim dbCount As Integer

 ds.Clear()
 dbQuery(intMenunr)
 dbCount = ds.Tables("table1").Rows.Count - 1

 If dbCount <= 0 Then
  arrList.Add(intMenunr)
 Else

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
   subRecursief(intMenunr)
  Catch ex As Exception
   System.Diagnostics.Debug.WriteLine(ex.Message)
  End Try
 Next i
End If
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerwijder.Click
subRecursief(4)
Dim i As Integer
i = 0
End Sub

Helaas kan ik niet aangeven wat er fout gaat, naar mijn weten is dit een goede recursieve functie, maar 't looped voornamelijk.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 11:43

gorgi_19

Kruimeltjes zijn weer op :9

En je verwacht nu dat wij voor jou gaan debuggen? :) Zet eens een aantal breakpoints neer in VS.Net, kijk welke waarde de variabelen hebben en op dat punt kan je de stacktrace wel volgen en kijken welke waarden er tussendoor ingevuld worden.

Sowieso is het geen gek idee om eens wat logischer je code op te bouwen; regel 70 / 71 is vrij nutteloos, regel 69 is een vaste waarde en een beetje documentatie van code is niet verkeerd :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Dit topic is gesloten.