是否可以检查命名字段是否在记录集中?
已选择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 :(得分: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