我有一个非常简单的查询,只返回一条记录。当我尝试从唯一记录中的唯一列中取出值时,我得到“要么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
答案 0 :(得分:5)
recordcount属性将光标留在记录集的末尾,因此您无法获取记录(eof = true),您必须先移动。使用不同的游标类型,因为默认游标类型仅为向前:
'' Assign cursorType that allows forward and backward movement.
adoRecordset.cursorType = 3 ''adOpenStatic
答案 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()
在这种情况下也可以提供帮助,如果您的查询第二次执行它并不复杂。