Toon posts:

[ASP] If Then Else

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hey peeps ben ik nou gek of zie ik iets over het hoofd:

Tabel:
code:
1
2
3
4
vooraad          waarschuwen
252                       1000
2000                     1000
1000                     600


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(gedoe naar database)

Do While NOT oRS.EOF 

vooraad=oRS("vooraad")
waarschuwen=oRS("Waarschuwen")

Response.write vooraad 
Response.Write("is")

If vooraad < Waarschuwen Then
response.write("Kleiner dan") 
Else 
Response.Write("Groter dan")
End If

Response.write waarschuwen
Response.Write("<br><br>")


oRS.MoveNext

Loop


code:
1
2
3
4
5
6
7
De uitkomst die ik verwacht is:

252isKleiner dan1000

2000isGroter dan1000

1000isGroter dan600


Maar de uitkomst is overal hetzelfde

code:
1
2
3
4
5
6
7
echte uitkomst:

252isKleiner dan1000

2000isKleiner dan1000

1000isKleiner dan600


Wat is nou het probleem ?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

Visual Basic .NET:
1
If CInt(vooraad) < CInt(Waarschuwen) Then

Probeer dat eens.

[ Voor 22% gewijzigd door NMe op 16-11-2004 14:14 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

Ik vermoed een typfout. Ook bij een alfanumerieke vergelijking zou de uitkomst anders zijn nl. Heb je niet op de ene plek voorraad en de andere plek vooraad getypt misschien :?

offtopic:
hmm, of toch niet dus :P 8)7

[ Voor 11% gewijzigd door j_du_pee op 16-11-2004 14:18 ]

kaart != map && bottel != fles
Wacht op antwoord


Verwijderd

Topicstarter
Sjee dat werkt meteen
Ik ga eens even wat meer uitzoeken wat dat CInt() nou precies is

Hardstikke bedankt

Edit:
j_du_pee schreef op dinsdag 16 november 2004 @ 14:17:
Ik vermoed een typfout. Ook bij een alfanumerieke vergelijking zou de uitkomst anders zijn nl. Heb je niet op de ene plek voorraad en de andere plek vooraad getypt misschien :?
Nee ik heb alles wel 6x na gekeken voordat ik het hier poste

[ Voor 63% gewijzigd door Verwijderd op 16-11-2004 14:18 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16:38

Janoz

Moderator Devschuur®

!litemod

Ik zie iig waarschuwen een keer met een kleine en een keer met een grote W staan. Misschien is dat het?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Cyphax
  • Registratie: November 2000
  • Nu online

Cyphax

Moderator LNX
Janoz schreef op dinsdag 16 november 2004 @ 14:17:
Ik zie iig waarschuwen een keer met een kleine en een keer met een grote W staan. Misschien is dat het?
Is VBScript niet case-insensitive?

edit:
Ik bedoel met variabelen, "if" werkt hier net zo goed als "If" verder.

[ Voor 14% gewijzigd door Cyphax op 16-11-2004 14:19 ]

Saved by the buoyancy of citrus


Verwijderd

Topicstarter
Janoz schreef op dinsdag 16 november 2004 @ 14:17:
Ik zie iig waarschuwen een keer met een kleine en een keer met een grote W staan. Misschien is dat het?
Maakt niets uit. Wat NMe84 zei werkt met of zonder hoofdletters

[ Voor 6% gewijzigd door Verwijderd op 16-11-2004 14:19 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

Verwijderd schreef op dinsdag 16 november 2004 @ 14:17:
Sjee dat werkt meteen
Ik ga eens even wat meer uitzoeken wat dat CInt() nou precies is

Hardstikke bedankt
CInt() wordt gebruikt om bijvoorbeeld een string te casten naar een integer. Wanneer jij data ophaalt uit een recordset, dan krijg je een fieldset terug (geloof ik), en die kun je niet vergelijken met elkaar.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • TheVMaster
  • Registratie: Juli 2001
  • Laatst online: 15:58

TheVMaster

Moderator WOS
Verwijderd schreef op dinsdag 16 november 2004 @ 14:18:
[...]

Maakt niets uit. Wat NMe84 zei werkt met of zonder hoofdletters
CINT= Convert string naar getal?
net zoals
CSTR = Convert getal naar string?

Nieuw: DiscVault — Beheer je fysieke schijvenverzameling | DiscVault


Verwijderd

Topicstarter
NMe84 schreef op dinsdag 16 november 2004 @ 14:19:
[...]

CInt() wordt gebruikt om bijvoorbeeld een string te casten naar een integer. Wanneer jij data ophaalt uit een recordset, dan krijg je een fieldset terug (geloof ik), en die kun je niet vergelijken met elkaar.
Aha bedankt voor de uitleg, weer wat geleerd

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

TheVisionMaster schreef op dinsdag 16 november 2004 @ 14:20:
CINT= Convert string naar getal?
net zoals
CSTR = Convert getal naar string?
Niet alleen getal naar string en terug, maar daar is genoeg over te vinden in de documentatie van Microsoft. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

Weet je, eigenlijk blijf ik erbij dat het een typfout was :) Als je namelijk nu CINT vervangt voor Cstr zou je de omgekeerde output moeten krijgen, of iig niet 3 maal hetzelfde ;)

