作者yauhh (喲)
看板Visual_Basic
標題[ASP ] IsNull和adodb.recordset的綜合作用?
時間Tue Sep 23 16:19:06 2008
我有段程式碼:
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