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

Asp classic 检测记录集中是否存在名称字段,asp-classic,Asp Classic,是否可以检查命名字段是否在记录集中 例如,已选择id、字段1、字段2、字段3。VBScript是否可以检测是否已选择field2。我也希望这是可能的没有循环 请假设我不知道,也看不到实际选择。我需要在执行查询后检测到这一点 这就是使用循环的方式,我也希望这在没有循环的情况下是可能的: dim rs,field,foundField sql = "SELECT * from table;" set rs = conn.execute(sql) For Each field in rs.Fields

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

例如,已选择id、字段1、字段2、字段3。VBScript是否可以检测是否已选择field2。我也希望这是可能的没有循环

请假设我不知道,也看不到实际选择。我需要在执行查询后检测到这一点

这就是使用循环的方式,我也希望这在没有循环的情况下是可能的:

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

我想你需要这个循环。在(我的)身上找到这个:

大多数ASP内置对象都提供集合。收藏是 类似于存储字符串、数字和对象的数组的数据结构 和其他价值观。与数组不同,集合可以扩展和收缩 在检索或存储项目时自动执行。职位 项目也将随着集合的修改而移动您可以访问 通过其唯一字符串键、索引(位置)在集合中的项 在集合中,或通过迭代 收藏。

在任何情况下,您都可以尝试以下方法(未经测试):

dim rs,字段,foundField
sql=“从表中选择*
设置rs=conn.execute(sql)
如果是rs.Fields(“someFieldName”),则
' ... 如果这没有崩溃,它可能会返回
'包含null或0的列的错误否定
如果结束
我使用的函数(在VB6中)与BFAVARETO建议的函数类似。。。我很好奇为什么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
问题中的代码如下所示:

dim rs,field,foundField
sql = "SELECT * from table;"
set rs = conn.execute(sql)
foundField = FieldExists(rs, "someFieldName")

只是为了确认SELECT语句在后端执行,并且数据返回到ADO记录集中?我不确定像字段这样的“集合”是否为此公开了一个方法,但您始终可以构建自己的函数。另外请注意,除非您要查找的字段是最后一个字段(请删除该字段以进行修复),否则您的代码将失败。正如@bfavaretto指出的那样,我已经为@bfavaretto添加了出口,除非正在搜索的字段是最后一个字段,否则它永远不会工作。是的,这是一个ADO RS。我不认为它可以没有循环,但想知道它是否可以?坦克为您提供信息,但不,这是行不通的。似乎需要循环。感谢您的输入。我和其他同事把它研发到死。我们的结论是,在经典的ASP世界中,不可能识别单个字段(如第一篇文章中所述),除非它是集合中没有循环的第一个字段。当这个目标出现在我的任务清单上时,它也被发布在其他论坛上。这不仅是我们的结论,也是每个人的结论。你发布了一个函数,说实话,它看起来需要从循环中调用?我明白了。。。然而,为了正确起见,我正在编辑我的答案,因为我最近一直在做很多VB6,我的大脑决定忽略你明确提到你需要这个来在VBScript中工作的部分。。。我最初发布的函数甚至不会在VBScript中“编译”。这非常有效。如果字段不存在,则捕获错误。@Mat41不正确,此代码证明它是聪明的解决方案!它不使用循环,只是在错误不存在时通过捕获错误来检查是否存在。不管你怎么抗议,你和同事们都错了。应该是公认的答案!函数中缺少错误转到0时的
。我相信“下一步继续执行错误时的
将保持打开状态,这通常是您不希望看到的。
dim rs,field,foundField
sql = "SELECT * from table;"
set rs = conn.execute(sql)
foundField = FieldExists(rs, "someFieldName")