检测记录集中是否存在名称字段
是否有可能检查某个指定字段是否在记录集内?检测记录集中是否存在名称字段
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
我认为你需要的循环。发现这个在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
坦克给你的信息,但没有不工作。看起来像循环是必需的。 – Mat41 2013-05-13 04:01:45
我使用了类似的功能(在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")
感谢您的意见。我和其他同事研发了这个死刑。我们的结论是,它在经典ASP世界中不可能识别单个字段(如初始文章中所述),除非其集合中的第一个没有循环。回到这个目标在我的待办事项列表上时,它也发布在其他论坛上。它不仅仅是我们的结论,它是每个人的。你已经发布了一个看起来像是需要从循环中调用的函数,以保持诚实? – Mat41 2014-09-17 01:02:58
我明白了...但是,为了正确,我正在编辑我的答案,因为我最近一直在做很多VB6,而且我的大脑决定忽略你明确提到你需要这个工作的部分在VBScript中......我贴出来的函数甚至不会在VBScript中“编译”。 – ferc 2014-09-17 07:50:50
这很好。如果该字段不存在,赶上错误。 – 2016-01-13 20:34:56
只是为了确认一个SELECT语句在后端执行并且数据被返回到ADO Recordset中? – 2013-05-10 02:28:57
我不确定像Fields这样的“Collections”是否会为此提供一种方法,但是您始终可以构建自己的函数。另外请注意,除非您要查找的字段是最后一个字段,否则您的代码将会失败 – bfavaretto 2013-05-10 02:48:58
我已经为@bfavaretto添加了exit,指出它永远不会工作,除非字段是被搜查是最后一个领域。是的,它是一个ADO RS。我不知道它可以做到没有循环,但想知道它可以吗? – Mat41 2013-05-10 05:55:25