Kun je voor de grap die cint() eens weghalen en de variabele laten staan :?

offtopic:
besef dat ik irritant ben, maar ik wil het ff zeker weten

kaart != map && bottel != fles
Wacht op antwoord


  • ZeilDude
  • Registratie: Juli 2004
  • Laatst online: 19-02-2022
Met VarType(variabele) krijg je waarde terug, waarmee je kunt zien wat voor type je variabele is. Krijg je een 2 terug, dan is het een integer, krijg je een 8 terug, dan is het een string.

Probeer dus maar eens:
code:
1
Response.Write(VarType(voorraad))
Je krijgt dan waarschijnlijk het getal 8 te zien.

Voor meer informatie over VarType: MSDN Library - VarType. Hier zie je ook alle waarden die je terugkrijgt en welke typen ze vertegenwoordigen.

Aanvullend:
Wat CInt dus doet, is de VarType omzetten naar 2 (indien mogelijk). Een tekst kun je natuurlijk niet omzetten naar een integer.
Behalve CInt gebruik ik CDat, om een string expliciet om te zetten naar een datum. Zie ook hiervoor MSDN, daar is veel goede informatie.

[ Voor 23% gewijzigd door ZeilDude op 16-11-2004 14:49 ]


  • jvo
  • Registratie: Augustus 2001
  • Laatst online: 04-10-2023

jvo

geen commentaar

Komt er uit een recordset niet gewoon een int rollen indien dit in de database ook een int is? Anders is die CInt wel nodig.

En qua typefout. Tja, het is voorraad.

  • ZeilDude
  • Registratie: Juli 2004
  • Laatst online: 19-02-2022
jvo schreef op dinsdag 16 november 2004 @ 14:44:
Komt er uit een recordset niet gewoon een int rollen indien dit in de database ook een int is? Anders is die CInt wel nodig.

En qua typefout. Tja, het is voorraad.
Zoals gezegd, juist dit kun je mooi controleren met VarType. Meestal komt er uit mijn database(query) een array rollen, die ik waarde voor waarde inlees. Met CInt weet je wel 100% zeker dat je een integer te pakken hebt.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
ZeilDude schreef op dinsdag 16 november 2004 @ 14:51:
[...]


