检测记录集中是否存在名称字段

时间:2013-05-10 02:25:16

标签: asp-classic

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

已选择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

2 个答案:

答案 0 :(得分:8)

我使用类似的函数(在VB6中)到bfavaretto提出的函数...我很好奇为什么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")

答案 1 :(得分: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