4

名前付きフィールドがレコード セット内にあるかどうかを確認することはできますか?

EG id、field1、field2、field3 が選択されています。field2 が選択されているかどうかを VBScript が検出することは可能ですか。また、これがループせずに可能であることを願っています

私は知らない、または実際のSELECTを見ることができないと仮定してください。クエリが実行された後にこれを検出する必要があります。

これは、ループを使用して行われる方法です。これがループせずに可能であることも期待しています。

dim rs,field,foundField
sql = "SELECT * from table;"
set rs = conn.execute(sql)
For Each field in rs.Fields
   if field.Name = "someFieldName" then 
      foundField = true 
  exit for
   else 
      foundField = false
   end if
next

ティア

4

2 に答える 2

8

私はbfavarettoによって提案されたものと同様の関数(VB6で)を使用しています...なぜOPがそれが機能しないと言っているのか知りたいですか?

Public Function FieldExists(ByVal rs As Recordset, ByVal fieldName As String) As Boolean

    On Error GoTo merr

    FieldExists = rs.Fields(fieldName).name <> ""
    Exit Function

merr:
    FieldExists = False

End Function

この関数は私にとってはうまくいきます...私の知る限り、偽陰性は返されません。また、コレクションに含まれるフィールドに対してループを実行するよりも高速に見えます。実際に欠落しているフィールドの場合、両方のメソッドの実行時間は同等のようです。


編集

の場合VBScript、上記の関数は次のようになります。

Function FieldExists(ByVal rs, ByVal fieldName) 

    On Error Resume Next
    FieldExists = rs.Fields(fieldName).name <> ""
    If Err <> 0 Then FieldExists = False
    Err.Clear

End Function

質問に投稿されたコードは次のようになります。

dim rs,field,foundField
sql = "SELECT * from table;"
set rs = conn.execute(sql)
foundField = FieldExists(rs, "someFieldName")
于 2014-09-16T16:07:46.913 に答える
0

ループが必要だと思います。MSDNでこれを見つけました(強調鉱山):

ASP 組み込みオブジェクトのほとんどは、コレクションを提供します。コレクションは、文字列、数値、オブジェクト、およびその他の値を格納する配列に似たデータ構造です。配列とは異なり、コレクションは項目が取得または格納されると自動的に拡張および縮小します。コレクションが変更されると、項目の位置も移動します。コレクション内のアイテムには、一意の文字列キー、コレクション内のインデックス (位置)、またはコレクション内のすべてのアイテムを反復することによってアクセスできます。

いずれにせよ、これを試すことができます(テストされていません):

dim rs,field,foundField
sql = "SELECT * from table;"
set rs = conn.execute(sql)
if rs.Fields("someFieldName") then
    ' ... if this doesn't crash, it may return
    ' false negatives for columns containing null or 0 
end if
于 2013-05-10T14:29:40.393 に答える