我是疯子还是无知(两者都很可能)或者此代码什么都不做?
我正在维护一个由第三方公司编写的遗留网站,所以我可以问的网站真的没有人参与。
我知道他们正在循环记录集并获取最后一条记录的编号。但我不明白“if”块正在做什么。在伪代码中,似乎是在说“如果我有一个数字并从中减去相同的数字,将它除以4然后再乘以4并且它不等于零......那么”
什么时候不能等于零(除非你产生除零误差)? < - 忽略这一点,我在倒退,你可以得到0/4而不是4/0。然而,其余的问题仍然存在。
我唯一能想到的是记录号是否为负数?这是可能的,我不认为自己是ASP Classic的专家,但我不知道可能会发生。
任何人都知道我在这里缺少什么?
do while not rs.EOF
recordNum = recordNum + 1
rs.MoveNext
loop
rs.MoveFirst
if recordNum-((recordNum\4)*4) > 0 then
recordNumber = (recordNum\4)+1
else
recordNumber = (recordNum\4)
end if
答案 0 :(得分:3)
首先,正如现在删除的答案所指出的那样,recordNum\4
返回除法的整数部分,因为VBScript中的反斜杠运算符用于整数除法,而有序斜杠(/)用于浮点除法。
以下是一些示例值:
recordNum | recordNumber ----------|------------- 0 | 0 1 | 1 2 | 1 3 | 1 4 | 1 5 | 2 6 | 2 7 | 2 8 | 2 9 | 3
所以这个值不是记录的数量,而是回答“我有多少组四个项目”之类的问题?
现在基于此,编写代码的人可以知道要显示多少个表行,例如:
For x=1 To recordNumber
Response.Write("<tr>")
Response.Write("<td>...</td>")
Response.Write("<td>...</td>")
Response.Write("<td>...</td>")
Response.Write("<td>...</td>")
Response.Write("</tr>")
Next
答案 1 :(得分:1)
它是一种分页算法没有任何意义,只会浪费你的cpu周期, IF 在100%的情况下会导致0
和btw:你永远不会达到除零异常,因为将0除以4 = 0 。
答案 2 :(得分:0)
只是添加到此对话中(即使已经回答);上面的“算法”计算数据中“页面”的数量,并允许可能只有 n 页面但不完全 n +1的事实。另一种方法是读取标量值:
sqlString = "SELECT COUNT(id_field) AS total FROM table WHERE criteria = TRUE "
...
'Read data into array and pass to variable.
...
Dim maxPages
maxPages = recs \ 4 + (((recs \ 4) <> (recs / 4)) And 1)
按照你的帖子Valis循环记录是一个巨大的浪费时间。