2010-06-29 77 views
1

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

代码如下。尝试设置strDN时引发错误。它很简单,但我无法弄清楚我要去哪里错了。

编辑,包括COMMAND

<LDAP://DC=something,DC=com>;(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2)(employeeID=));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

我编辑了我的问题。该命令包含在上面的代码中。 – res 2010-06-29 18:36:38

回答

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

0

CNC中 看一看下面的链接。有大多数他们的一些列原因和解决方案:

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

[我错了这一点 - 感谢,戴夫]我相信你需要调用adoRecordset.MoveNext(或任何呼叫)之前试图获取记录集中字段的值。

+0

如果我这样做,我得到相同的错误,它只是抛出adoRecordset.MoveNext,而不是当我设置strDN – res 2010-06-29 18:29:21

+0

ADO在ASP&VBScript自动读取第一个记录,不像在.NET中的ADO读取器 – Dave 2010-06-29 18:40:03

3

我用

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

对于这种情况

+0

这可能是最好的方法来检查是否至少找到一条记录。根据游标类型,RecordCount属性的行为有所不同。 – 2010-06-30 02:56:03

+0

嗯,我完全不知道它为什么会起作用,但如果我使用BOF和EOF代替RecordCount来检查记录的存在,那么一切正常。谢谢你的帮助! – res 2010-06-30 14:12:55

+0

请参阅remou的回答,以解释为什么这样可以解决问题。 – Jason 2010-06-30 14:56:14

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

我已经试过这个,但是我得到了同样的错误,它只是抛出在adoRecordset.MoveFirst – res 2010-06-30 14:04:01

+0

@res:你使用什么类型的光标?请参阅Remou的答案。你必须使用向前和向后移动的光标。 – Tester101 2010-06-30 16:39:19

0

调用adoRecordSet.Requery()总记录请求之后,还可以在这种情况下帮助,如果您的查询是不那么复杂执行这是第二次。