[VB.NET] Dataset doorzoeken

Pagina: 1
Acties:
  • 146 views sinds 30-01-2008
  • Reageer

  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Ik heb effe een vraagje aangaande Datasets in Visual Basic .NET.

Ik lees een XML file in een Dataset. Deze XML file is al gevuld door een dataset op de desktop computer, wordt dan verstuurd via RAPI naar de Pocket PC en vult dan een dataset.

Nu is mijn vraag of het mogelijk is een SQL query uit te voeren op deze dataset aangezien ik wil zoeken op naam, dan de naam van de persoon intyp en dan alleen de namen uit de XML file wil die hieraan voldoen. Dus grof gezegd:

code:
1
SELECT * FROM Persoon WHERE Naam LIKE "invoerveld"


Zou dit mogelijk zijn en zo ja hoe, want als ik op internet zoek dan kan ik hierover weinig vinden in samenwerking met het Compact Framework...

Never eat yellow snow...


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 01-05 19:09

pjvandesande

GC.Collect(head);

Misschien is dit stuk iets voor je.

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:17
Kijk eens naar de Select en de Find method van de datatable class.

[ Voor 12% gewijzigd door whoami op 02-05-2005 08:47 ]

https://fgheysels.github.io/


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Wat ik nu dus doe is het volgende:
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
Public Sub GetRowsByFilter()
        Dim XMLgegevens As DataSet = New DataSet
        Dim t As DataTable
        Dim strExpr As String
        Dim foundRows() As DataRow
        Dim i As Integer
        '
        ' Laad DataSet
        '
        XMLgegevens.ReadXml("\XMLFile.xml")

        t = XMLgegevens.Tables("table")
        strExpr = "achternaam = 'Wel'"
        foundRows = t.Select(strExpr)
        For i = 0 To foundRows.GetUpperBound(0)
            Console.WriteLine(foundRows(i)(0))
        Next i
    End Sub

[...]

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        GetRowsByFilter()
    End Sub

Nu krijg ik dus helemaal niks op het beeldscherm... van de pda, hij is heel lang bezig om het 190 Kb bestand door te spitten volgens mij maar het uiteindelijke resultaat is niks.
Ik heb het in ASP wel eens geprogrammeerd. Je hebt dan een pagina met een zoekveld en als je op de knop zoeken drukt gaat ie naar pagina 2 met de resultaten en daar heb je linkjes van gemaakt voor de uitgebreide informatie.
Ik wil de gevonden namen dus gewoon als text op het beeld ipv een tabel shaped window...
Lukt dit ook in VB.NET of zit ik dan helemaal verkeerd qua denkwijze?

[ Voor 7% gewijzigd door Denga op 02-05-2005 23:18 ]

Never eat yellow snow...


  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
Kun je niet eerst achterhalen wat er in je DataSet zit met een debugger ofzo? Hangt er ook af hoe je xml bestand eruit ziet. Als je ReadXML gebruikt maakt hij als het goed is zelf 1 of meerdere datatables aan. Nu probeer je een datatable te benaderen met t = XMLgegevens.Tables("table") maar ik vraag me af of XMLgevens.Tables("table") wel bestaat.

probeer eerst dit ff
code:
1
2
3
For Each t In XMLgegevens.Tables
  Console.WriteLine("TableName: " + t.TableName)
Next t


dan weet je zeker hoe je datatables heten.

[ Voor 34% gewijzigd door stp_4 op 02-05-2005 23:17 ]

stp - PSN ID: stp_4


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Doet ie helemaal niks... Hij geeft helemaal geen uitvoer...

Dus je moet je voorstellen dat ik een blanco form heb met één knop met bovenstaande code en als ik op die knop druk doet ie dus helemaal niks... Ja lang bezig zijn met iets want hij 'freezed'voor een kort moment maar verder doet ie niks.

Dit is m'n XML bestand:

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
  <?xml version="1.0" standalone="yes" ?> 
