看板 Visual_Basic 關於我們 聯絡資訊
我有段程式碼: Set Rec = Server.CreateObject("adodb.recordset") ... If IsNull(Rec("a")) Then ... End If response.write rec("a") & ", is null = " & isnull(rec("a")) response.end 全小寫程式碼是用來做assertion. 卻發現明明Rec("a")不是空值,assertion印出的東西是: <空字串>, is null = False 後方仍然說它不是空值,但奇了,前面印不出rec("a")本來的值. 最後歸納出來的推論,我猜,是 IsNull(Rec("a")) 有一些副作用,把 Rec 物件 的某些狀態改掉了. 不曉得是不是這個原因? 於是我在其他的程式部份,卡在雖然用一些程式檢查IsNull,卻仍回報 "Null的使用錯誤: replace" 卡住的程式段落是: function f(s) if isnull(s) then f = "" else f = s f = replace(f, "'", "''") end if end function 把rec("a")丟進函數,即使不是 Null, 在replace部份仍回報 Null 使用錯誤. 讓我當場覺得,ASP怎麼那麼難寫!不是Null的資料卻表現得像Null一樣? -------- 我的解決辦法是,把IsNull與adodb.recordset分開, 例如: t = Rec("a") If IsNull(t) Then t = "" End If f(t) ... function f(s) f = s f = replace(f, "'", "''") end function -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.130.12.37 ※ 編輯: yauhh 來自: 220.130.12.37 (09/23 17:35)
JacobTai:是你的欄位型態的問題吧...是"備忘"? 09/24 11:07
yauhh:對,欄位是備忘類型,可容許空值 09/24 22:51
JacobTai:ado 裡面只容許讀一次...之後就會變成空值... 09/25 11:36
yauhh:驚! 謝謝 09/25 11:58