2009-05-20 50 views
3

我遇到了一個奇怪的問題,即從數據庫獲取數據並使用VBScript for ASP將其轉換爲正確的類型。VBScript VarType函數給出奇怪的值

我使用下面的函數檢索的記錄:

Public Function vfuncGetRS(strQuery) 
    'Returns a disconnected paging capable recordset 
    'Note - Non Windows servers don't support disconnected recordsets so you'll always get a connected recordset on 
    ' a non Windows server! 

    On Error Resume Next 
    Err.Clear 

    Dim objData 

    Set objData = Server.CreateObject("ADODB.Recordset") 
    objData.CursorLocation = adUseClient 
    objData.CursorType = adOpenStatic 
    objData.LockType = adLockReadOnly 
    objData.Open vlogSQLFilter(strQuery), objDB 

    If Not blnUNIXMode Then 
     Set objData.ActiveConnection = Nothing 
    End If 

    Set vfuncGetRS = objData 
End Function 

如果我從記錄中選擇一個值,並獲得其VarType函數返回值16如。

Set objRS = vfuncGetRS("SELECT * FROM SOME_TABLE") 
Response.Write(VarType(objRS("someColumn"))) 

的古怪分爲兩個部分

  1. 這只是發生在一個特定的服務器上,此代碼是一個CMS,我在多個網站上部署的一部分,它只是在IIS 6.0上運行的實例導致我一個問題。此外,這似乎取決於記錄集選項。
  2. 值16不是VarType函數返回一個有效的值,根據官方的MSDN參考

我可以通過增加檢查到受着怪異值的函數避開這個問題很容易哪些是如下

If VarType(strValue) = 16 Then strValue = CInt(strValue) 

我必須做上述,因爲我需要有問題的功能,以正確地檢測該類型是數字,並且如果VarType函數是16然後則IsNumeric()給出了假即使在該變量中的值是數字(並且將始終爲數字)

所以我的問題是沒有人知道爲什麼會發生這種情況?

+0

問題:當你得到VarType 16什麼是底柱數據類型? 你使用什麼樣的數據庫? 所有這些都會影響VarType函數的結果。 – 2009-05-20 12:08:30

回答

3

Stijn已經指出,16的值表示,它是一個One Byte Variant,在C++ headers作爲VT_I1指定。

而你只是因爲MySQL連接驅動程序纔得到這個值(正如你所說的,你遇到這個16值的環境是帶有MySQL的IIS6)。

顯然,這是MySQL驅動程序中的一個錯誤,它不是報告adBoolean的BIT字段,而是報告VT_I1

0

根據this,16可能代表VT_I1,因此是單字節有符號整數。