-    <DataSet>
-       <Table>
           <ID>89</ID> 
           <VERSION>687</VERSION> 
           <DELETED>0</DELETED> 
           <MUTEX>0</MUTEX> 
           <LOCKEDBY /> 
           <VOORNAAM>Thomas</VOORNAAM> 
           <VOORLETTERS>T.</VOORLETTERS> 
           <TUSSENVOEGSEL>van</TUSSENVOEGSEL> 
           <ACHTERNAAM>Wel</ACHTERNAAM> 
           <GESLACHT>Man</GESLACHT> 
           <ID_LAND>1</ID_LAND> 
           <DATUM_AANGEMAAKT>30-11-2004 16:16:47</DATUM_AANGEMAAKT> 
           <DATUM_GEWIJZIGD>12-02-2005 22:39:27</DATUM_GEWIJZIGD> 
        </Table>
        <Table>
           <ID>90</ID> 
           <VERSION>687</VERSION> 
           <DELETED>0</DELETED> 
           <MUTEX>0</MUTEX> 
           <LOCKEDBY /> 
           <VOORNAAM>Dennis</VOORNAAM> 
           <VOORLETTERS>D.</VOORLETTERS> 
           <TUSSENVOEGSEL></TUSSENVOEGSEL> 
           <ACHTERNAAM>Klasen</ACHTERNAAM> 
           <GESLACHT>Man</GESLACHT> 
           <ID_LAND>1</ID_LAND> 
           <DATUM_AANGEMAAKT>30-11-2004 16:16:47</DATUM_AANGEMAAKT> 
           <DATUM_GEWIJZIGD>12-02-2005 22:39:27</DATUM_GEWIJZIGD> 
        </Table>
     </Dataset>

[ Voor 118% gewijzigd door Denga op 03-05-2005 01:55 ]

Never eat yellow snow...


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Ok, ik heb dus nu het volgende:

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
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim XMLgegevens As DataSet = New DataSet
        '
        ' Load DataSet (with schema)
        '
        XMLgegevens.ReadXml("\XMLFile.xml")

        Dim dt As New DataTable
        dt.Columns.Add("ID", GetType(System.String))
        dt.Columns.Add("Voornaam", GetType(System.String))
        dt.Columns.Add("Achternaam", GetType(System.String))
        '
        ' Populate the DataTable to bind to the Combobox.
        '
        Dim drDSRow As DataRow
        Dim drNewRow As DataRow

        For Each drDSRow In XMLgegevens.Tables("Table").Rows()
            drNewRow = dt.NewRow()
            drNewRow("Voornaam") = drDSRow("ID")
            drNewRow("Voornaam") = drDSRow("Voornaam")
            drNewRow("Achternaam") = drDSRow("Achternaam")
            dt.Rows.Add(drNewRow)
        Next


        ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList

        With ComboBox1
            .DataSource = dt
            .DisplayMember = "Achternaam" & "Voornaam"
            .ValueMember = "ID"
            .SelectedIndex = 0
        End With
    End Sub


De Combobox vult zich netjes met Alle achternamen uit de XML file... Nu klopt er een ding niet, want bij Displaymember van de Combobox geef ik aan dat ie zowel achternaam als voornaam moet afbeelden.
Daarbij krijg ik het nog steeds niet voor elkaar om een search op de dataset los te laten... Dus dat ik in het textvak de zoekcriteria opgeef en dat ie met de resultaten daarvan de combobox vult.

[ Voor 95% gewijzigd door Denga op 03-05-2005 03:33 ]

Never eat yellow snow...


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 11:55

mulder

ik spuug op het trottoir

Dat komt omdat de column ActernaamVoornaam niet in je DataTable zit.

oogjes open, snaveltjes dicht


  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
code:
1
drNewRow("Voornaam") = drDSRow("ID")


:?

stp - PSN ID: stp_4


  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
Je XML declaratie is ook verkeerd
code:
1
<DataSet>...</Dataset>
.
edit:

heb het net ff snel in C# getest en daar werkt het gewoon als de xml declaratie maar correct is.

[ Voor 56% gewijzigd door stp_4 op 03-05-2005 09:29 ]

stp - PSN ID: stp_4


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Ja die declaratie was een typfout... Klopt wel gewoon is in beide gevallen gewoon DataSet.
En wat betreft de 2 columns heb ik het ook al opgelost door een nieuwe colomn aan de Dataset toe te voegen...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        Dim dt As New DataTable
        dt.Columns.Add("ID", GetType(System.String))
        dt.Columns.Add("Naam", GetType(System.String))
       
        Dim drDSRow As DataRow
        Dim drNewRow As DataRow

        For Each drDSRow In XMLgegevens.Tables("Table").Rows()
            drNewRow = dt.NewRow()
            drNewRow("ID") = drDSRow("ID")
            drNewRow("Naam") = drDSRow("Achternaam") & ", " & drDSRow("Voornaam")
            dt.Rows.Add(drNewRow)
        Next

        ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList

        With ComboBox1
            .DataSource = dt
            .DisplayMember = "Naam"
            .ValueMember = "ID"
            .SelectedIndex = 0
        End With

Never eat yellow snow...


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 11:38
Ik heb hier nog wel wat kanttekeningen bij... Als ik het goed begrijp, wordt er een dataset uit een xml bestand geladen. Vervolgens ga je een voor een door de rows van een bepaalde table loopen, om daarmee een andere table te vullen. Dat is natuurlijk totale onzin, waarom niet meteen de table uit de dataset gebruiken? En als je dan toch zo graag een nieuwe DataTable wil maken, waarom gebruik je dan geen DataTable.Copy() ?

