Toon posts:

[ASP]Hoogste waarde checken uit db

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een form die weg gaat schrijven naar een database. Maar 1 waarde van die db moet hoger zijn als de hoogste waarde van die kolom.

Dus als de waarde te laag of even hoog is krijgt men een errormessage. Is ie hoger dan schrijft ie het zooitje naar de database.

Dus ik denk ik ga heel simpel checken of die hoger is. Eerst query uitvoeren naar het record met de hoogste waarde. en vervolgens:

code:
1
if bod <= checkbod("bod") then errormessage


Dat werkt prima, totdat ik bij 1000 kom. Als de hoogste waarde in de DB dus 900 is en ik wil 1000 invoeren, dan krijg ik dus keihard die errormessage.
Volgens asp is 900 dus hoger dan 1000.

Is er een betere manier om te checken wat ik wil checken?

[ Voor 3% gewijzigd door Verwijderd op 14-01-2004 01:44 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ja, maak er eens:

ASP:
1
if Clng(bod) <= Clng(checkbod("bod")) then errormessage


van ;)

Je bent nu strings aan 't comparen en 900 is groter dan 1000 :P

Overigens zou ik ook ongeldige waardes e.d. afvangen, want de CLng klapt eruit op letters e.d. en ook het bereik van CLNG is niet eindig; de waarde 2687698263984762 zal ook fout gaan.

Ik gebruik meestal mijn functie ParseLong (voor gehele getallen):

ASP:
1
2
3
4
5
6
Public Function ParseLong(lngNumber, lngDefValue)
    'Checks if number is valid and returns a Long, else returns lngDefValue
    ParseLong = lngDefValue
    On error resume next
    if (Len(lngNumber)>0) and isNumeric(lngNumber) then ParseLong = Clng(lngNumber)
End Function


Je aanroep wordt dan dus:

ASP:
1
if ParseLong(bod,0) <= Parselong(checkbod("bod"),1) then errormessage


De eerste parameter is de var die je wil converteren naar een long, de tweede parameter is de default waarde die je wil terugkrijgen als er iets scheef gaat.

En natuurlijk kun je dan makkelijk een eigen functie ParseCur schrijven die geen CLng gebruikt maar CCur... ;)

[ Voor 111% gewijzigd door RobIII op 14-01-2004 01:59 ]

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


  • ProgrammerX
  • Registratie: Juli 2002
  • Laatst online: 26-02-2021
Ik weet zelf nix van asp, maar dit zal waarschijnlijk komen omdat je de getallen als "strings" vergelijkt en niet als nummers. Kijk maar eens of naar je vergelijk functie of ze staan misschien al als string in je db.

Ik denk dat je het met deze suggestie wel kunt oplossen.

Edit : daar kom ik net secondes te laat zeker. Misschien een leuke feature voor de uitbreiding van het forum. Kun je aan de hand van de timestamp van je bericht zien hoeveel je te laat was :)

[ Voor 28% gewijzigd door ProgrammerX op 14-01-2004 01:50 ]


Verwijderd

Topicstarter
RobIII schreef op 14 januari 2004 @ 01:49:
Ja, maak er eens:

ASP:
1
if Clng(bod) <= Clng(checkbod("bod")) then errormessage
Thanks dat werkt, tenminste die eerste string.

Een dergelijke functie heb ik al, ik doe dat nu min of meer met javascript. Maar ik ga em wel proberen als je dat niet erg vind. Heb het liever allemaal ASP.

Maar even over die if Clng(bod) <= Clng(checkbod("bod")) then errormessage.
Dat werkt perfect, hij insert ze in de database, alleen op een andere pagina worden de 3 hoogste records weergegeven. En daar blijft ie nogsteeds steken bij 999.

Ik heb dit geprobeerd om ze wel weer te kunnen geven
ASP:
1
Clng(reactrec("bod"))


Maar dan blijft ie nog op 999 steken. Dus het moet aan de query liggen.
ASP:
1
("SELECT TOP 3 * FROM react WHERE linkid = '"& linkrec("linkid") & "' ORDER BY bod DESC")

[ Voor 47% gewijzigd door Verwijderd op 14-01-2004 02:20 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op 14 januari 2004 @ 02:11:
[...]
Thanks dat werkt, tenminste die eerste string.
[...]
Ten eerste was een volledige kwoot van mijn (toch al layout-vernuekende post) niet nodig geweest.

Ten tweede wil ik je vragen eerst eens zelf te denken/onderzoeken alvoor je je vraag hier post.

Ten derde: Als je (2) hebt uitgevoerd, post dan hier wat het probleem is, inclusief foutmelding en dingen die je hebt geprobeerd. Ik heb geen crystallen bol waarin ik kan zien waar je probleem ligt, en alleen aan een SQL-query zie ik ook niks bijzonders... Meer info dus graag.

SQL:
1
...linkid = '"& linkrec("linkid") & "'...


Is linkid een string? Zo ja...prima... Zo nee, haal dan die single-quotes eens weg :?

SQL:
1
...linkid = " & linkrec("linkid") & "...


en een spatie voor de eerste & kan ook geen kwaad, maar ik neem voor het gemak aan dat dit een typo is?

[ Voor 63% gewijzigd door RobIII op 14-01-2004 02:19 ]

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


Verwijderd

Topicstarter
Het werkt.

De kolom waar het hier dus over ging (bod) had als data type nvarchar. Ik heb em veranderd in money (want daar gaat het tenslotte om in mijn verhaal) Nu krijg ik de results wel in de goede volgorde.

Ik heb die functie ook gebruikt en mijn javascript weggegooit. Deze werkt ook prima en hij geeft ook netjes de error aan wanneer ik bijv letters invoer ipv cijfers.

Thanks alot. Ook jij krijgt van mij geen glas bier als ik je tegen kom :P
Pagina: 1