2009-05-20 35 views
3

データベースからデータを取得し、ASP用のVBScriptを使用して正しい型にキャストする際に奇妙な問題が発生しました。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"))) 

すごみは2つの部分

  1. である。これは、特定のサーバー上で行われ、このコードは、私は複数のサイトに展開しているCMSの一部であり、それはIIS 6.0、その上で実行されている唯一のインスタンスです私に問題を引き起こします。また、これはレコードセットのオプションに依存するようです。 VarTypeは、公式のMSDNの参照に応じ

を返送するための

  • 値16は、私がどの奇妙な値に影響されている機能にチェックを追加することによって、比較的簡単にこのラウンドを取得することができます有効な値ではありません

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

    を次のように私は私が正しくタイプが数値であることを検出するために、当該の機能を必要とするので、上記を行う必要があるとのVarTypeがある場合は16、その後IsNumeric関数()がfalse与えた場合でも、変数の値数字です(数字で表示されます)

    だから私の質問は誰もがなぜこれが起こるか知っていますか?

  • +0

    質問:VarType 16を取得すると、基礎となる列のデータ型は何ですか? どのような種類のデータベースを使用していますか? これはすべて、VarType関数の結果に影響します。 –

    +0

    基本となる列のデータ型はBITです。データベースは、Access、MySql 4x/5x、SQL Server 2000+のいずれかです。私が言ったように、ソフトウェアは異なる環境の複数のサーバーにインストールされています。この特定の環境は、MySQL 4.1.21を使用するIIS 6.0です – RobV

    答えて

    3

    は、16の値は、それがVT_I1としてC++ headersで指定One Byte Variant、だということを意味し、述べています。

    そして、この値はMySQL接続ドライバのためにしか得られません(この16値に遭遇した環境はMySQLのIIS6です)。

    これは、MySQLドライバのバグで、明らかにBITフィールドのadBooleanを報告するのではなく、VT_I1という報告です。

    0

    thisによれば、16はVT_I1のため、1バイトの符号付き整数を表します。 Stijnとして