Fehler bei negativen Werten in IF- und SELECT CASE- Anweisungen
Tim M.
- programmiertechnik
0 Axel Richter0 Tim M.0 Axel Richter0 Tim M.
Hallo,
ich habe den folgenen Code in einer ASP-Seite um Serverseitige Fehler abzufangen und dem Benutzer Hilfen zu geben. (Hier löschen von Datensätzen mit referenzieller Integrität).
Jetzt ist der Fehlercode ein negativer Wert (-2147467259). Ich kann den negativen Wert jedoch nicht in der Select-Anweisung angeben, da die Variable strerlaeuterung mit dem CASE ELSE-Wert gefüllt wird.
Ich habe mir wie folgt geholfen:
---------------------------------------------------
intErr = request.querystring("err")
if intErr < 0 then
intErrNeu = intErr * (-1)
end if
Select Case intErrNeu
Case 2147467259 'eigentlich ein negativer Wert, aber -2147467259 funktioniert nicht
strErlaeuterung = "Da mit diesem Datensatz noch andere Datensätze verlinkt sind, kann dieser Datensatz erst gelöscht werden, wenn die untergeordneten Datensätze auch gelöscht sind."
Case else
strErlaeuterung = "Leider keine Erläuterung, da Fehler noch unbekannt!"
end select
---------------------------------------------------
Finde die Lösung aber sehr unglücklich. Kennt jemand das Problem? Oder stehe ich gerade kräftig auf dem Schlauch?
Gruß
tim
Hallo,
Jetzt ist der Fehlercode ein negativer Wert (-2147467259). Ich kann den negativen Wert jedoch nicht in der Select-Anweisung angeben, da die Variable strerlaeuterung mit dem CASE ELSE-Wert gefüllt wird.
Das liegt aber nicht daran, dass der Wert negativ ist. Es liegt daran, dass Select Case keine implizite Typumwandlung vornimmt, sondern den String "-2147467259" gegen den Wert -2147467259 abprüft. Entweder Du schreibst also
...
Case "-2147467259"
...
oder:
intErr = request.querystring("err")
'intErr ist also ein String
intErrNeu = clng(intErr)
Select Case intErrNeu
Case -2147467259
strErlaeuterung = "Da mit diesem Datensatz noch andere Datensätze verlinkt sind, kann dieser Datensatz erst gelöscht werden, wenn die untergeordneten Datensätze auch gelöscht sind."Case else
strErlaeuterung = "Leider keine Erläuterung, da Fehler noch unbekannt!"
end select
Anzumerken wäre noch, dass clng und nicht cint verwendet werden muss, da der Wert außerhalb des Integer-Wertebereichs liegt, aber innerhalb des Long-Wertebereichs.
viele Grüße
Axel
Hallo Axel,
danke für die Hilfe. Das ist ein guter Tipp. werde es gleich mal versuchen.
intErr = request.querystring("err")
'intErr ist also ein StringintErrNeu = clng(intErr)
habe aber auch mit isnumeric(intErr) die ganze Sache gecheckt gehabt... naja, vielleicht einer dieser "auf dem Schlauch" geschichten.
Gruß
Tim
Hallo,
habe aber auch mit isnumeric(intErr) die ganze Sache gecheckt gehabt...
*g*
Zitat aus der VBA-Hilfe von MS-Office:
_____________________________________________________________________
IsNumeric-Funktion
Gibt einen Wert vom Typ Boolean zurück, der angibt, ob ein Ausdruck als Zahl ausgewertet werden _kann_.
Syntax
IsNumeric(Ausdruck)
Das erforderliche Argument Ausdruck ist ein Wert vom Typ Variant und enthält einen numerischen Ausdruck oder einen Zeichenfolgenausdruck.
Bemerkungen
IsNumeric gibt den Wert True zurück, wenn der gesamte Ausdruck als Zahl interpretiert werden kann, andernfalls wird False zurückgegeben.
IsNumeric gibt False zurück, wenn Audruck ein Datumsaudruck ist.
_____________________________________________________________________
viele Grüße
Axel
Moin Axel,
Gibt einen Wert vom Typ Boolean zurück, der angibt, ob ein Ausdruck als Zahl ausgewertet werden _kann_.
na, so kommt man so langsam hinter die tieferen Geheimnisse... Danke Dir.
Gruß
Tim