Suche optimieren (Case Sensitive nicht beachten)

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von surfer09.

    Suche optimieren (Case Sensitive nicht beachten)

    Guten Abend,ich bräuchte einmal Hilfe bei meinem Programm. Im Code unten ist die Suche definiert, um einen Text in einer geladenen Excel Tabelle zu suchen. Aktuell sucht das Programm aber Case Sensitive, das möchte ich eigentlich vermeiden. Das Programm soll die Groß-/Kleinschreibung bei der Suche nicht beachten. Hat jemand einen Tipp für mich?
    Außerdem wäre es gut, wenn im Suchfeld mehrere Wörter eingetragen werden, dass die Suche das auch hinbekommt. Aktuell kommt die Suche nur mit einem Wort klar.
    Beispiel: In der Tabelle steht: "Morgen ist Sonntag, der 4.10." Finden kann ich den Eintrag jetzt nur über ein Suchwort "Montag", oder "Sonntag". Ich würde gerne "Morgen 4.10." eingeben können.
    Ich hoffe, ich konnte mein Anliegen einigermaßen erklären, ansonsten gerne nochmal fragen. ;)


    VB.NET-Quellcode

    1. Sub anzeigesuche()
    2. ' Excel-Tabelle anzeigen
    3. Dim oDs As System.Data.DataSet
    4. Dim oConn As System.Data.OleDb.OleDbConnection
    5. Dim oAdapter As System.Data.OleDb.OleDbDataAdapter
    6. ' Pfad und Tabellennamen bitte anpassen!
    7. ' Connection-String für die DB.Verbindung zur Excel-Datei
    8. Dim sConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" &
    9. "Data Source=" & MDIParent1.path & ";" &
    10. "Extended Properties=Excel 8.0;"
    11. ' Connection herstellen
    12. oConn = New System.Data.OleDb.OleDbConnection(sConn)
    13. ' Excel-Tabelle referenzieren
    14. ' Hinweis: Tabellenname muss mit abschließendem $-Zeichen und
    15. ' in eckigen Klammern stehen
    16. Dim text As String
    17. text = txt_suche.Text
    18. oAdapter = New System.Data.OleDb.OleDbDataAdapter(
    19. "SELECT * FROM [" & sTable & "$] WHERE Beschreibung LIKE '*" & text & "*'", oConn)
    20. ' DataSet erstellen und mit Daten aus dem DataAdapter füllen
    21. oDs = New System.Data.DataSet
    22. Try
    23. oAdapter.Fill(oDs)
    24. ' DataGrid füllen und Daten anzeigen
    25. With DataGrid1
    26. .DataSource = oDs.Tables(0)
    27. .ReadOnly = True
    28. .Refresh()
    29. End With
    30. Catch ex As Exception
    31. MessageBox.Show(ex.Message)
    32. Finally
    33. ' DB-Verbindung schließen
    34. oConn.Close()
    35. End Try
    36. faerben()
    37. End Sub


    Quelle: vbarchiv.net/tipps/tipp_1575.html


    *Thread-Label und Code-Tag auf VB.NET geändert*

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „surfer09“ ()

    Möge die Moderation diesen meinen nicht als Moderator geschriebenen Post bewerten und ggf. löschen, aber:
    Man nehme 1:1-Code aus dem vb@rchiv, füge seine Wünsche an und hoffe, dass jemand anderes den Fremdcode anpasst. Veralbern kann ich mich selbst.
    Wenn Du nicht weiß, wie der Code genau arbeitet, dann wäre es zumindest angebracht, Deine Quellen zu nennen und Deinen Wissenstand kenntlich zu machen, aber so ist es einfach nur dreist.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Sorry, das der Code aus irgendwelchen Archiven stammt wusste ich nicht, sonst hätte ich es sicherlich dazu geschrieben.
    Ich finde es dreist einfach so drauf los zu preschen und andere Benutzer hier so zu verurteilen. Es gibt mit Sicherheit auch noch weitere, die hiervon lernen können und wollen.
    Ich bin was Programmierung angeht kein Profi, deswegen suche ich mir ja Hilfe.
    Ist das abgefackt, du gibts indirekt zu abgeschrieben zu haben ohne die Quelle zu nennen und greifst um von dem Scheiß abzulenken einen Moderator an? Super Idee.
    Um einen wenigsten kleinen nicht-OT-Beitrag zu leisten. Sagt dir String.ToUpper oder String.ToLower etwas? Man kann so wunderbar Case-Insensitive suchen.
    Nochmal: Sorry, ich wusste nicht das der Code von einer Seite in einem VB Archiv stammt. Ich habe das Programm so bekommen und wollte die Suche etwas optimieren, daher habe ich hier um Hilfe gefragt.

    Die genannten Funktionen sagen mir aber so nichts - wie gesagt ich bin totaler Anfänger auf dem Gebiet. Ich gehe aber davon aus, dass diese in der Select-Anweisung eingebaut werden müssen?

    Quellcode

    1. Dim text As String
    2. text = txt_suche.Text
    3. oAdapter = New System.Data.OleDb.OleDbDataAdapter(
    4. "SELECT * FROM [" & sTable & "$] WHERE Beschreibung LIKE '*" & text & "*'", oConn)



    P.S. Die Quelle ist nun auch hinterlegt.
    Gruß surfer
    Das habe ich nun davon, dass ich mir den Quellcode nicht angeguckt habe. Tatsächlich habe ich von Oledb keine Ahnung, habe aber diese Seite hier gefunden:
    stackoverflow.com/questions/15…-make-it-case-insensitive
    Dabei spielt die Sprache (C#) hier keine Rolle, must mal schauen ob es dir hilft.

    Ok, dass du den Code selbst so bekommen hast, ist natürlich dann schon echt unglücklich gelaufen. Dafür angeblafft zu werden hast du dann sicherlich auch nicht verdient.
    Andererseits ist so eine Vorgehensweise hier leider alles andere als unüblich, daher kann *ich* auch @VaporiZed seine Reaktion verstehen. Musst du nicht, ist okay.
    mit dem % Zeichen solltest du erfolgreicher sein

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. objConnection = New OleDbConnection(strConnectionString)
    3. Dim text As String = "Petra"
    4. 'select Tabelle
    5. 'objCommand = New OleDbCommand("SELECT * FROM [TestP$]", objConnection)
    6. 'select Range
    7. 'objCommand = New OleDbCommand("SELECT * FROM [TestP$C6:K10]", objConnection)
    8. 'select mit Suchwort
    9. 'CompanyName und Contactname sind in der ersten Zeile als Header
    10. objCommand = New OleDbCommand("SELECT CompanyName, ContactName FROM [TestP$] Where ContactName Like '%" & text & "%'", objConnection)
    11. 'WHERE Beschreibung LIKE '*" & text & "*'"
    12. objDataAdapter = New OleDbDataAdapter
    13. objDataAdapter.SelectCommand = objCommand
    14. objDataTable = New System.Data.DataTable
    15. objDataAdapter.Fill(objDataTable)
    16. DataGridView1.DataSource = objDataTable.DefaultView
    Das ist ja komisch. Schau mal hier, wie das bei mir aussieht (siehe Screenshots). Im Code ist jetzt die %-Version im Einsatz.
    Er findet den Eintrag nur, wenn er so geschrieben wird, wie er in der Tabelle steht.

    Quellcode

    1. Dim text As String
    2. text = txt_suche.Text
    3. oAdapter = New System.Data.OleDb.OleDbDataAdapter(
    4. "SELECT * FROM [" & sTable & "$] WHERE Beschreibung Like '%" & text & "%'", oConn)
    Bilder
    • Suche_1.jpg

      40,48 kB, 799×134, 70 mal angesehen
    • Suche_2.jpg

      36,68 kB, 662×139, 57 mal angesehen
    • Suche_3.jpg

      30,55 kB, 538×143, 59 mal angesehen
    Der Like-Operator arbeitet möglicherweise unterschiedlich. Zumindest in vb kann man eine Option setzen, die Case-(in)-Sensitivität festlegt.
    aber dieser Like-Operator arbeitet ja auf der (Pseudo-)DB. Eventuell gibts da ja auch so Einstellungen.

    Aber ich würde die Tabelle komplett in die DataTable laden, und selbige dann mit vb.net-Mitteln durchwühlen.
    Hi surfer

    mache es jetzt so...
    ändere natürlich Tabellenname etc....

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Public Class Form1
    3. Private objConnection As OleDbConnection
    4. Private objCommand As OleDbCommand
    5. Private objDataAdapter As OleDbDataAdapter
    6. Private objDataTable As System.Data.DataTable
    7. Private PathExcelFile As String = "E:\vbexcel2.xls"
    8. Private strConnectionString As String = _
    9. "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & PathExcelFile & ";" _
    10. & "Extended Properties=""Excel 8.0;HDR=Yes"""
    11. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    12. objConnection = New OleDbConnection(strConnectionString)
    13. Dim text As String = "Petra"
    14. 'select Tabelle
    15. 'objCommand = New OleDbCommand("SELECT * FROM [TestP$]", objConnection)
    16. 'select Range
    17. 'objCommand = New OleDbCommand("SELECT * FROM [TestP$C6:K10]", objConnection)
    18. 'select mit Suchwort
    19. 'CompanyName und Contactname sind in der ersten Zeile als Header
    20. objCommand = New OleDbCommand("SELECT CompanyName, ContactName FROM [TestP$] Where ContactName Like '%" & text & "%'", objConnection)
    21. objDataAdapter = New OleDbDataAdapter
    22. objDataAdapter.SelectCommand = objCommand
    23. objDataTable = New System.Data.DataTable
    24. objDataAdapter.Fill(objDataTable)
    25. DataGridView1.DataSource = objDataTable.DefaultView
    26. objDataAdapter = Nothing
    27. objCommand = Nothing
    28. objConnection = Nothing
    29. End Sub
    30. End Class


    habe jetzt auch dein Code probiert, und bekomme das gleiche Ergebnis wie in Post#10
    so keine Ahnung was du machst, erstelle mal an neues Projekt und schau ob es funktioniert

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    2. anzeigesuche()
    3. End Sub
    4. Sub anzeigesuche()
    5. ' Excel-Tabelle anzeigen
    6. Dim oDs As System.Data.DataSet
    7. Dim oConn As System.Data.OleDb.OleDbConnection
    8. Dim oAdapter As System.Data.OleDb.OleDbDataAdapter
    9. Dim PathExcelFile As String = "E:\vbexcel2.xls"
    10. Dim sConn As String = _
    11. "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & PathExcelFile & ";" & "Extended Properties=""Excel 8.0;HDR=YES"""
    12. '--------------------------------------------------------
    13. ' Connection herstellen
    14. oConn = New System.Data.OleDb.OleDbConnection(sConn)
    15. ' Excel-Tabelle referenzieren
    16. ' Hinweis: Tabellenname muss mit abschließendem $-Zeichen und
    17. ' in eckigen Klammern stehen
    18. Dim text As String
    19. text = "Petra"
    20. Dim sTable As String = "TestP"
    21. oAdapter = New System.Data.OleDb.OleDbDataAdapter(
    22. "SELECT * FROM [" & sTable & "$] WHERE ContactName LIKE '%" & text & "%'", oConn)
    23. ' DataSet erstellen und mit Daten aus dem DataAdapter füllen
    24. oDs = New System.Data.DataSet
    25. Try
    26. oAdapter.Fill(oDs)
    27. ' DataGrid füllen und Daten anzeigen
    28. With DataGridView1
    29. .DataSource = oDs.Tables(0)
    30. .ReadOnly = True
    31. .Refresh()
    32. End With
    33. Catch ex As Exception
    34. MessageBox.Show(ex.Message)
    35. Finally
    36. ' DB-Verbindung schließen
    37. oConn.Close()
    38. End Try
    39. 'faerben()
    40. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kasi“ ()