Roomba E5 te koop


  • VicSmurf
  • Registratie: Januari 2001
  • Laatst online: 07-05 14:08
Je kunt de dataset filteren door het volgende te doen:

DataSet.Table(0).DefaultView.rowfilter = "fieldName = 'xxxxxx'"

Ik weet niet of je dat bedoeld?

  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
sig69 schreef op dinsdag 03 mei 2005 @ 16:30:
Ik heb hier nog wel wat kanttekeningen bij... Als ik het goed begrijp, wordt er een dataset uit een xml bestand geladen. Vervolgens ga je een voor een door de rows van een bepaalde table loopen, om daarmee een andere table te vullen. Dat is natuurlijk totale onzin, waarom niet meteen de table uit de dataset gebruiken? En als je dan toch zo graag een nieuwe DataTable wil maken, waarom gebruik je dan geen DataTable.Copy() ?
Hij maakt een nieuwe tabel om naam en voornaam als een nieuwe kolomnaam te krijgen zodat hij deze kan gebruiken in z'n combobox. Denk niet dat dit de meest efficiente oplossing is...

stp - PSN ID: stp_4


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
stp_4 schreef op dinsdag 03 mei 2005 @ 17:38:
[...]

Hij maakt een nieuwe tabel om naam en voornaam als een nieuwe kolomnaam te krijgen zodat hij deze kan gebruiken in z'n combobox. Denk niet dat dit de meest efficiente oplossing is...
Dit klopt, ik maak een nieuwe tabel aan om m'n combobox mee te vullen... Maar als dit niet de meest efficiente manier is, wat is volgens jou dat de meest efficiente manier STP_4?
Kijk ik kan nog veel leren dus zeg het maar...

Never eat yellow snow...


  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
Je zou dan bijvoorbeeld zoiets kunnen doen
code:
1
2
3
4
For Each dr In dt.Rows()
naam  = dr["Voornaam"] + " " + dr["Achternaam"];
ComboBox1.Items.Add( naam );
Next


Let niet op de syntax want ben meer een C#-er...

Scheelt weer het maken van een nieuwe DataTable en je maakt gebruik van je huidige DataTable. Weet alleen niet of Combox1.Items.Add wel in VB bestaat in plaats van er een datasource aan te hangen.

stp - PSN ID: stp_4


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Dat werkte dus niet...

Maar onderstaande code werkt zonder de select statement perfect, hij vult de combobox perfect maar als ik er een select aan hang begint ie ineens foutmeldingen te spugen...
Maar ik heb het idee dat ik de select op een verkeerde plek heb hangen...

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
Dim PersoonsTabel As New DataTable("Persoon")

        PersoonsTabel.Columns.Add("ID", GetType(System.String))
        PersoonsTabel.Columns.Add("Voornaam", GetType(System.String))
        PersoonsTabel.Columns.Add("Achternaam", GetType(System.String))
        PersoonsTabel.Columns.Add("Naam", GetType(System.String))
        '
        ' Populate the DataTable to bind to the Combobox.
        '
        Dim drDSRow As DataRow() = PersoonsTabel.Select("Achternaam = 'Klasen', voornaam DESC")
        Dim drNewRow As DataRow

        For Each drDSRow In XMLgegevens.Tables("Table").Rows()
            drNewRow = PersoonsTabel.NewRow()
            drNewRow("Naam") = drDSRow("Achternaam") & ", " & drDSRow("Voornaam")
            PersoonsTabel.Rows.Add(drNewRow)
        Next

        ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList

        With ComboBox1
            .DataSource = PersoonsTabel
            .DisplayMember = "Naam"
            .ValueMember = "ID"
            .SelectedIndex = 0
        End With


want als ik dit doe:
code:
1
Dim drDSRow As DataRow

ipv
code:
1
Dim drDSRow As DataRow() = PersoonsTabel.Select("Achternaam = 'Klasen', voornaam DESC")

dan doet ie het perfect alleen voert ie dan geen select uit...

Never eat yellow snow...


  • D4Skunk
  • Registratie: Juni 2003
  • Laatst online: 20-10-2025

D4Skunk

Kind of Blue