Zoals gezegd, juist dit kun je mooi controleren met VarType. Meestal komt er uit mijn database(query) een array rollen, die ik waarde voor waarde inlees. Met CInt weet je wel 100% zeker dat je een integer te pakken hebt.
Ik ben er niet zo voor om CInt te gebruiken, want die klapt er uit als het groter dan 32767 is. Gebruik dan nog liever CLng of nog beter CCur voor een Long respectievelijk Currency. Die bereiken zijn wat groter (en bij Currency heb je nog het voordeel van decimalen). Maar dat wordt ook natuurlijk al afgevangen door je database (die velden hebben immers een bepaald type, en ik neem aan dat dat geen varchar/string is? Daar stem je je CXxx natuurlijk op af).

En wat misschien nog beter werkt is dit:
code:
1
2
vooraad=oRS.fields("vooraad").value
waarschuwen=oRS.fields("Waarschuwen").value

Dan heb je geen referentie naar het veld (met een impliciet default property), maar gewoon keihard de value van het property in je variabele (die overigens onder ASP toch gewoon wordt gecast naar Variant). Die mag je wel straffeloos met elkaar vergelijken in een if-statement en dan werkt groter/kleiner dan ook precies zoals het hoort te werken.

CDbl e.d. kan natuurlijk ook nog...

[ Voor 41% gewijzigd door RobIII op 16-11-2004 16:05 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • ZeilDude
  • Registratie: Juli 2004
  • Laatst online: 19-02-2022
RobIII schreef op dinsdag 16 november 2004 @ 14:57:
[...]

Ik ben er niet zo voor om CInt te gebruiken, want die klapt er uit als het groter dan 32767.

[...]
Echt? Ik dacht altijd dat: Integer variables are stored as signed 32-bit (4-byte) integers ranging in value from -2,147,483,648 through 2,147,483,647 --> bron: MSDN....
Ik heb dan ook nog nooit integers gehad, die 'er uit klapten'. En ik gebruik juist integers tov decimalen, omdat dit gehele getallen zijn!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
ZeilDude schreef op dinsdag 16 november 2004 @ 15:30:
[...]


Echt? Ik dacht altijd dat: Integer variables are stored as signed 32-bit (4-byte) integers ranging in value from -2,147,483,648 through 2,147,483,647 --> bron: MSDN....
Ik heb dan ook nog nooit integers gehad, die 'er uit klapten'. En ik gebruik juist integers tov decimalen, omdat dit gehele getallen zijn!
Een Integer onder VB, VBA en VBScript is een 16 bits integer. Voor 32 bits gebruik je een Long.
Integer Contains integer in the range -32,768 to 32,767.
Onder .Net, SQL en vele andere gevallen is een Int een 32 bits getal (vaak ook Int32 en Int16 om aan te geven welke int er nou bedoeld wordt).

En probeer maar eens:
code:
1
response.write cint(33000)

Dat klapt er doodleuk uit hoor, terwijl:
code:
1
response.write clng(33000)

gewoon werkt. Natuurlijk gaat deze ook fout op het moment dat je 2^31 (=2.147.483.647) overschrijdt, maar je hebt al een wat groter bereik :Y)

Hoe dan ook, heel dat gecast is IMHO niet nodig als je gewoon zorgt dat a) je DB de juiste types gebruikt en b) je zorgt dat je niet uitgaat van de default properties e.d. zodat je niet per ongeluk een reference naar het object krijgt. Gebruik dus gewoon expliciet het .Value property dan kun je ze ook gewoon vergelijken.

[ Voor 52% gewijzigd door RobIII op 16-11-2004 16:07 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

ZeilDude schreef op dinsdag 16 november 2004 @ 15:30:
Echt? Ik dacht altijd dat: Integer variables are stored as signed 32-bit (4-byte) integers ranging in value from -2,147,483,648 through 2,147,483,647 --> bron: MSDN....
Ik heb dan ook nog nooit integers gehad, die 'er uit klapten'. En ik gebruik juist integers tov decimalen, omdat dit gehele getallen zijn!
Je hebt het nou over een Long (die je krijgt met CLng), en dat is ook een integer, alleen met meer bitposities. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1