2016-12-16 66 views
0

我有一個本地/開發網站,運行在裝有Office 2003的Windows 2003服務器上。我有提取使用非常正常的ASP代碼從本地的MS Access數據庫中的數據的幾個ASP頁:從MS-Access數據庫檢索數字的ASP/SQL代碼的格式問題

Site = "filedsn=" & Server.MapPath("/" & WebName & "/reffiles/accessdsn.dsn") & ";DBQ=" & Server.MapPath("/" & WebName & "/reffiles/MyDatabase.mdb") & ";DefaultDir="Server.MapPath("/" & WebName & "/") & ";" 

set Database = server.createobject("ADODB.Connection") 

Database.open(Site) 

strSQLMax = "SELECT Format(Max(GetDataRange.Date_Reading),'dd/mm/yy') AS MaxOfDate_Reading, Format(Max(GetDataRange.Speed), '#,###') AS MaxOfSpeed FROM GetDataRange;" 

set WeekRecMax = PiDatabase.Execute(strSQLMax) 

response.write("<P>Date of Maximum Speed:" & weekRecMax.fields(0).value & " " & weekRecMax.fields(1).value & " f/hr </P>") 

當我在這裏的測試代碼(我住在法國,但本地服務器配置了區域和語言設置美國),上面的代碼的結果是:

最大速度日期:14décembre2016 - 16:03 1 025 F /小時

當我發表我的代碼,我們在美國的生產服務器(也是Server 2003與Office 2003)相同的頁面給出了這個結果:

最高速度日期:2016年12月14日 - 16:03 1,025 f/hr

當然,結果「1 025」會導致我的代碼的其他部分拋出一個錯誤,因爲它不能用於計算。 「1 025」中的空格實際上是一個「不間斷空格」,十六進制A0。

所以我的問題是:爲什麼會發生這種情況,我能做些什麼來讓本地服務器產生像我們基於美國的生產服務器的輸出?

請注意,如果我將'#,###'更改爲'####',那麼計算過程將毫無問題。因此,這不是一個「展示塞爾」,但它讓我想知道其他的驚喜可能會在什麼時候出現。

謝謝

回答

1

將DateTime和Numeric值的格式從數據庫移到asp.net。

strSQLMax = "SELECT Max(GetDataRange.Date_Reading) AS MaxOfDate_Reading, Max(GetDataRange.Speed) AS MaxOfSpeed FROM GetDataRange;" 

response.write("<P>Date of Maximum Speed:" & Convert.ToDateTime(weekRecMax.fields(0).value).ToString("dd MMMM yyyy") & " " & Convert.ToDecimal(weekRecMax.fields(1).value).ToString("N0") & " f/hr </P>") 

這些值的格式現在將基於本地化,因此在美國使用它時代碼不會中斷。

查看更多格式編號here

+0

實際上,在本地測試時代碼會中斷,在美國運行良好。如果我理解你的意見,你建議我不要在SQL命令中進行任何格式化,而是在使用這些值時用ASP做所有事情?我看你的建議。謝謝... – RDK

+0

是的,那正是我所建議的。當你在SQL中進行格式化時,你會得到一個字符串而不是日期時間對象。並且將日期時間或小數等字符串轉換回來總是很麻煩。 – VDWWD

+0

好的,這有效,但實際上我的問題確實與「修復」本地服務器而不是我的代碼有關。對這個問題有什麼想法? – RDK