2013-07-12 136 views
1

我继承了一个非常大的经典ASP网站,最近有一个错误被发现。它从Access数据库读取和写入多次,并且所有这些都按预期工作。不过,我相信在这部分代码的错误:经典ASP变量比较的问题

Dim SeptAvg, mvUPreq, mvSeptAvg 

SeptAvg = CDbl(rs.fields(5)) 
mvUPreq = -0.15 

     if SeptAvg <= mvUPreq then 
      mvSeptAvg = true 
     else 
      mvSeptAvg = false 
     end if 

现在,在这种情况下,在访问数据库中的SeptAvg是-8.5%。这个表达式应该评估为True - 但事实并非如此。在此代码之后,立即对Access数据库进行更新,以将该字段(Access数据库中的复选框)设置为true或false。该复选框始终处于未选中状态。我检查并重新检查了数据库更新代码,我知道那里没有错误。 CDbl在数据库的-8.5%值上发生了什么?

请指教,因为我有非常有限的经典ASP的经验。

+0

待办事项的Response.Write(“septavg:” + SeptAvg)让我们知道它说在那里和你我们可以调试。 – prospector

+0

是的,当我发布帖子时,这是一个错字 - 我纠正了它。 -8.5%的值存储在Access表(.mdb)中,并且该字段/列的数据类型为Number – rwisch45

+0

@Prospector这是我的主要问题之一 - 调试此事。我已经尝试了Response.Write和其他一些东西(包括在本地IIS上托管该站点并尝试通过Visual Studio调试ASP),但我无法使其工作。 Response.Write没有显示任何内容,因为在提交表单之后,它被重定向了几次 – rwisch45

回答

2

-8.5% = -0.085-0.085确实比-0.15大。这就是为什么它被评估到true

-1 > -10 
Abs(1) < Abs(10) 
1 < 10 
+0

为什么我没有看到......就在我面前。 – rwisch45

1

-8.5%表示为十进制为-0.085

所以If条件等价于...

if -0.085 <= -0.15 then 

但-0.085被大于-0.15,这样的情况是不是True,所以mvSeptAvg不会被设置为True

+0

我认为它仍然是False。看到shareef的答案和我下面的评论。感谢您的帮助HansUp – rwisch45

+0

@HansUp,未初始化的变量设置为['Empty'(http://msdn.microsoft.com/en-us/library/f8tbc79x%28v=vs.84%29.aspx),不'Null'。 –

1

如果你希望它评估为TRUE,你需要调整你的代码一点点:

Dim SeptAvg, mvUPreq, mvSeptAvg 

SeptAvg = CDbl(rs.fields(5)) 
mvUPreq = -0.15 

if abs(SeptAvg) <= abs(mvUPreq) then 
    mvSeptAvg = true 
else 
    mvSeptAvg = false 
end if