Nach einem Wert in Access DB suchen

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von fichz.

    Nach einem Wert in Access DB suchen

    Hallo,

    ich habe eine Access Datenbank mit über 500 Einträgen.
    Nun möchte ich in dieser Datenbank ein Paar Wörter suchen.
    Die Datenbank lade ich per Code:

    VB.NET-Quellcode

    1. Dim db As System.Data.OleDb.OleDbConnection = New System.Data.OleDb.OleDbConnection
    2. db.ChangeDatabase("C:\Database.mdb")
    3. db.Open()

    Code noch nicht getestet.
    Ich habe auch noch nie eine Db per Code geöffnet.

    So doch nun weiss ich nicht, wie ich nach den Einträgen suche soll.
    Also die Tabelle heisst "Wort" ohne "".

    Mit freundlichen Grüßen pc-freack
    Schau dir im OpenBook von Galileo Computing mal an, wie man ne Verbindung zu ner Access-Datenbank herstellt.
    Ist dort gut erklärt ...

    Danach kommts dann eigentlich drauf an, was du mit den gesuchten Wörtern vorhast.
    Du kannst z.B. einfach ne Select-Abfrage auf die Tabelle machen und erhälst dann die Ergebnismenge und auch die Anzahl der Ergebnisse.
    das nötige SQL-Statement um die Abfrage in der Datenbank zu machen wäre z.B.

    SQL-Abfrage

    1. SELECT * FROM Tabelle1 WHERE WORT1 like '%Hase%'


    Hier bei steht der * für die Ausgabe aller Datenfelder in dem Datensatz.
    Das % bei like steht als Platzhalter beliebiger Zeichen also würde z.B. auch 123Hase123 gefunden werden oder Hintere Hasenpfote.

    mehr Information über SQL-Statments findest hier:
    sqldocu.com/index.htm
    sql.1keydata.com/de/sql-select.php

    Und das verbinden zu Accesdatenbank geht wie du schon versuchst über einen OLEDB Adapter:
    openbook.galileocomputing.de/vb_net/msvb090003.htm#Xxx998129

    Gruß
    So,
    ich hab noch etwas gefunden und irgendwie funktioniert das nicht so richtig.

    Folgenen Code benutze ich:

    VB.NET-Quellcode

    1. Dim con As New OleDb.OleDbConnection
    2. Dim cmd As New OleDb.OleDbCommand
    3. Dim wort as string = RichTextbox1.text
    4. Dim reader As OleDb.OleDbDataReader
    5. con.ConnectionString = _
    6. "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    7. "Data Source=C:\test_db.mdb"
    8. cmd.Connection = con
    9. cmd.CommandText = "select * from Wort"
    10. Try
    11. con.Open()
    12. reader = cmd.ExecuteReader()
    13. While reader.Read
    14. If Not wort = reader(0) Then
    15. RichTextBox1.Find(wort, RichTextBoxFinds.WholeWord)
    16. RichTextBox1.SelectionFont = New Font(RichTextBox1.SelectionFont.Name, RichTextBox1.SelectionFont.Size, FontStyle.Underline, GraphicsUnit.Pixel)
    17. RichTextBox1.SelectedText = Nothing
    18. End If
    19. End While
    20. reader.Close()
    21. con.Close()
    22. Catch ex As Exception
    23. MsgBox(ex.Message)
    24. End Try

    Also ich möchte das wenn ich ein wort in eine Richtextbox schreibe das er überprüft, ob das Wort auch in der DB vorhanden ist. Bis jetzt passiert aber nicht und es kommt auch keine Fehlermeldung. Es passiert einfach nichts. Die Anwendung stürzt auch nicht ab.

    EDIT:
    In der DB gibt es nur die Tabelle "Wort".

    Mit freundlichen Grüßen pc-freack

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „pc-freack“ ()

    willst du überprüfen ob das wort vorhanden ist oder ob es NICHT vorhanden ist
    weil du abfragst:

    VB.NET-Quellcode

    1. If Not wort = reader(0) Then


    also ist das wort NICHT gleich mit DB und RichText dann soll er es formatieren

    lg

    EDIT:
    geh mal mitn debugger im einzelschritt durch und teste ob die IF abfrage zutrifft
    anschließend das gleiche mit

    VB.NET-Quellcode

    1. If wort = reader(0) Then
    also ich möchte alle in der DB durchgehen und wenn das Wort nicht vorhanden ist, soll der Code in der IF Abfrage ausgeführt werden.

    EDIT:

    So nun kommt folgene Fehlermeldung:

    Das Microsoft Jet-Datenbankmodul findet die Eingangstabelle oder Abfrage 'Wort' nicht. Stellen sie sicher, dass sie existiert und der Name richtig eingegeben wurde.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „pc-freack“ ()

    so hab mir die db mal angeschaut


    Sry, ich meinte eigentlich Tabelle "Wort" und nicht Spalte.


    Es ist die Spalte Wort. Tabellenname ist "Mapple Wörterbuch"
    Probier nun

    VB.NET-Quellcode

    1. cmd.CommandText = "select * from Mapple Wörterbuch"
    2. 'oder
    3. cmd.CommandText = "select * from [Mapple Wörterbuch]"


    dann wirds auch funzen.

    lg
    @ pc-freack: Kleiner Tipp: Du solltest dich mal etwas mit SQL auseinandersetzen, das ist in der Softwareentwicklung sehr vorteilhaft ;).
    Auch das Einhalten diverser Namenskonventionen ist nicht verkehrt. Ich bin kein Verfechter der 100%igen Einhaltung, aber Leerzeichen oder Umlaute in Tabellennamen, Variablen etc. sind ein no go! :whistling:

    Fonsi schrieb:

    Ich bin kein Verfechter der 100%igen Einhaltung, aber Leerzeichen oder Umlaute in Tabellennamen, Variablen etc. sind ein no go!

    /sign

    wenns schon 2 Wörter sein "müssen" dann mach nen unterstrich "_" Umlaute ändere in "ae", "ue" oder "oe" um. (bzw verwende gleich englische Bezeichnungen)

    lg
    Danke, die Fehlermeldung kommt nun nicht mehr doch ich habe noch das Problem, das er irgendwie den Text, obwohl er in der Db vorhanden ist, unterstreicht, was aber eigentlich nicht passieren soll.
    Ich habe noch die While Schleife geändert:

    VB.NET-Quellcode

    1. While reader.Read
    2. If Not wort = reader(0) Then
    3. RichTextBox1.Font = New Font(RichTextBox1.Font.Name, RichTextBox1.Font.Size, FontStyle.Underline, GraphicsUnit.Pixel)
    4. RichTextBox1.SelectedText = Nothing
    5. Else
    6. RichTextBox1.Font = New Font(RichTextBox1.Font.Name, RichTextBox1.Font.Size, FontStyle.Regular, GraphicsUnit.Pixel)
    7. RichTextBox1.SelectedText = Nothing
    8. Exit While
    9. End If
    10. End While



    EDIT:
    Also er prüft nur den Ersten Einrag, mehr aber nicht.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „pc-freack“ ()

    die Abfrage macht er ja aber nur beim ersten Eintrag in der DB und mehr Einträge überprüft er nicht.

    EDIT: habs nun hinbekommen. Ich hab das * in Wort geändert und jetzt geht es. Ich danke euch für die supper hilfe.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „pc-freack“ ()