close

執行 it685的專案時出現的一個奇怪問題,因為還有其他項目需處理所以有一搭沒一搭的花了三天傍晚進行除錯

這是幫浩宇的一個客戶開發客製化CRM系統。

 

在處理使用者登入LOG檔時出現了錯誤,

會出現這樣的錯誤訊息:
Microsoft VBScript 執行階段錯誤 錯誤 '800a000d'
型態不符合: 'formatedatetime' 

 

if  rTimeEnd="" then rTimeEnd=Now()
  ........

sql= sql & " olstarttime <= #" & rTimeEnd & "# "
 

一開始以為問題的原因出再型別轉換,試過 FormatDateTime(), chgstr ()

formatdatetime(date,vbshortdate)轉化為短日期格式.
formatdatetime(date,vblongdate)轉化為長日期格式.
formatdatetime(time,vbshorttime)轉化為短時間格式
formatdatetime(time,vblongtime)轉化為長時間格式
 
sql=sql&chgstr( rTimeEnd )&","
>>
sql=sql& "getdate(),"
 
結果都會另外一個錯誤。

錯誤類型:
ADODB.Recordset (0x800A0E79)
當物件開啟時,不允許操作。
/itcrm/loginlog.asp, line 65

大部分的說明是因為物件處於Open狀態
而又再次下Open指令或試圖去更改其屬性等動作都會出現此錯誤
例如:
rs.Open之後接著又去更改rs.dtcnn就會發生此錯誤訊息

大部分的建議是如果rs.open用完後就馬上把他rs.close掉,這樣的話後面如果有要再重新開啟的話比較不會出錯。

不過反覆檢查過,rs.close是有確實執行的......

窘....

後來看到這一段:

rs.Open sql,conn,3,1
rs.Open "Select * From [userlog] Order By Id asc",conn,3,1

 

恍然大悟........我為什麼要開兩次呀?其實是忘了把下面那一段測試用的recordset註解掉

BTW最開始的日期型別問題,其實有一個更快更簡單的作法:

if  rTimeEnd="" then rTimeEnd=Now()  >>   if  rTimeEnd="" then rTimeEnd=Date()

搞定!

arrow
arrow
    全站熱搜

    itcoworker 發表在 痞客邦 留言(0) 人氣()