4

我是疯了还是无知(两者都很可能)或者这段代码什么都不做?

我正在维护一个由第 3 方公司编写的遗留站点,因此我可以询问该站点的相关内容。

我知道他们正在遍历记录集并获取最后一条记录的编号。但我不明白“if”块在做什么。在伪代码中,它似乎是在说“如果我有一个数字并从中减去相同的数字,在将它除以四然后乘以四并且它不等于零......然后”

什么时候可以不等于零(除非您生成除以零错误)?<--忽略这一点,我在往回想,你可以得到 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 
4

3 回答 3

3

首先,正如现在已删除的答案中所指出的,recordNum\4返回除法的整数部分,因为 VBScript 中的反斜杠运算符用于整数除法,而普通斜杠 (/) 用于浮点除法。

以下是一些示例值:

记录号 | 记录编号
----------|-------------
    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
于 2013-05-05T07:37:08.043 回答
1

这是一种分页算法,没有任何意义,只会浪费你的 CPU 周期,IF在 100% 的情况下会导致 0

顺便说一句:你永远不会达到除以零异常,因为除以 0 除以 4 = 0

于 2013-05-03T17:42:02.183 回答
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 循环浏览记录是一种巨大的时间浪费。

于 2013-05-08T12:18:51.103 回答