Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > ASP General > Comparing Integers

Reply
Thread Tools

Comparing Integers

 
 
RN1
Guest
Posts: n/a
 
      12-15-2007
Sometimes I find that though I am comparing 2 integers, the result
turns out to be unexpected.

For e.g. an ASP page encapsulates recordset paging.

<%
Dim iPage,iPageCounter

iPage=Request.QueryString("Page")
If(iPage="") Then
iPage=1
End If

Dim objConn
Set objConn=Server.CreateObject("ADODB.CONNECTION")
objConn.Open ........

Dim strSQL
strSQL="SELECT * FROM MyTable"

Dim objRS
Set objRS=Server.CreateObject("ADODB.RECORDSET")
objRS.PageSize=15
objRS.Open strSQL,objConn,adOpenKeyset

objRS.AbsolutePage=CInt(iPage)

'display records here

'pagination
For iPageCounter=1 To objRS.PageCount
If(iPageCounter=CInt(iPage)) Then
Response.Write("[" & iPageCounter & "]")
Else
Response.Write("<a href='ThisPage.asp?Page=" &
iPageCounter & "'>" & iPageCounter & "</a>")
End If
Next
%>

Assuming that there are 225 records, the For....Next loop will display
1, 2, 3, 4.........14, 15 as page numbers.

The If condition within the For....Next loop ensures that the page
which the user is currently viewing isn't displayed as a hyperlink.
For e.g. if a user is viewing page #4, then 4 is not rendered as a
hyperlink; rather it is rendered as plain text BUT if the variable
iPage in the If condition within the For....Next loop is not
explicitly cast into an integer using CInt i.e. the If condition looks
like this

If(iPageCounter=iPage) Then

then the page the user is currently viewing remains a hyperlink
instead of plain text. Why?

For e.g. when the user is viewing page #4, the value of the variable
iPage is 4 which means that within the For...Next loop, when
iPageCounter is 4, then the If condition evaluates to true since iPage
is 4 & so is iPageCounter. Then why does 4 get rendered as a hyperlink
instead of plain text?
 
Reply With Quote
 
 
 
 
Anthony Jones
Guest
Posts: n/a
 
      12-15-2007

"RN1" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> Sometimes I find that though I am comparing 2 integers, the result
> turns out to be unexpected.
>
> For e.g. an ASP page encapsulates recordset paging.
>
> <%
> Dim iPage,iPageCounter
>
> iPage=Request.QueryString("Page")
> If(iPage="") Then
> iPage=1
> End If
>
> Dim objConn
> Set objConn=Server.CreateObject("ADODB.CONNECTION")
> objConn.Open ........
>
> Dim strSQL
> strSQL="SELECT * FROM MyTable"
>
> Dim objRS
> Set objRS=Server.CreateObject("ADODB.RECORDSET")
> objRS.PageSize=15
> objRS.Open strSQL,objConn,adOpenKeyset
>
> objRS.AbsolutePage=CInt(iPage)
>
> 'display records here
>
> 'pagination
> For iPageCounter=1 To objRS.PageCount
> If(iPageCounter=CInt(iPage)) Then
> Response.Write("[" & iPageCounter & "]")
> Else
> Response.Write("<a href='ThisPage.asp?Page=" &
> iPageCounter & "'>" & iPageCounter & "</a>")
> End If
> Next
> %>
>
> Assuming that there are 225 records, the For....Next loop will display
> 1, 2, 3, 4.........14, 15 as page numbers.
>
> The If condition within the For....Next loop ensures that the page
> which the user is currently viewing isn't displayed as a hyperlink.
> For e.g. if a user is viewing page #4, then 4 is not rendered as a
> hyperlink; rather it is rendered as plain text BUT if the variable
> iPage in the If condition within the For....Next loop is not
> explicitly cast into an integer using CInt i.e. the If condition looks
> like this
>
> If(iPageCounter=iPage) Then
>
> then the page the user is currently viewing remains a hyperlink
> instead of plain text. Why?
>
> For e.g. when the user is viewing page #4, the value of the variable
> iPage is 4 which means that within the For...Next loop, when
> iPageCounter is 4, then the If condition evaluates to true since iPage
> is 4 & so is iPageCounter. Then why does 4 get rendered as a hyperlink
> instead of plain text


TBH, I can't explain or reproduce your problem. If page is specified on the
query string then the type of iPage is a string. However when making a
comparison between an integer and a string VBScript will coerce the string
to an integer and the comparison should succeed.

That said since iPage is expected to be an integer and has prefix notation
to that effect it would be best to ensure that it is on input:-

Dim iPage: iPage = CInt(Request.QueryString("Page"))
If iPage = 0 Then iPage = 1

No need for any further CInt calls.


--
Anthony Jones - MVP ASP/ASP.NET


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
comparing two arrays of integers. Nag Java 3 06-23-2005 06:16 PM
comparing strings and integers beliavsky@aol.com Python 5 05-20-2004 03:55 PM
comparing long integers Elijah Bailey C++ 12 01-23-2004 03:47 PM
comparing long integers Elijah Bailey C Programming 11 01-23-2004 03:47 PM
Comparing char* with integers and characters Nicholas C Programming 13 09-09-2003 03:04 PM



Advertisments