franky: ASP + If-Abfragen Problem

Hallo

Ich habe hier ein höchst interressantes Problem in ASP

Wenn ich in der IF Abfrage pos_max hineinschreibe springt es beim Aufruf automatisch in den else-Zweig!!
Gebe ich in der If-Abfrage statt pos_max einen nummerischen Wert an z.B.: 7, funktioniert es fehlerlos!

Woran kann das liegen??

<%
DIM pos_max, pos_neu

Diese Werte sind nur angenommen;
Später kommen diese aus einer COUNT(*) Datenbankabfrage!

pos_max = 7
pos_neu = 3
----------------------------------------------------------------
if pos_neu <= pos_max then
   ....Funktion aufrufen
else
   Response.write("Der Wert ist außerhalb des gültigen Bereichs!<br>Es müssen Werte zwischen 1 und " & pos_max & " eingegeben werden!")
end if
----------------------------------------------------------------
%>

Kann mir jemand weiterhelfen!

Danke schon im vorraus

mfg Franky

  1. Hello,

    Diese Werte sind nur angenommen;
    Später kommen diese aus einer COUNT(*) Datenbankabfrage!

    da werde ich hellhörig - tu uns bitte den Gefallen und zeige uns den Originalquellcode, vielleicht wird das Problem dann offensichtlicher. Vielleicht schlägt die Abfrage fehl und du ignorierst den Fehler? Vielleicht führst du einen Vergleich mit NULL durch?

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    Wenn du die Nadel im Heuhaufen nicht findest, zünde den Heuhaufen an.
    1. Hallo hier der ganze text

      Dim objConn, objRs, strSQL, strConnString, strSQLpos
        Dim ID , Bezeichnung, Reihenfolge, Cursortext, Position_neu, Hauptid, Position_alt

      ID = Request.Form("hidden")
        Hauptid = Request.Form("hidden1")
        Bezeichnung = Request.Form("mbezeichnung")
        Cursortext = Request.Form("mtext")
        Position_neu = Request.Form("folgenr")
        Position_alt = Request.Form("hidden2")

      Set objConn = Server.CreateObject("ADODB.Connection")
        strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=" & Server.MapPath("..") & "\db\Lacon.mdb;" & _
          "User Id=admin;" & _
          "Password=;"
        objConn.Open strConnString

      Set objRs = server.CreateObject("ADODB.Recordset")
        objRs.ActiveConnection = objConn

      strSQL = "SELECT COUNT(*) as izahl FROM tblMenuepunkt WHERE MHAUPTID "
        if HauptID = "NULL" then
         strSQL = strSQL + "is null"
        else
         strSQL = strSQL + "= " & Hauptid
        end if
        objRs.Source = strSQL
        objRs.open

      if Position_neu > 1 and position_neu <= objRs("izahl") then

      else
          Response.write("Der Wert ist außerhalb des gültigen Bereichs!<br>Es müssen Werte zwischen 1 und " &_
          objRs("izahl") & " eingegeben werden!")
        end if
      objRs.close
      Set objRS = nothing

      1. Hello,

        objRs.Source = strSQL

        Was ergibt Response.Write(strSQL)?

        objRs.open

        Was ergibt Response.Write(Err.Number)?

        if Position_neu > 1 and position_neu <= objRs("izahl") then

        Was ergibt Response.Write(objRs("izahl"))?

        MfG
        Rouven

        --
        -------------------
        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
        Ambition is the last refuge of failure.  --  Oscar Wilde (Irish Poet, Novelist, Dramatist and Critic, 1854-1900)
        1. Hi

          Hallo kommen wir zu den Antworten auf deine Fragen:

          Frage1:

          Was ergibt Response.Write(strSQL)?

          Ist nur die Ausgabe des SQL Statements:
          strSQL = "SELECT COUNT(*) as izahl FROM tblMenuepunkt WHERE MHAUPTID "

          Man sieht nur ob der String korrekt zusammengebaut ist!!
          Frage 1 beantwortet?

          Frage2:

          Was ergibt Response.Write(Err.Number)?

          Gibt die Fehlernummer an!
          Beantwortet?

          Frage3:

          Was ergibt Response.Write(objRs("izahl"))?

          Gibt die Anzahl der Count(*) Anfrage zurück z.b.: 7 Elemente
          Beantwortet?

          Nun ein paar Fragen meinerseits:

          1. Was haben diese Fragen mit meinem Problem zu tun?
          2. Kannst du mir bei der If-Abfrage helfen, also meinem Problem?

          mfg franky

          1. Hello,

            Hallo kommen wir zu den Antworten auf deine Fragen:

            na ja...

            Was ergibt Response.Write(strSQL)?
            Ist nur die Ausgabe des SQL Statements:
            strSQL = "SELECT COUNT(*) as izahl FROM tblMenuepunkt WHERE MHAUPTID "

            ich weiß was es tut - ich will wissen, was es bei DIR ausgibt!

            Man sieht nur ob der String korrekt zusammengebaut ist!!

            genau - und, ist er?

            Was ergibt Response.Write(Err.Number)?
            Gibt die Fehlernummer an!

            stimmt - und, steht bei dir eine drin?

            Was ergibt Response.Write(objRs("izahl"))?
            Gibt die Anzahl der Count(*) Anfrage zurück z.b.: 7 Elemente

            stimmt - ist das bei dir auch wirklich so, oder steht vielleicht was unerwartetes drin?

            1. Was haben diese Fragen mit meinem Problem zu tun?

            das ist ein Spiel, das man gemeinhin "Fehlersuche" nennt. Der Reihe nach schauen, ob die Teilergebnisse den Erwartungen entsprechend, denn das von dir beschriebene Problem sollte eigentlich nicht existieren, der Fehler muss also von irgendwo herkommen.

            1. Kannst du mir bei der If-Abfrage helfen, also meinem Problem?

            gerne, darum habe ich die Fragen gestellt...

            MfG
            Rouven

            --
            -------------------
            sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
            I will never understand why Germans feel the need to kill trees  --  Arbeitskollege aus UK zum Thema ob eine Dokumentation elektronisch oder auf Papier ausgeliefert wird
            1. Hi

              bitte entschuldige und danke, dass sich das geklärt hat!

              Der String stimmt; so steht es im Response.write(strSQL)
              SELECT COUNT(*) as izahl FROM tblMenuepunkt WHERE MHAUPTID is null
              Weiters steht "0" als Fehlernummer drinnen!!
              Ich hab es schon probiert mit Response.write(objRs("izahl")) und es kommt immer eine ganze Zahl wie z.b.: 7 heraus!

              Kannst du mir trotzdem helfen??

              mfg Florian

              1. Hello,

                Kannst du mir trotzdem helfen??

                also nach allem was ich bisher gelesen habe fällt mir eine Lösung tatsächlich schwer. Wenn du als letztes noch sicherstellen kannst, dass in position_neu tatsächlich eine Zahl zwischen 1 und 7 drinsteht, dann wird's haarig.
                Eigentlich kümmert sich VBScript nicht um Datentypen, d.h. es sollte egal sein, ob der Request den Wert als String liefert.
                Du könntest höchstes nochmal probieren, die Abfrage so umzuschreiben:
                if CInt(Position_neu) > 1 and CInt(position_neu) <= objRs("izahl") then

                MfG
                Rouven

                --
                -------------------
                sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                Ambition is the last refuge of failure.  --  Oscar Wilde (Irish Poet, Novelist, Dramatist and Critic, 1854-1900)
                1. Hallo Rouven!

                  Danke für deine Hilfe, die sehr hilfreich war!
                  »»if CInt(Position_neu) > 1 and CInt(position_neu) <= objRs("izahl") then

                  Cint hat mir sehr geholfen und das Beste ist es funktioniert!

                  Ist dir dieses Problem schon öfters unter die Ohren gekommen, das bei der Übergabe mit Request.Form() alles in einen String umgewandelt wird??

                  Danke nochmals für deine Hilfe!

                  mfg Florian

                  1. Hello,

                    Ist dir dieses Problem schon öfters unter die Ohren gekommen, das bei der Übergabe mit Request.Form() alles in einen String umgewandelt wird??

                    ja und nein.
                    Ja, weil in so ziemlich allen mir bekannten Webtechniken die Parameter auf Strings reduziert und niemals automatisch in ein anderes Format verwandelt werden, das übernehmen eher aufgesetzte Frameworks für dich.
                    Nein, weil mir VBScript noch nie bewusst so bockig untergekommen ist, dass es die Variable nicht automatisch in eine Zahl verwandelt hat.

                    MfG
                    Rouven

                    --
                    -------------------
                    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                    Unser Problem ist, dass wir eine Demokratie entwickelt haben, was nicht immer der richtige Weg ist  --  Bernie Ecclestone zu den lästigen Diskussionen um Regeländerungen in der Formel 1
                2. Mahlzeit,

                  Eigentlich kümmert sich VBScript nicht um Datentypen, d.h. es sollte egal sein, ob der Request den Wert als String liefert.

                  Und genau DA liegt das Problem. Auch wenn innerhalb von VBScript "eigentlich" nur der Variablentyp "Variant" vorkommt, so gibt es intern doch unterschiedliche Datentypen (siehe Funktion "VarType()"). Und insbesonders in Verbindung mit verschiedenen Datenbanktreibern (ich habe diese Erfahrung mit Oracle-Treibern machen dürfen/müssen) verhaspelt sich VBScript da mal sehr gerne, so dass es irgendwie nicht in der Lage ist, das Typecasting - wie sonst - automagisch "on-the-fly" durchzuführen.

                  Insofern ist Dein Vorschlag mit einem expliziten "CInt()" (oder auch "CLng()") nicht nur sinnvoll, sondern AFAIK die einzig hilfreiche Alternative ...

                  MfG,
                  EKKi

                  --
                  sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
      2. Hi,

        if Position_neu > 1 and position_neu <= objRs("izahl") then

        ist Groß-/Kleinschreibung egal? Einmal ist das p, einmal P am Anfang des Namens.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Hello,

          ist Groß-/Kleinschreibung egal? Einmal ist das p, einmal P am Anfang des Namens.

          in VB(Script) eigentlich ja, das geht soweit, dass dir die Microsoft IDEs zumeist die Schreibweise automatisch so angleichen, wie sie sie für richtig halten.

          MfG
          Rouven

          --
          -------------------
          sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
          There's no such thing as a free lunch  --  Milton Friedman
          1. Hi,

            ist Groß-/Kleinschreibung egal? Einmal ist das p, einmal P am Anfang des Namens.
            in VB(Script) eigentlich ja,

            ok, ich benutz VB so gut wie gar nicht.

            das geht soweit, dass dir die Microsoft IDEs zumeist die Schreibweise automatisch so angleichen, wie sie sie für richtig halten.

            Wieder mal ein Fall von "Microsoft will besser wissen, was der User/Programmierer haben will."

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            O o ostern ...
            Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.