VBiB/ACCB.net - Visual Basic in België | .net Ineta User Group  
(login to hide)
Hoofdmenu

Advertenties

Het Computer Winkeltje HCW


Evenementen

ZOEKEN IN DB - Oud Forum inhoud (alleen lezen)
U bevindt zich > Oude forum > Visual Basic .Net > Databases ... (VB.Net) > zoeken in db
Gepost door vdby gepost op 20/10/2005 om 11:36

Ik ben bezig met een project voor school en kan al een database inlezen in vb.net. nu wil ik een tekst die ik ingegeven heb in een textbox zoeken in die db. Maar het programma werkt niet meer vanaf objDataAdapter.Fill(mijnDataSet, "fims"). Wat doe ik hier verkeerd?

Dim verbindingsString As String = "Provider=Microsoft.jet.OLEDB.4.0;" & "Data Source=movies.mdb;"

Dim verbinding As New OleDb.OleDbConnection(verbindingsString)

Dim teZoeken As String

teZoeken = txtZoeken.Text

Try

verbinding.Open()

Dim zoekTekst As String = "Where Omschrijving LIKE '%" & teZoeken & "%'"

Dim opdracht As New OleDb.OleDbCommand("SELECT * from tblmovies" & _

zoekTekst, verbinding)

Dim objDataAdapter As New OleDb.OleDbDataAdapter(opdracht)

Dim mijnDataSet As New DataSet

DataGrid1.DataSource = mijnDataSet

objDataAdapter.Fill(mijnDataSet, "fims")

mijnDataSet.DataSetName = "Gegevens films"

DataGrid1.PreferredColumnWidth = 120

DataGrid1.Expand(-1)

Catch fout As Exception

MsgBox("Problemen bij vullen van tabel.", MsgBoxStyle.Critical, "Fout")

Finally

verbinding.Close()

End Try

Gepost door RedThread gepost op 20/10/2005 om 11:58
En welke foutmelding krijg je ?
Gepost door Don Delegate gepost op 20/10/2005 om 12:00

Je SELECT statement heeft een verkeerde syntax (ontbreekt een spatie).
Met "koekoek" als waarde voor teZoeken krijg je:
verbinding.CommandText zei:

SELECT * from tblmoviesWhere Omschrijving LIKE '%koekoek%'

Gebruik String.Format, of veel beter: gebruik parameters.

Gepost door vdby gepost op 20/10/2005 om 12:24

RedThread zei:

En welke foutmelding krijg je ?

geen foutmelding.

vanaf deze regel

objDataAdapter.Fill(mijnDataSet, "fims") doet het niets meer dus gaat over naar de

Catch fout As Exception

Gepost door RedThread gepost op 20/10/2005 om 12:30
Heb je de wijziging al geprobeerd die Don aangaf ?
Gepost door vdby gepost op 20/10/2005 om 12:34

RedThread zei:

Heb je de wijziging al geprobeerd die Don aangaf ?

ja maar dan doet hij het nog niet. en parameters gebruiken kan niet omdat we dit nog niet zien int school.

Gepost door Ronneke gepost op 20/10/2005 om 12:41

hmmm, doe eens hetvolgende:

Code:
Dim opdracht As New OleDb.OleDbCommand("SELECT * from tblmovies " & zoekTekst, verbinding)

dus een spatie plaatsen na tblmovies, zoniet krijgt ge wat Don Delegate heeft vermeld.

Succes

Gepost door Don Delegate gepost op 20/10/2005 om 12:44

Zoiets zou toch moeten werken

Code:

Const selectText As String = _
  "SELECT * FROM TBLMOVIES WHERE OMSCHRIJVING LIKE '%{0}%'"
Dim opdracht As New OleDb.OleDbCommand(String.Format(selectText, teZoeken), verbinding)
Dim adapter As New OleDb.OleDbDataAdapter(opdracht)
Dim ds As New DataSet("Movies")
Try
   
adapter.Fill(ds)
Catch ex As Exception
    MessageBox.Show(ex.ToString)
End Try

Gepost door vdby gepost op 20/10/2005 om 13:10

het laatste wil ook niet lukken, ksnap echt niet wat er verkeerd aan is hoor.

greetz

Gepost door RedThread gepost op 20/10/2005 om 13:24

Dit werkt zonder meer, heb het net uitgetest.

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

 

        Dim verbindingsString As String = "Provider=Microsoft.jet.OLEDB.4.0;" & "Data Source=c:movies.mdb;"

        Dim verbinding As New OleDb.OleDbConnection(verbindingsString)

        Dim teZoeken As String = "%"

 

        Try

 

             verbinding.Open()

 

             Dim zoekTekst As String = "Where Omschrijving LIKE '%" & teZoeken & "%'"

             Dim opdracht As New OleDb.OleDbCommand("SELECT * from tblmovies " & zoekTekst, verbinding)

             Dim objDataAdapter As New OleDb.OleDbDataAdapter(opdracht)

             Dim mijnDataSet As New DataSet

 

             DataGrid1.DataSource = mijnDataSet

             objDataAdapter.Fill(mijnDataSet, "films")

             mijnDataSet.DataSetName = "Gegevens films"

             DataGrid1.PreferredColumnWidth = 120

             DataGrid1.Expand(-1)

 

        Catch fout As Exception

             'MsgBox("Problemen bij vullen van tabel.", MsgBoxStyle.Critical, "Fout")

             MessageBox.Show(fout.Message)

        Finally

             verbinding.Close()

        End Try

    End Sub

Gepost door Don Delegate gepost op 20/10/2005 om 13:26

Wat bedoel je met "wil niet lukken"?
Krijg je nu een foutboodschap of niet (de MessageBox.Show)?
Indien niet dan is het dus eigenlijk "gelukt".
Wat is de waarde van teZoeken?

Gepost door Don Delegate gepost op 20/10/2005 om 13:34
RedThread zei:

Dit werkt zonder meer, heb het net uitgetest.



Uiteraard.
Ook mijn code was getest, met positief resultaat. Dus ik vermoed dat er bij vdby iets anders speelt.

Gepost door RedThread gepost op 20/10/2005 om 13:37

Denk ook eerder in de richting van Don vdby, als je effektief geen foutboodschap op je scherm krijgt betekend dat dat je code correct is uitgevoerd.

Zoek je wel op een waarde die in je database bestaat ?

Gepost door vdby gepost op 20/10/2005 om 13:40

hieronder vind je een link waar mijn project staat. met de laatste aanpassing van het project

http://users.skynet.be/vdby/project.zip

 

Gepost door RedThread gepost op 20/10/2005 om 13:49

Probeer dit eens

Dim zoekTekst As String = "Where Titel LIKE '%" & teZoeken & "%'"

Gepost door vdby gepost op 20/10/2005 om 14:02
RedThread zei:

Probeer dit eens

Dim zoekTekst As String = "Where Titel LIKE '%" & teZoeken & "%'"

 

ja het werkt. hartelijk bedankt. dus als ik in die andere kolommen ook wil zoeken wat moet ik dan juist bij in die code zetten.

 

greetz

Gepost door Don Delegate gepost op 20/10/2005 om 14:08

Omschrijving bestaat niet in je tabel:
Code:

Private Sub btnZoeken_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnZoeken.Click

    Const zoekTekst As String = _
      "SELECT * from tblmovies Where Titel LIKE '%{0}%'"
    Dim verbindingsString As String = _
      "Provider=Microsoft.jet.OLEDB.4.0;Data Source=movies.mdb;"
    Dim verbinding As New OleDb.OleDbConnection(verbindingsString)
    Dim teZoeken As String = txtZoeken.Text
    Dim opdracht As New OleDb.OleDbCommand(_
     
String.Format(zoekTekst, teZoeken), verbinding)
    Dim objDataAdapter As New OleDb.OleDbDataAdapter(opdracht)
    Dim mijnDataSet As New DataSet("Gegevens Films")
    Try
       
objDataAdapter.Fill(mijnDataSet, "films")
    Catch fout As Exception
        MessageBox.Show(fout.ToString)
        Return
    End Try
    DataGrid1.DataMember = "films"
    DataGrid1.DataSource = mijnDataSet
    DataGrid1.PreferredColumnWidth = 120
End Sub

Noteer dat .Fill de connectie opent en sluit (ook bij een fout), dus Open en Close zijn niet echt nodig

Edit: zie dat het ondertussen al in orde is.

Gepost door RedThread gepost op 20/10/2005 om 14:12
vdby zei:

[QUOTE=RedThread]

Probeer dit eens

Dim zoekTekst As String = "Where Titel LIKE '%" & teZoeken & "%'"

 

ja het werkt. hartelijk bedankt. dus als ik in die andere kolommen ook wil zoeken wat moet ik dan juist bij in die code zetten.

 

