4

是否可以检查命名字段是否在记录集中?

EG id、field1、field2、field3 已被选中。VBScript 是否可以检测 field2 是否已被选中。我也希望这在没有循环的情况下是可能的

请假设我不知道,也看不到实际的 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

TYIA

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 回答