Daten Abfrage eine Tabelle mehrere Spalten als Bedingung

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    Daten Abfrage eine Tabelle mehrere Spalten als Bedingung

    Hallo Forum,

    ich hänge an einem Problem fest.

    ich habe in einer Datenbank die folgenden Datensätze



    Ich versuche mich mit diesem Code

    VB.NET-Quellcode

    1. da = New OleDbDataAdapter("SELECT * FROM Daten WHERE Verantwortlicher = 'Bergmann' AND Bereich1 <4 AND Bereich2 <4 AND Bereich3 <4 AND Bereich <4", conn)

    Nach Auswahl des Verantwortlichen, sollen alle Datensätze angezeigt werden welche NICHT in allen Bereichen eine 4 haben
    Also nur die Datensätze 2 und 4 , doch bei mir werden immer alle Datensätze angezeigt
    Leider bekomme ich dies nicht auf die Reihe.

    Könnte mir bitte jemand auf die Sprünge helfen? ?(

    Grüße aus dem Schwabenland

    Rudi
    So vielleicht:
    da = New OleDbDataAdapter("SELECT * FROM Daten WHERE Verantwortlicher = 'Bergmann' AND (Bereich1 <>4 Or Bereich2 <>4 or Bereich3 <>4 or Bereich <>4)", conn)

    Edit: Ne, das isses glaub doch nicht :)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Morlock schrieb:

    Also nur die Datensätze 2 und 4 , doch bei mir werden immer alle Datensätze angezeigt
    Nach deiner Tabelle sollte nur die Zeile 2 ausgegegeben werden und abgsehen von SQL-Injection - ich glaube, deine Zahlen (1-4) sind keine Zahlen sondern Textzeichen...
    In der Accesstabelle sind diese links und nicht rechts angeordnet -> d.h. dann eigentlich der Inhalt der Zellen ist Text...
    Dann erklärt sich auch, dass alle Zeilen angezeigt werden!

    SQL-Abfrage

    1. SELECT * FROM Daten WHERE Verantwortlicher =
    2. 'Bergmann' AND Bereich1 <>4 AND Bereich2 <>4 AND Bereich3 <>4 AND Bereich <>4
    Vorausgesetzt Bereich, Bereich1, Bereich2, Bereich3 sind "alle Bereiche".
    (ups - viiel zu spät - das war ja schon post#2 - aber wieso sagt mrMo:

    mrMo schrieb:

    dit: Ne, das isses glaub doch nicht
    ?)

    Ah! So:

    SQL-Abfrage

    1. SELECT * FROM Daten WHERE Verantwortlicher = 'Bergmann' AND NOT(Bereich1 =4 OR Bereich2 =4 OR Bereich3 =4 OR Bereich =4)


    Zu probieren wäre auch mal:

    SQL-Abfrage

    1. SELECT * FROM Daten WHERE Verantwortlicher = 'Bergmann' AND NOT(4 in (Bereich, Bereich1, Bereich2, Bereich3))
    Aber dassis zugegebenermassen experimentell

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Schätze das hier sollte passen:

    SELECT * FROM Daten WHERE Verantwortlicher = 'Bergmann' AND NOT(Bereich1 =4 AND Bereich2 =4 AND Bereich3 =4 AND Bereich =4)

    Verantwortlicher muss Bergmann sein und in allen Bereichen darf nicht die 4 stehen.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Hallo,
    das ging ja schnell mit der Antwort.
    hätte ich auch selbst drauf kommen können, ich hatte auch an 'NOT' gedacht, wusste aber nicht wie ich Ihn verwende.

    danke an Euch alle für die Hilfe,
    ​ich habe den Post#2 von mrMO :thumbsup: verwendet dieser funktioniert bestens

    VB.NET-Quellcode

    1. ​SELECT * FROM Daten WHERE Verantwortlicher = 'Bergmann' AND NOT(Bereich1 =4 AND Bereich2 =4 AND Bereich3 =4 AND Bereich =4)


    ​Danke :)
    fein - aber magst du den hier auch noch probieren?

    SQL-Abfrage

    1. SELECT * FROM Daten WHERE Verantwortlicher = 'Bergmann' AND NOT(4 in (Bereich, Bereich1, Bereich2, Bereich3))

    Wäre für mich nützlich, das zu wissen - und hier habich keine entsprechende Db + Db-Anwendung, und Sqlserver geht bei mir nicht.
    Hallo ErfinderDesRades

    ErfinderDesRades schrieb:

    fein - aber magst du den hier auch noch probieren?

    SQL-Abfrage

    1. SELECT * FROM Daten WHERE Verantwortlicher = 'Bergmann' AND NOT(4 in (Bereich, Bereich1, Bereich2, Bereich3))

    Wäre für mich nützlich, das zu wissen - und hier habich keine entsprechende Db + Db-Anwendung, und Sqlserver geht bei mir nicht.


    hatte ich selbstverständlich auch getestet, da mir die verkürzte Schreibweise gefiel.
    Doch bei deinem Code kommt dieser Fehler.


    Gruß Rudi

    ErfinderDesRades schrieb:

    Wäre für mich nützlich, das zu wissen

    Also mit OleDB funktioniert so ein SQL-Command für Access-DB...

    VB.NET-Quellcode

    1. Dim sql = "SELECT * FROM Tabelle1 WHERE Verantwortlicher = 'Bergmann' AND NOT('4' IN (Bereich1, Bereich2, Bereich3, Bereich4))"

    Aber wichtig, die Zahlen in Gänsefüßchen zu stellen, wenn's um Textspalten geht - was ich oben nicht ganz glaube, dass es ohne funktioniert, wenn ich die Tabelle sehe...
    Hallo VB1963,
    ​ich Danke für Deine kritische Anmerkung und Du hast recht.
    ​Der Screen der Tabelle aus meinem Post #1 ist auf die schnelle aus meiner umfangreichen Datenbank kopiert.
    ​Es handelt sich in den Bereichen 1-4 um Integer.

    ​Wenn aber der Bereich 1-4 als Text formatiert wäre (habe gerade getestet), läuft Dein Code

    VB.NET-Quellcode

    1. ​Dim sql = "SELECT * FROM Tabelle1 WHERE Verantwortlicher = 'Bergmann' AND NOT('4' IN (Bereich1, Bereich2, Bereich3, Bereich4))"

    ohne Fehler durch.
    Enthält aber nicht das gewünschte Ergebnis, da überhaupt keine Bereiche mehr mit 4 angezeigt werden.

    ​Du erinnerst Dich an meinen Eingangspost, mit der Aufgabenstellung,
    ​dass nur die Bereiche bei welchen allen eine 4 steht, NICHT angezeigt werden.

    ​Daher bringt der Code von mrMo

    VB.NET-Quellcode

    1. SELECT * FROM Daten WHERE Verantwortlicher = 'Bergmann' AND NOT(Bereich1 =4 AND Bereich2 =4 AND Bereich3 =4 AND Bereich =4)​

    das richtige Ergebnis.

    ​Danke an alle
    ​Gruß Rudi