ASP + If-Abfragen Problem
franky
- programmiertechnik
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
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
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
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
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:
mfg franky
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?
- 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.
- Kannst du mir bei der If-Abfrage helfen, also meinem Problem?
gerne, darum habe ich die Fragen gestellt...
MfG
Rouven
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
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
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
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
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
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
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
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