为什么recordset.RecordCount等于1但recordset.EOF和recordset.BOF都等于True

时间:2010-06-29 18:18:19

标签: vbscript

我有一个非常简单的查询,只返回一条记录。当我尝试从唯一记录中的唯一列中取出值时,我得到“要么BOF或EOF为True,要么当前记录已被删除。请求的操作需要当前记录。”这里发生了什么?如果RecordCount为0并且我已经验证记录集确实包含记录,则导致错误的代码甚至不会执行。

代码如下。尝试设置strDN时抛出错误。这很简单,但我无法弄清楚我哪里出错了。

编辑包含命令

<LDAP://DC=something,DC=com>;(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2)(employeeID=01234567));distinguishedName;subtree

Set adoRecordset = adoCommand.Execute


    If adoRecordset.RecordCount > 0 Then


        strDN = adoRecordset.Fields("distinguishedName").Value

        Set objUser = GetObject("LDAP://" & strDN)

        objGroup.add(objUser.ADsPath)

    End if

5 个答案:

答案 0 :(得分:5)

recordcount属性将光标留在记录集的末尾,因此您无法获取记录(eof = true),您必须先移动。使用不同的游标类型,因为默认游标类型仅为向前:

'' Assign cursorType that allows forward and backward movement.
adoRecordset.cursorType = 3 ''adOpenStatic

请参阅https://www.w3schools.com/asp/prop_rs_cursortype.asp

答案 1 :(得分:3)

我用

If Not adoRecordset.EOF And Not adoRecordset.BOF Then
...
End If

对于此场景

答案 2 :(得分:0)

CNC中 看看以下链接。列出了一些原因,以及大多数原因的解决方案:

http://classicasp.aspfaq.com/general/why-do-i-get-bof-or-eof-errors.html

[我错了 - 谢谢,Dave]我相信你需要在尝试获取记录集中字段的值之前调用adoRecordset.MoveNext(或任何调用)。

答案 3 :(得分:0)

尝试

Set adoRecordset = adoCommand.Execute    

    If adoRecordset.RecordCount > 0 Then

        adoRecordset.MoveFirst 'Move to the first record

        strDN = adoRecordset.Fields("distinguishedName").Value

        Set objUser = GetObject("LDAP://" & strDN)

        objGroup.add(objUser.ADsPath)

    End if

答案 4 :(得分:0)

在RecordCount请求之后调用adoRecordSet.Requery()在这种情况下也可以提供帮助,如果您的查询第二次执行它并不复杂。