2013-07-12 183 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