2013-05-10 40 views
3

是否有可能检查某个指定字段是否在记录集内?检测记录集中是否存在名称字段

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

+0

只是为了确认一个SELECT语句在后端执行并且数据被返回到ADO Recordset中? – 2013-05-10 02:28:57

+0

我不确定像Fields这样的“Collections”是否会为此提供一种方法,但是您始终可以构建自己的函数。另外请注意,除非您要查找的字段是最后一个字段,否则您的代码将会失败 – bfavaretto 2013-05-10 02:48:58

+0

我已经为@bfavaretto添加了exit,指出它永远不会工作,除非字段是被搜查是最后一个领域。是的,它是一个ADO RS。我不知道它可以做到没有循环,但想知道它可以吗? – Mat41 2013-05-10 05:55:25

回答

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 
+0

坦克给你的信息,但没有不工作。看起来像循环是必需的。 – Mat41 2013-05-13 04:01:45

7

我使用了类似的功能(在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") 
+0

感谢您的意见。我和其他同事研发了这个死刑。我们的结论是,它在经典ASP世界中不可能识别单个字段(如初始文章中所述),除非其集合中的第一个没有循环。回到这个目标在我的待办事项列表上时,它也发布在其他论坛上。它不仅仅是我们的结论,它是每个人的。你已经发布了一个看起来像是需要从循环中调用的函数,以保持诚实? – Mat41 2014-09-17 01:02:58

+0

我明白了...但是,为了正确,我正在编辑我的答案,因为我最近一直在做很多VB6,而且我的大脑决定忽略你明确提到你需要这个工作的部分在VBScript中......我贴出来的函数甚至不会在VBScript中“编译”。 – ferc 2014-09-17 07:50:50

+1

这很好。如果该字段不存在,赶上错误。 – 2016-01-13 20:34:56