資料|資料庫 在許多時候我們使用ASP+資料庫進行網站編程的時候,會遇上讀取某記錄出來和另外一些變數進行運算的情況,如果取的記錄資料為NULL值,那麼可能會造成程式返回錯誤結果,如果每個讀記錄的語句後都加上判斷語句,程式又顯得拖遝,因此,我認為編寫一個專用的函數對讀取的記錄進行自動或半自動識別是很好的辦法。
根據VBscript的資料類型定義,結合利用VarType函數,構造以下自動處理函數InitdataType,
輸入兩個參數,要處理資料本身(theDate)和準備輸出的資料類型(theReturnType,整數型): theReturnType強制返回的資料類型 ,同VarType傳回值定義的意義一樣, 'theReturnType 如果忽略: 返回同theDate一樣的資料類型.
比較常見的NULL返回,對於字串型返回Null 字元串,對各種於數值返回0值,對於邏輯值返回FALSE(假),對於日期
返回最早的日期
函數程式:
Function InitdataType(theDate,theReturnType)
'返回或強制指示變數子類型的值。theDate 參數可以是任何變數。
'theReturnType(整數型): 強制返回的資料類型 ,同VarType傳回值定義的意義一樣
'theReturnType 如果忽略: 返回同theDate一樣的資料類型.
'下面引用的函數VarType(varname)會返回指示變數子類型的值。,varname 參數可以是任何變數。
'VarType函數傳回值的意義如下:
'vbEmpty 0 Empty(未初始化)
'vbNull 1 Null(無有效資料)
'vbInteger 2 整數
'vbLong 3 長整數
'vbSingle 4 單精確度浮點數
'vbDouble 5 雙精確度浮點數
'vbCurrency 6 貨幣
'vbDate 7 日期
'vbString 8 字串
'vbObject 9 Automation 對象
'vbError 10 錯誤
'vbBoolean 11 Boolean
'vbVariant 12 Variant(只和變數數組一起使用)
'vbDataObject 13 Data Access Objects
'vb???? 14 小數
'vbByte 17 位元組
'vbArray 8192 數組
On Error Resume Next
'Err.Clear
dim n_dataType,vo_ReData,vo_renewdata,c_TypeName
n_dataType = VarType(theDate)
'c_TypeName = TypeName(theDate)
If n_dataType<2 then
if isNumeric(theReturnType) then
Select Case theReturnType
case 1
vo_renewdata=NULL
case 2
vo_renewdata=0
case 3
vo_renewdata=0
case 4
vo_renewdata=0
case 5
vo_renewdata=0
case 6
vo_renewdata=0
case 7
vo_renewdata=0
case 8
vo_renewdata=""
case 11
vo_renewdata=DEF_False
case 14
vo_renewdata=0
case 17
vo_renewdata=chr(0)
case else
vo_renewdata=theDate
end Select
else
vo_renewdata=theDate
end if
else
if isNumeric(theReturnType) then
Select Case theReturnType
case 0
vo_renewdata=Empty
case 1
vo_renewdata=NULL
case 2
if isNumeric(theDate) then
vo_renewdata=cInt(theDate)
else
vo_renewdata=Eval("0+" & theDate &"")
if not isNumeric(vo_renewdata) then vo_renewdata=0
end if
case 3
if isNumeric(theDate) then
vo_renewdata=cLng(theDate)
else
vo_renewdata=Eval("0+" & theDate &"")
if not isNumeric(vo_renewdata) then vo_renewdata=0
end if
case 4
if isNumeric(theDate) then
vo_renewdata=cSng(theDate)
else
vo_renewdata=Eval("0+" & theDate &"")
if not isNumeric(vo_renewdata) then vo_renewdata=0
end if
case 5
if isNumeric(theDate) then
vo_renewdata=cDbl(theDate)
else
vo_renewdata=Eval("0+" & theDate &"")
if not isNumeric(vo_renewdata) then vo_renewdata=0
end if
case 6
&nb