Dynamisch een listview aanpassen voor MySQL tables

Status
Niet open voor verdere reacties.

radicalgamer

Gebruiker
Lid geworden
27 feb 2010
Berichten
595
Hoi,

Ik werk aan een tooltje om een tabel in een database (MySQL) uit te lezen, nadat ik een console application ervan had gemaakt wil ik eigenlijk ook een Windows Forms versie maken.
Tot dusver lukt dat aardig, ik kan verbinden met de server, alle database namen uitlezen, er eentje kiezen en daar alle tabel namen uitlezen.
Dan wil ik een tabel kiezen om uit te lezen en in een listview te tonen, maar dit programma moet voor meer dan 1 tabel werken, en het aantal columns van de listview kan dus veranderen, ook de namen ervan wisselen per tabel.
Nou lukt het om de columns te maken, en in de console versie lukt het alles uit te lezen, maar ik krijg het niet voor elkaar items aan de listview toe te voegen.

Dit is het stuk code waarmee ik het probeer:

Code:
Dim myAdaptorS As New MySqlDataAdapter
        Dim myCommandS As New MySqlCommand()
        myCommandS.Connection = connS
        myCommandS.CommandText = "SELECT * FROM " & table
        myAdaptorS.SelectCommand = myCommandS
        Dim myDataS As MySqlDataReader
        myDataS = myCommandS.ExecuteReader()
        While myDataS.Read()
            count = cacheint
            Dim objItem As New ListViewItem
            LVI = New ListViewItem(myDataS(TableStruct(1)).ToString)
            While count > 1
                LVI.SubItems.Add(myDataS(TableStruct(count)))
                count = count - 1
            End While
            Form2.ListView1.Items.Add(LVI)
            objItem.ImageIndex = 0
            result = True
        End While

TableStruct is een stringarray waar 1 tot x de namen van de velden in de tabel zijn, in de console versie zou ik dan
Code:
Console.WriteLine((myDataS(TableStruct(count)).ToString()))
gebruiken om Mydatas uit te lezen.
Anyway, ik voeg nu dus een item toe en de subitems die erbij horen, maar in de listview gebeurt niks, er komen geen items of subitems, de tabel heeft records (niet te veel, stuk of 30 om te testen).

Overigens voeg ik wel nog een stukje toe waarmee een aantal records ipv alle kunnen worden gelezen zodat grote tabellen niet het programma crashen, maar voor nu probeer ik eerst uberhaupt een enkele record te lezen :p

Hopelijk kan iemand me er mee helpen.
 
Hoi,

Ik kan niet echt veel vinden wat verkeerd zit, maar ook wel een beetje omdat ik van sommige variablen niet weet waar ze vandaan komen of wat ze voorstellen...

Toch heb ik het een klein beetje anders gemaakt, in de hoop dat het dan wel zal werken, dus je kan het proberen:
[CPP] Dim myAdaptorS As New MySqlDataAdapter
Dim myCommandS As New MySqlCommand()
myCommandS.Connection = connS
myCommandS.CommandText = "SELECT * FROM " & table
myAdaptorS.SelectCommand = myCommandS
Dim myDataS As MySqlDataReader
myDataS = myCommandS.ExecuteReader()
While myDataS.Read()
count = cacheint
Dim LVI As New ListViewItem
LVI.Text = myDataS(TableStruct(1)).ToString
While count > 1
LVI.SubItems.Add(myDataS(TableStruct(count)))
count = count - 1
End While
Form2.ListView1.Items.Add(LVI)
result = True
End While[/CPP]

De vragen die ik nog heb zijn:
  1. Wat stelt de variable "cacheint" precies voor? Welke waarde komt daaruit?
  2. Wat voor soort waarde geeft de functie "TableStruct"? Is dat een integer?

MartinJM
 
Count is een integer welke het aantal velden van de tabel weergeeft, niet het aantal records, maar het aantal velden zoals 'Naam', 'adres' en 'klant-id' bijv.
Cacheint is waar count zijn waarde van krijgt wat iedere keer moet aangezien ik count gebruik in een 'While count > 1' loop.

Tablestruct is geen functie, maar een array van 1 (niet 0) tot count.
Dus als cacheint 5 is heeft de tabel 5 velden, en wordt Count voor de While loop op 5 gezet en doorlopen, in die while loop vraag ik dan een waarde uit de MySQL query.
De output van de query staat in myDataS welke ik moet oproepen met de naam van het veld, als de tabel een veld met 'klant-id' heeft is het dus:
myDataS("klant-id")
Maar omdat dit dynamisch moet gebeuren staat de string 'klant-id' dus in de TableStruct array.
En dan roep ik die dus op als:
myDataS(TableStruct(Count))
Waar Count aangeeft welke waarde van Tablestruct moet worden gebruikt, die geeft aan wat myDataS moet teruggeven.

Hopelijk is het zo wat duidelijker :p ondanks dat mijn uitleg volgens mij wat chaotisch is...
 
Hoi,

Ik snap 'm nu wel, maar ik kan toch nog geen fouten ontdekken... Het enige wat ik op dit moment kon bedenken is dat je de 2e While-loop misschien beter kan vervangen door een for-loop. Dan kom je op zoiets uit:
[CPP] Dim myAdaptorS As New MySqlDataAdapter
Dim myCommandS As New MySqlCommand()
myCommandS.Connection = connS
myCommandS.CommandText = "SELECT * FROM " & table
myAdaptorS.SelectCommand = myCommandS
Dim myDataS As MySqlDataReader
myDataS = myCommandS.ExecuteReader()
While myDataS.Read()
Dim LVI As New ListViewItem(myDataS(TableStruct(1)).ToString)
For i As Integer = 2 To cacheint Step 1
LVI.SubItems.Add(myDataS(TableStruct(i)))
Next
Form2.ListView1.Items.Add(LVI)
End While[/CPP]

Ik heb het (nog) niet getest met een database omdat ik geen database heb klaarstaan. Misschien dat ik dat later nog wel doe...

MartinJM
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan