Daten in listbox filtern

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von toto.

    Daten in listbox filtern

    Hallo fichz,
    ich hoffe das du noch online bist.

    Ich versuche in Form 2 in ein ListBox nur die Bücher mir anzeigen zu lassen die den Titel enthalten.
    Hier mein Code für dir Form 2:

    VB.NET-Quellcode

    1. Public Class Form2
    2. Private Sub ListBox1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.GotFocus
    3. Dim con As New OleDb.OleDbConnection
    4. Dim cmd As New OleDb.OleDbCommand
    5. Dim reader As OleDb.OleDbDataReader
    6. TextBox1.Text = Form1.ComboBox1.Text
    7. con.ConnectionString = _
    8. "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    9. "Data Source=C:\Dokumente und Einstellungen\user\Eigene Dateien\Visual Express 2008\Projects\JAZZ Archiv\DATENBANK_BE.mdb"
    10. cmd.Connection = con
    11. cmd.CommandText = _
    12. "Select tblBuch.Buch_ID, tblBuch.Buch, tblSong_HptF.Song_ID, tblSong_HptF.Song FROM tblBuch INNER JOIN tblSong_HptF ON tblBuch.Buch_ID like tblSong_HptF.Buch_ID_SF WHERE (tblSong_HptF.Song) like (Song)"
    13. Try
    14. con.Open()
    15. reader = cmd.ExecuteReader()
    16. ListBox1.Items.Clear()
    17. Do While reader.Read()
    18. ' ListBox1.Items.Add( _
    19. 'reader("Buch"))
    20. If ListBox1.Items.Contains(reader("Buch")) = False Then 'Doppelte Einträge verhindern
    21. ListBox1.Items.Add(reader("Buch"))
    22. End If
    23. Loop
    24. reader.Close()
    25. con.Close()
    26. Catch ex As Exception
    27. MsgBox(ex.Message)
    28. End Try
    29. End Sub


    Der ListBox zeigt mir aber immer alle Bücher an, ich komme momentan nicht weiter,
    kannst du mir, der mein Vorhaben schon kennt, weiter helfen, oder sonst jemandem der online ist??

    lg

    toto
    lg toto
    hm du willst nur den Buchtitel rausfinden?
    die DB-Abfrage sieht mir mal extrem komplexx aus. Denke, dass das eventuell leichter geht.

    Sag mir mal welche Spalten die Tabelle hat und welche Daten du aus dieser genau brauchst.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Hallo fichz,
    habe in dein Profil gelesen das du aus Linz bist, super, ich sitze hier in der Steiermark Bezirk Murau.
    Versuche die ganze Zeit herauszufinden wie man eine PN mit Anhang sendet.
    Erfolglos.

    Kannst du mir sagen wie es geht???

    wollte die die DB BackEnd senden.

    lg

    toto
    lg toto

    Code vergessen

    Hallo an alle,
    habe wieder mal Zeit um weiter zu machen.
    Habe die Tabellen angehängt.
    Ich möchte mir in ein Listbox nur die Bücher angezeigt die den Titel enthalten
    wie aus einer textbox eingetragen ist.
    Mit dem obigem Code klappt nicht.
    Was mache ich falsch?
    Hat jemand ein Tipp?

    Danke

    lg
    toto

    Sorry, aber hier ist mein letzter Code.

    VB.NET-Quellcode

    1. Public Class Form2
    2. Private Sub ListBox1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.GotFocus
    3. Dim con As New OleDb.OleDbConnection
    4. Dim cmd As New OleDb.OleDbCommand
    5. Dim reader As OleDb.OleDbDataReader
    6. TextBox1.Text = Form1.ComboBox1.Text
    7. con.ConnectionString = _
    8. "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    9. "Data Source=C:\Dokumente und Einstellungen\user\Eigene Dateien\Visual Express 2008\Projects\JAZZ Archiv\DATENBANK_BE.mdb"
    10. cmd.Connection = con
    11. cmd.CommandText = ("SELECT * " _
    12. & "FROM tblSong_HptF, tblBuch " _
    13. & "WHERE Song_ID = Buch_ID_SF ")
    14. Try
    15. con.Open()
    16. reader = cmd.ExecuteReader()
    17. ListBox1.Items.Clear()
    18. Do While reader.Read()
    19. ListBox1.Items.Add( _
    20. reader("Buch"))
    21. Loop
    22. reader.Close()
    23. con.Close()
    24. Catch ex As Exception
    25. MsgBox(ex.Message)
    26. End Try
    27. End Sub
    Dateien
    • Tabellen.xls

      (415,23 kB, 136 mal heruntergeladen, zuletzt: )
    lg toto
    hi sorry das ich erst jetzt schreibe.

    bin etwas verwirrt. Willst du einfach nur die Büchertitel auslesen?

    VB.NET-Quellcode

    1. cmd.CommandText = "SELECT Buch FROM tblBuch WHERE Buch LIKE '%" & Textbox1.Text & "%'"


    wenn es das nicht ist musste bitte genauer beschreiben wie du es gerne willst ;) (is noch bissi bald heut)

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Hi fichz,
    schön dich zu hören.
    Das mit den Bücher auflisten lassen schaff ich, so wie dein Code,
    aber ich habe 41 Bücher und ein Song ist nicht in alle Bücher,
    ich möchte wenn ein Song ausgewählt ist das nur die Bücher angezeigt werden wo der Song drin ist.
    Habe alles Probiert und ich weiß das beim SELECT FROM WHERE das problem liegt.
    Mir fehlt momentan die Logik um eine vernunftige Verknupfung zu herstellen.

    lg

    toto
    lg toto
    mach mal bitte ein beispiel wie du suchen willst.
    was steht genau (zB) in Textbox1

    wenn ich das nämlich nun richtig verstanden habe suchst du einen song und wilst dazu die bücher haben.
    dann muss irgendwie aber in der tabelle der bücher die songs stehen weil sonst keine eindeutige zuordnung statfinden kann.
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Aus der Suche in Form1 übergebe ich den Songtitel an TextBox1 in Form2.

    Wenn du dir die Tabellen anschaust (siehe Anhang) erkennst du das die Song mit der tblBuch über Buch_ID_SF und Buch_ID verknupft sind.

    Das heißt z.B. : ein Buch hat 500 Seiten, Buch_ID 1, von...bis,

    alle 500 Songs dieses Buch in tblSong haben den Buch_ID_SF 1 (siehe Tabelle)

    ein anderes Buch hat 700 Seiten, Buch_ID 2, von...bis

    alle 700 Songs dieses Buch in tblSong haben den Buch_ID_SF 2

    Die Beziehungen passen auch.

    Es muss aber möglich sein ein "Select From Where" mit diesen Daten zu herstellen.

    Wenn du der Meinung bist das die Tabellen falsch sind, werde ich sie neu schreiben,
    wobei in Access gefunzt haben, und ich brauche sie später für weitere Verknupfungen (wie z.B. Autor, Tonart, Instrument usw.)

    Ich hoffe es deutlich geschrieben zu haben, wenn nicht bitte nachfragen.

    lg
    toto
    lg toto
    ok das hilft mir mal weiter

    VB.NET-Quellcode

    1. cmd.CommandText = "SELECT BUCH from tblBuch where BUCH_ID = (SELECT BUCH_ID_SF from tblSong_HptF WHERE Song LIKE '%" & Form1.Textbox1.Text & "%')"

    probier das mal so

    btw: kann es sein, dass 1 song in mehreren Büchern vorkommt?
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    ja, ein Song kann in mehrere Bücher vorkommen.

    Meldung: Höchstens ein Datensatz kann von dieser Unterabfrage zurügegeben werden.
    Dann nichts mehr.

    Dein Ansatz ist aber nicht schlecht, wäre nicht draf gekommen 2x Select zu schreiben.
    Werde weiter versuchen parallel mit dir.

    lg
    toto
    lg toto

    toto schrieb:

    Meldung: Höchstens ein Datensatz kann von dieser Unterabfrage zurügegeben werden.
    Dann nichts mehr.

    ist klar für die erstere Abfrage braucht er ja eine eindeutige ID.
    kommen da 2 oder mehr raus kann er sichs ja nicht aussuchen.

    eventuell würde ich eine zwischen abfrage machen wo man auswählen kann welches buch man dann genau haben will. wenn man das anklickt dann haste die eindeutige ID und kannst die erste Abfrage ohne den 2ten select ausführen und kommst zum ergebniss.
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    ist klar für die erstere Abfrage braucht er ja eine eindeutige ID.
    kommen da 2 oder mehr raus kann er sichs ja nicht aussuchen.


    Gerade das ist das Problem oder das Erwünscht, das er "ALLE" eideutige ID auflistet.

    eventuell würde ich eine zwischen abfrage machen wo man auswählen kann welches buch man dann genau haben will


    1) Wo schreibe ich die zwischen Abfrage hin?? (Jetzt wird mir mulmig)
    2) Warum kann man nicht die Bücher filtern nach dem Songtitel, das Buch habe in meiner Suche nicht drin?? (Habe mir ein Kaffee gekocht)
    3) Jetzt trinke ich Kaffee und versuche mich schlau zu machen.( Mein Gehirn kocht)
    4) Das sprengt alle meine Kenntnisse ins Jenseits.

    lg
    toto
    lg toto
    da das ganze nun schon etwas komplexx wird und ich mir das ganze erst ein bisschen überlegen muss werd ich heute nicht mehr dazu kommen wegen arbeit...
    falls wer anderer eine gute lösung soll er sie posten ansonsten werd ich mich am montag zurückmelden ;)

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Hallo fichz,

    falls du online bist, hier meine Fortschritte vom Wochenende:

    VB.NET-Quellcode

    1. 'DB einlesen
    2. Private Sub lboBuch_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles lboBuch.GotFocus
    3. Dim con As New OleDb.OleDbConnection
    4. Dim cmd As New OleDb.OleDbCommand
    5. Dim reader As OleDb.OleDbDataReader
    6. txtSong.Text = Form1.cboSong.Text
    7. 'listbox Buch füllen
    8. con.ConnectionString = _
    9. "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    10. "Data Source=C:\Dokumente und Einstellungen\user\Eigene Dateien\Visual Express 2008\Projects\JAZZ Archiv\DATENBANK_BE.mdb"
    11. cmd.Connection = con
    12. cmd.CommandText = "SELECT BUCH from tblBuch where BUCH_ID = (SELECT BUCH_ID_SF from tblSong_HptF WHERE Song LIKE '%" & txtSong.Text & "%')"
    13. Try
    14. con.Open()
    15. reader = cmd.ExecuteReader()
    16. lboBuch.Items.Clear()
    17. Do While reader.Read()
    18. lboBuch.Items.Add( _
    19. reader("Buch"))
    20. Loop
    21. reader.Close()
    22. con.Close()
    23. Catch ex As Exception
    24. MsgBox(ex.Message)
    25. End Try
    26. End Sub
    27. 'DB einlesen
    28. Private Sub lboBuch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lboBuch.Click
    29. Dim con As New OleDb.OleDbConnection
    30. Dim cmd As New OleDb.OleDbCommand
    31. Dim reader As OleDb.OleDbDataReader
    32. Dim Path As String
    33. 'listbox Song füllen
    34. con.ConnectionString = _
    35. "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    36. "Data Source=C:\Dokumente und Einstellungen\user\Eigene Dateien\Visual Express 2008\Projects\JAZZ Archiv\DATENBANK_BE.mdb"
    37. cmd.Connection = con
    38. cmd.CommandText = "SELECT Song from tblSong_HptF where Buch_ID_SF = " _
    39. & "(SELECT BUCH_ID from tblBuch where BUCH_ID = " _
    40. & "(SELECT BUCH_ID_SF from tblSong_HptF WHERE Song LIKE '%" & txtSong.Text & "%'))"
    41. Try
    42. con.Open()
    43. reader = cmd.ExecuteReader()
    44. lboSong.Items.Clear()
    45. Do While reader.Read()
    46. lboSong.Items.Add( _
    47. reader("Song"))
    48. Loop
    49. reader.Close()
    50. con.Close()
    51. Catch ex As Exception
    52. MsgBox(ex.Message)
    53. End Try
    54. 'Bild laden
    55. If lboBuch.Text <> "" Then
    56. Path = ("C:\Dokumente und Einstellungen\user\Eigene Dateien\JAZZ ARCHIV\BuchCover\" & lboBuch.Text & ".jpg")
    57. pboCover.ImageLocation = Path
    58. End If
    59. End Sub


    Mit dienem Code in "listBox Buch füllen" wird mir nach wie vor ein Buch angezeigt,
    aber in "ListBox Song füllen" habe ich geschafft das die Songs vom angezeiten Buch, aufgelistet werden.

    Mein Problem besteht nach wie vor bei der Abfrage in "listBox Buch füllen".
    Vielleicht hast am Wochenende eine Idee Bekommen.

    lg

    toto
    lg toto