Abfragen bei keiner Eingabe überspringen...

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von HerrFrie.

    Abfragen bei keiner Eingabe überspringen...

    Hallo VB-Forum,

    ich habe folgendes Problem:
    Und zwar habe ich vor einiger Zeit eine Datenbak erstellt und wollte jetzt ein Suchprogramm schreiben bei dem man nach meherern verschiedenen Einträgen suchen kann. Die Datenbank bei VB2010 zu importieren hab ich schon alles gemacht und hab mich dann an die Abfragen begeben. War eig. auch recht einfach. Bestimmte einträge konnte ich mit " LIKE ? + '%' " problemlos suchen. Nur wollte ich auch, dass die Abfrage mir alle Werte ausgibt, auch wenn ich nichts eingebe. Ich bekomm das einfach nicht gebacken! :cursing:

    Hier der SQL-Code

    SELECT System, Stromkreis, Lampennummer, Station, Schacht
    FROM Datenbank
    WHERE (System LIKE ? + '%') AND (Stromkreis LIKE ? + '%') AND (Schacht LIKE ? + '%')


    Wenn ich jetzt nur bei z.B. System einen Wert angebe, dann werden nur ergebnisse angezeigt, wo auch bei Stromkreis und Schacht Angaben sind. Also der filtert auch die NULL-angaben raus.

    Kurz gesagt: Wenn ich was eingebe, egal wo, soll der auch nur das anzeigen. Wenn ich nichts eingebe, egal wo, soll der alles anzeigen.

    Danke im Voraus!
    Also ich bin nicht sicher, ob ich das ganz richtig verstanden habe... aber wenn du (als Beispiel) alle Einträge anzeigen lassen willst, die bei System NULL enthalten, kannst du das so machen:

    SELECT System, Stromkreis, Lampennummer, Station, Schacht
    FROM Datenbank
    WHERE System IS NULL

    Gruss
    sandiro
    Das stimmt, aber das ist nicht ganz das an das ich dachte.

    z.B. ich suche in System nach "APH". dann wird ja auch nur "APH" ausgegeben. gebe ich bei der selben Abfrage nun garnichts ein, drücke also nur auf suchen, dann sollte alles angezeigt werden. Egal ob das jetzt "APH", NULL, oder was anderes ist.

    da ich bei der abfrage mehrere suchparameter habe (System, Stromkreis, etc.) und ich bei einem nichts eingebe, soll halt von diesem Feld alles ausgegeben werden. Das Ergebnis wird natürlich durch die anderen Suchkriterien weiter präzisiert.

    Gruß
    ahoi,

    dein problem sollte sein das du AND statt OR benutzt ...
    WHERE (System LIKE ? + '%') OR (Stromkreis LIKE ? + '%') OR (Schacht LIKE ? + '%')

    wenn du nach allen daten suchst brauchst du keine WHERE - klausel
    das solltest du vorher abragen und deinen sql string je nach ergebnis aufbauen lassen
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    ich hab mir deine frage nochmal richtig durchgelsen ...
    zum besseren verständnis du willst also sagen wir mal 3 attribute abfragen
    attr1
    attr2
    attr3
    du willst in je ein suchbegriff für jedes attribut eingeben können ...
    wenn du in einem nichts eingibst möchtest du das für dieses attribut alles ausgegeben wird ...
    soweit richtig ?

    das sollte nicht in einer query zu realisieren sein, also,
    entweder versucht du es mal mit UNION,
    schaust dir mal precedures an oder
    erstellst für jedes attribut eine query die ausgabe müsstest du dir dann natürlich dementsprechend aufbauen
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Hi LeFrogVB,

    erkläre doch mal genau, was an dem letzten Beispiel von Manü nicht den richtigen Effekt erziehlt.

    Möchtest du vielleicht dein Sucherergebnis so haben, dass wenn du in keinem Feld etwas einträgst, die gesamte Datenbak angezeigt wird ?
    Wird in irgendeinem Feld etwas eingetragen, dann werden nur die Datensätze gesucht, wo z.B. SYSTEM = sonstwas und
    wenn du in zwei Feldern etwas einträgst werden nur Datensätze gesucht, wo z.B. SYSTEM = sonstwas UND STROMKREIS = wasauchimmer ist ?

    Gruß
    HerrFrie
    @ HerrFrie

    Ja, genau so war es gedacht. und ich hab echt keine ahnung wie ich das anstellen soll.

    @Manü

    Ich hab das eben mal mit UNION versucht, aber irgendwie ist es dann egal was ich eingebe. es kommt immer alles, oder hab ich da was falsch eingegeben??

    SELECT System, Stromkreis, Lampennummer, Station, Schacht
    FROM Datenbank
    WHERE (System LIKE ? + '%')
    UNION
    SELECT System, Stromkreis, Lampennummer, Station, Schacht
    FROM Datenbank
    WHERE (Stromkreis LIKE ? + '%')

    Grüße
    nein das union scheinst du schon richtig genutzt zu haben und die ausgabe ist denke ich mal auch richtig,
    dann wirst du in einem workaround für jede eingabe eine eigene abfrage zur db schießen müssen und die ausgabe dann dementsprechend verarbeiten
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Hi,

    wie Manü schon sagte, mußt du dann für jede Mögliche Feldeingabe den Select Befehl anpassen. Soll heißen, dass bei einem leeren Suchfeld, dieses nicht mehr in der Select Anweisung enthalten sein darf.
    Habe hier mal was gebastelt, ist nicht schön, sollte aber funktionieren.

    VB.NET-Quellcode

    1. Dim SuchStr As String = ""
    2. Dim SelStr As String = "SELECT System, Stromkreis, Lampennummer, Station, Schacht FROM Datenbank WHERE"
    3. If System.Text <> "" Then SuchStr += " System LIKE '" & System.Text & "%'"
    4. If Stromkreis.Text <> "" And SuchStr <> "" Then SuchStr = SuchStr & " AND Stromkreis LIKE '" & Stromkreis.Text & "%'" Else SuchStr = SuchStr & " Stromkreis LIKE '" & Stromkreis.Text & "%'"
    5. If Lampennummer.Text <> "" And SuchStr <> "" Then SuchStr = SuchStr & " AND Lampennummer LIKE '" & Lampennummer.Text & "%'" Else SuchStr = SuchStr & " Lampennummer LIKE '" & Lampennummer.Text & "%'"
    6. If Station.Text <> "" And SuchStr <> "" Then SuchStr = SuchStr & " AND Station LIKE '" & Station.Text & "%'" Else SuchStr = SuchStr & " Station LIKE '" & Station.Text & "%'"
    7. If Schacht.Text <> "" And SuchStr <> "" Then SuchStr = SuchStr & " AND Schacht LIKE '" & Schacht.Text & "%'" Else SuchStr = SuchStr & " Schacht LIKE '" & Schacht.Text & "%'"
    8. SelStr = SelStr & SuchStr


    Wie Manü auch erwähnte, mußt du hierbei bei jeder Zeicheneingabe in einem Suchfeld diese Anweisung gegen die Datenbank fahren.
    Wie genau läßt du dir die gefundenen Datensätze denn anzeigen ?
    Wenn du diese in einem DataGridView anzeigen läßt, kannst du dir den ständigen Datenbankbeschuß sparen.
    Dann könntest du die komplette Datenbank einlesen, an ein DataView übergeben und die Filterung mittels DataView.RowFilter vornehmen. Die Filterung geschieht dann nur auf dem PC.