Saadat: SQL-Afbrage funktioniert nicht

Hallo,

kann mir jemand weiterhelfen, warum folgende SQL-Abfrage alle Datensätze liefert. Eigentlich soll sie nur den Datensatz liefern, welcher die zu suchende PLZ enthält. Tabellenfelder "vonPLZ" und "bisPLZ" sind als Zahlenfelder definiert worden. strPLZ ist eine Postleitzahl, die von einem Formualr übermittelt wird.

------------------------------------------------------------------
strPLZ = int(Request("strPLZ"))
  
strSQL = "SELECT * FROM [Tabelle] WHERE [vonPLZ] > " & strPLZ & " OR [bisPLZ] < " & strPLZ & ""    
------------------------------------------------------------------

Danke im Voraus für Vorschläge!

Saadat

  1. »»  strSQL = "SELECT * FROM [Tabelle] WHERE [vonPLZ] > " & strPLZ & " OR [bisPLZ] < " & strPLZ & ""

    ok, ich hab zwar keine Ahnung von ASP aber probieren wir es mal:

    Ich vermute einen kleinen Logikfehler, denn:

    angenommen: strPLZ ist 30000

    daraus folgt:
    Die Bedingung vonPLZ > 30000 ist erfüllt für die PLZs von 30001 bis 99999
    Dei Bedingung bisPLZ < 30000 ist erfüllt für die PLZs von 0 bis 29999

    Mit der OR Verknüpfung (die gesammte Bedingung ist erfüllt, wenn eine Teilbedingung erfüllt ist) bekommst du dann alle PLZs außer der 30000
    d.h. genau den Datensatz den Du suchst, findest Du nicht.

    Denk einfach nochmal über Deine WHERE Bedingung nach :)

    Gruß
              Marcus

    1. »»  strSQL = "SELECT * FROM [Tabelle] WHERE [vonPLZ] > " & strPLZ & " OR [bisPLZ] < " & strPLZ & ""

      ok, ich hab zwar keine Ahnung von ASP aber probieren wir es mal:

      Ich vermute einen kleinen Logikfehler, denn:

      angenommen: strPLZ ist 30000

      daraus folgt:
      Die Bedingung vonPLZ > 30000 ist erfüllt für die PLZs von 30001 bis 99999
      Dei Bedingung bisPLZ < 30000 ist erfüllt für die PLZs von 0 bis 29999

      Mit der OR Verknüpfung (die gesammte Bedingung ist erfüllt, wenn eine Teilbedingung erfüllt ist) bekommst du dann alle PLZs außer der 30000
      d.h. genau den Datensatz den Du suchst, findest Du nicht.

      Denk einfach nochmal über Deine WHERE Bedingung nach :)

      Gruß
                Marcus

      ---------------------------------------------------------------
      Hallo,

      ich habe es auch mit einer AND-Verknüpfung versucht, denn dann wird die Suche auf einen bestimmten Bereich von Postleitzahlen eingegrenzt. Leider findet er dann keinen Datensatz mehr.

      Bitte um weiteren Vorschlag und danke im Voraus!

      Saadat

  2. Hallo,

    erst sehe mal nach ob überhaubt deine Variable "strPLZ" etwas beinhaltet.

    Response.Write(strPLZ)

    Es ist besser, dass du die erste Zeile so schreibst:
    strPLZ = TRIM(Request.Form("strPLZ"))

    Bei der Select-Abfrage musst du "And" schreiben un dnicht "OR".
    Schreib auch lieber >= und <= nicht > und <.

    Ansonsten kommt mir nichts Falsch vor.

    Sohail

    1. Hallo,

      erst sehe mal nach ob überhaubt deine Variable "strPLZ" etwas beinhaltet.

      Response.Write(strPLZ)

      Es ist besser, dass du die erste Zeile so schreibst:
      strPLZ = TRIM(Request.Form("strPLZ"))

      Bei der Select-Abfrage musst du "And" schreiben un dnicht "OR".
      Schreib auch lieber >= und <= nicht > und <.

      Ansonsten kommt mir nichts Falsch vor.

      Sohail

      -------------------------------------------------------------------
      Hallo Sohail,

      ich habe bereits überprüft, was and "strPLZ" übermittelt wird. Es ist die eingegebene PLZ. Ich habe auch versuch, sie durch den Befehl
      strPLZ = int(Request("strPLZ")) in Zahl umzuwandeln, falls sie als String übergeben wurde. Außerdem habe ich das ganze nochmal mit folgender SQL-Abfrage probiert:

      strSQL = "SELECT * FROM [Tabelle] WHERE [vonPLZ] >= " & strPLZ & " AND [bisPLZ] <= " & strPLZ & ""

      Leider gelingt noch immer nicht das gewünschte. Wenn du möchtest, kann ich dir die Dateien zu Prüfzwecken zumailen.

      Saadat

      1. Hallo,

        Keine schlechte Idee. Schick mir die Datei.

        Sohail