greetz

[/QUOTE]

 

Dim zoekTekst As String = "Where Titel LIKE '%" & teZoeken & "%' AND Genre LIKE '%Actie%'"

enz..

Gepost door RedThread gepost op 20/10/2005 om 14:29

Don Delegate zei:

Omschrijving bestaat niet in je tabel:
Code:

Private Sub btnZoeken_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnZoeken.Click

    Const zoekTekst As String = _
      "SELECT * from tblmovies Where Titel LIKE '%{0}%'"
    Dim verbindingsString As String = _
      "Provider=Microsoft.jet.OLEDB.4.0;Data Source=movies.mdb;"
    Dim verbinding As New OleDb.OleDbConnection(verbindingsString)
    Dim teZoeken As String = txtZoeken.Text
    Dim opdracht As New OleDb.OleDbCommand(_
      String.Format(zoekTekst, teZoeken), verbinding)
    Dim objDataAdapter As New OleDb.OleDbDataAdapter(opdracht)
    Dim mijnDataSet As New DataSet("Gegevens Films")
    Try
       
objDataAdapter.Fill(mijnDataSet, "films")
    Catch fout As Exception
        MessageBox.S how(fout.ToString)
        Return
    End
Try

    DataGrid1.DataSource = mijnDataSet

    DataGrid1.DataMember = "films"

    DataGrid1.PreferredColumnWidth = 120
End Sub

Noteer dat .Fill de connectie opent en sluit (ook bij een fout), dus Open en Close zijn niet echt nodig

Edit: zie dat het ondertussen al in orde is.

 

Datasource moet voor datamember komen.

Gepost door Don Delegate gepost op 20/10/2005 om 14:52
RedThread zei:

 

Datasource moet voor datamember komen.

Euh? Waarom dan wel?

Gepost door RedThread gepost op 20/10/2005 om 15:23

wel, om te beginnen krijg ik de foutmelding "Cannot create a child list for field films"

Als ik er de msdn op nalees maakt men ook eerst de Dataset, daarna gaat men de Datasource opvullen en vervolgens via de property Datamember de gegevens naar de Datagrid doorspelen.

Volgens de msdn methode werkt het dan wel bij mij.

Gepost door Don Delegate gepost op 20/10/2005 om 16:21

Die fout treedt alleen maar op als je al een andere DataSource gekoppeld hebt aan DataGrid.DataSource, waar de nieuwe DataMember niet gekend is (en dat is dus logisch).
Als je eerst de DataSource instelt heb je dat probleem inderdaad meestal niet (zie echter de bug verder).
De geprefereerde manier om het koppel DataSource/DataMember en zelfs alleen DataSource te wijzigen in run-time is dan ook gebruik te maken van DataGrid.SetDataBinding :
Code:

'Koppel wijzigen
DataGrid1.SetDataBinding(mijnDataSource, mijnDataMember)
'DataSet wijzigen
DataGrid1.SetDataBinding(mijnDataSource, Nothing)


Dit vermijdt ook die vervelende bug in de setter van de DataSource property die blijkbaar eerst gaat testen of de nieuwe toe te kennen DataSource dezelfde is als de oude, en niets doet als het dezelfde is, wat je dezelfde fout kan geven, of gewoon niet het gewenste resultaat geeft bij gebruik van ArrayList, Array of een andere IList implementor (er gebeurt gewoon niets, ook al is de IList gewijzigd). Om dat op te lossen moet je dan anders eerst volgende code gebruikenCode:

DataGrid1.DataSource = Nothing
DataGrid1.DataSource = OudeDataSource

Het is duidelijk dat gebruik van SetDataBinding intuitiever is (en altijd werkt zoals verwacht).


 

Gepost door vdby gepost op 20/10/2005 om 16:33
Ja mensen iedereen bedankt die mij geholpen heeft, als er nog probleempjes moesten zijn naarmate mijn project vorderd zullen jullie nog wel iets horen van mij ;)

greetz yannick
Start - Zoeken op oude forum

 

 
Postnuke - ADODB Database - PHP 4/5 - pnPhpBB2 - Hosting bij Openminds
Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno 21-12-2000)
vbib.be gestart op 1/03/06 (extra vanaf 1/09: vbnet.be en vbdotnet.be)
VBiB is gerelateerd met wintips.be

Nieuwsbrief RSS Feed: backend.php