[ASP ] IsNull和adodb.recordset的綜合作用?

看板Visual_Basic作者 (喲)時間17年前 (2008/09/23 16:19), 編輯推噓0(004)
留言4則, 2人參與, 最新討論串1/1
我有段程式碼: 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)

09/24 11:07, , 1F
是你的欄位型態的問題吧...是"備忘"?
09/24 11:07, 1F

09/24 22:51, , 2F
對,欄位是備忘類型,可容許空值
09/24 22:51, 2F

09/25 11:36, , 3F
ado 裡面只容許讀一次...之後就會變成空值...
09/25 11:36, 3F

09/25 11:58, , 4F
驚! 謝謝
09/25 11:58, 4F
文章代碼(AID): #18sAPziO (Visual_Basic)