asjeblieft:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sub Main
        Dim frm as Form=new Form()
        dim cmb as ComboBox = new ComboBox()
        frm.controls.Add(cmb)
        cmb.Dock = system.Windows.Forms.DockStyle.Top
        Dim XMLgegevens As DataSet = New DataSet
        XMLgegevens.ReadXml("c:\\DataSet.xml")
        XMLgegevens.Tables("Table").Columns.Add( _
           new System.Data.DataColumn("Naam",GetType(string),"Voornaam + ', '+achternaam"))

        XMLgegevens.Tables("Table").DefaultView.Rowfilter="achternaam='wel'"
        XMLgegevens.Tables("Table").DefaultView.Sort="achternaam asc,voornaam desc"
        cmb.DropDownStyle = ComboBoxStyle.DropDownList

        cmb.DataSource = XMLgegevens.Tables("Table").DefaultView
        cmb.DisplayMember = "Naam"
        cmb.ValueMember = "ID"
        cmb.SelectedIndex = 0
        frm.ShowDialog()

    end sub

[ Voor 14% gewijzigd door D4Skunk op 03-05-2005 21:33 . Reden: sort toegevoegd ]


  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
D4Skunk schreef op dinsdag 03 mei 2005 @ 21:31:
asjeblieft:
Visual Basic:
1
new System.Data.DataColumn("Naam",GetType(string),"Voornaam +"  "+achternaam");
Inderdaad ook een goeie oplossing..

[ Voor 18% gewijzigd door stp_4 op 03-05-2005 22:51 ]

stp - PSN ID: stp_4


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
VET ! Bedankt heren... Klopt zo kan het dus ook, dat ik daar helemaal nooit aan gedacht heb...

[ Voor 22% gewijzigd door Denga op 04-05-2005 03:39 ]

Never eat yellow snow...


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Nu heb ik het dus zo dat ie de gegevens doorgeeft naar een nieuwe Form
In deze form heb ik de volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Dim Form As Form = New Form
        Dim Combobox As ComboBox = ComboBox

        Dim XMLgegevens As DataSet = New DataSet

        XMLgegevens.ReadXml("\XMLFile.xml")
        XMLgegevens.Tables("Table").Columns.Add(New System.Data.DataColumn("Naam", GetType(String), "Achternaam + ', '+Voornaam"))
        XMLgegevens.Tables("Table").DefaultView.RowFilter = "ID = '" & Combobox.SelectedValue & "'"

        Console.WriteLine("Naam")
        Console.WriteLine("Adres")

        Form.ShowDialog()


Alleen krijg ik het nu niet voor elkaar dat ie wat doet met de naam die ik selecteer in de combobox... Hij geet op de Form.ShowDialog() een blanco pagina terwijl ie toch naam een adres zou moeten weergeven...
Het is de bedoeling nl dat ie alle gegevens van de geselecteerde persoon weergeeft, zeg maar de details zoals adres etc.

[ Voor 132% gewijzigd door Denga op 04-05-2005 04:21 ]

Never eat yellow snow...


  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
code:
1
Console.WriteLine("Naam")

Zal "Naam" als string weergeven in de standaard outputstream en niet op je form. Begin toch het idee te krijgen dat je niet echt een idee hebt wat je doet en dat verschillende mensen hier voor jou een applicatie aan het maken zijn.

Nog al logisch dat je een leeg formulier ziet. Je maakt immers een nieuw formulier waar je verder helemaal niets mee doet behalve laten zien...

edit:

Begin hier maar eens

[ Voor 46% gewijzigd door stp_4 op 04-05-2005 09:16 ]

stp - PSN ID: stp_4


  • D4Skunk
  • Registratie: Juni 2003
  • Laatst online: 20-10-2025

D4Skunk

Kind of Blue

Je moet de combobox initialiseren & toevoegen aan je form, anders zal het niet lukken. Verder weet ik ook niet of je in vb dezelfde namen aan je variabelen mag geven als aan je types.
Normaalgezien zou het je moeten lukken met het voorbeeld dat ik je gegeven heb, dus zal je nog ff moeten zoeken

Akkoord met ^^ stp4 : misschien is het beter voor je om eens een tutorial stap voor stap te volgen, of een goed vb/c# boek aan te schaffen

[ Voor 22% gewijzigd door D4Skunk op 04-05-2005 09:12 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:17
D4Skunk schreef op woensdag 04 mei 2005 @ 09:10:
Verder weet ik ook niet of je in vb dezelfde namen aan je variabelen mag geven als aan je types.
Het is geen good practice, maar ik denk wel dat het onder VB.NET zal werken.
Ik heb ff (in C# ) volgend testje gedaan (met CLSCompliant(true)) en het compilede:
code:
1
2
3
[
Form1 Form1 = new Form1(); 
Form1.Show();

Moest dit in VB.NET niet toegelaten zijn, dan zou het boeltje niet mogen compileren doordat ik CLSCompliant(true) gebruikt heb.

https://fgheysels.github.io/

Pagina: 1