Vraag & Antwoord

Webprogrammeren & scripting

ASP / SQL COUNT(*) 33 < 4 5 6 7 8 9 ?

Anoniem
Annie
6 antwoorden
  • Hallo,

    Ik heb een erg apart probleem, tenminste ik zie de logica over het hoofd ofzo…

    Gebruik voor een fotoalbum knoppen met Vorige en Volgende bij de foto.
    In het geval van de eerste en de laatste foto is een van deze knoppen uitgeschakeld.
    Fotoinfo wordt opgehaald uit een MS Access DB via info in de URL (Request.Querystring: serie en fotonummer).
    Totaal aantal fotos in serie opvragen werkt goed dmv:
    [code:1:0671e5fb0a]sql2 = "SELECT COUNT(*) AS aantal FROM foto WHERE serie='"&serie&"'"
    Set rs2 = conn.Execute(sql2)[/code:1:0671e5fb0a]
    Verder voor de knoppen (Vorige + Volgende):
    [code:1:0671e5fb0a]<%If sid > 1 Then%><a href="test_f.asp?s=<%=serie%>&amp;f=<%=sid-1%>">Vorige</a><%Else%>Vorige<%End If%>

    <%If sid < FormatNumber(rs2("aantal"),0) Then%><a href="test_f.asp?s=<%=serie%>&amp;f=<%=sid+1%>">Volgende</a><%Else%>Volgende<%End If%>[/code:1:0671e5fb0a]
    Werkt prima, gewenste knop is uitgeschakeld bij 1 en bij de laatste foto van de serie.
    Maar de knop Volgende is ook uitgeschakeld indien sid (fotonummer) de waarde 4, 5, 6, 7, 8 of 9 heeft. Veranderen van
    [code:1:0671e5fb0a]<%If sid < FormatNumber(rs2("aantal"),0) Then%>[/code:1:0671e5fb0a]
    in (in het geval van 33 foto's)
    [code:1:0671e5fb0a]<%If sid < 33 Then%>[/code:1:0671e5fb0a]
    lost dit op. Het probleem zit m dus denk ik in dat opgevraagde aantal… maar hoe het op te lossen is? :-? …
  • Heb je al eens gecontroleerd wat de waarden zijn die worden gebruikt in je if-statement?

    [code:1:d99484c42b]
    response.write "sid: " & sid & "<br />"
    response.write "aantal: "& FormatNumber(rs2("aantal"),0) & "<br />"
    [/code:1:d99484c42b]
    Waarom doe je eigenlijk überhaupt die formatnumber? CInt zou een logischere keuze zijn. Of gewoon [i:d99484c42b]rs2("aantal").value[/i:d99484c42b], [i:d99484c42b]rs2.Collect("aantal")[/i:d99484c42b], of iets dergelijks (is alweer lang geleden dat ik iets met ado heb gedaan); de waarde in de recordset is namelijk al gewoon een int.

    /edit: maak van die sid ook eens een integer met CInt. Ik vermoed dat je strings aan het vergelijken bent.
  • FormatNumber vervangen door CInt op alle plaatsen was de oplossing. Al snap ik de logica niet helemaal waarom eerst het probleem bij bepaalde waarden wel bestond en niet bij andere waarden….

    iig bedankt :D
  • Dit heeft te maken met het "vrije" karakter van de variabele types in vbscript. In weak-typed talen kan je vergelijkingen tussen twee verschillende types uitvoeren.

    Wanneer je de variabelen niet expliciet cast naar een gelijk type (in dit geval beide ints), dan ben je overgeleverd aan de wijze waarop vbscript de variabelen automatisch cast. In de gevallen dat het mis ging in je script, werd het argument dat tegen [i:7163c99d85]sid[/i:7163c99d85] werd uitgezet, omgezet naar een string. Met als gevolg dat beide waarden als een string worden vergeleken (alfabetische volgorde). En in dat geval krijg je dus deze volgorde:
    [code:1:7163c99d85]
    1
    2
    3
    33 <– 33 is bij stringvergelijkingen kleiner dan 4
    4
    5
    [/code:1:7163c99d85]

    Deze "verrassingen" kom je ook in andere talen tegen wanneer je niet specifiek genoeg bent. Een klassiek voorbeeldje uit javascript:
    [code:1:7163c99d85]
    alert( parseInt("10") ); // geeft 10
    alert( parseInt("010") ); // je verwacht 10 maar je krijgt 8
    // (10 octaal = 8 decimaal,
    // de eerste 0 geeft in dit geval aan dat het een
    // octale waarde betreft)


    alert( parseInt("010", 10) ); // alleen in dit geval ben je zeker.
    // het tweede (optionele) argument geeft
    // het getalstelsel aan
    [/code:1:7163c99d85]
  • Dankje, ik snap het nu helemaal :D !
    Had dus gewoon de verkeerde functie te pakken, kwam er op via google.
    Heeft iemand toevallig (vast wel) een linkje naar een site met een overzicht van deze functies en korte uitleg?
  • http://www.google.nl/search?hl=nl&q=asp+functions&meta=

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.

Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord