Почему recordset.RecordCount равен 1, но recordset.EOF и recordset.BOF равны True - PullRequest
1 голос
/ 29 июня 2010

У меня очень простой запрос, который возвращает только одну запись. Когда я пытаюсь получить значение из единственного столбца в единственной записи, я получаю «Либо 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 ]

5 голосов
/ 29 июня 2010

Свойство recordcount оставляет курсор в конце набора записей, поэтому вы не можете получить запись (eof = true), вы должны переместиться в первую очередь.Используйте другой тип курсора, потому что тип курсора по умолчанию - только вперед:

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

См. https://www.w3schools.com/asp/prop_rs_cursortype.asp

3 голосов
/ 29 июня 2010

Я использую

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

Для этого сценария

0 голосов
/ 18 сентября 2013

Вызов adoRecordSet.Requery() после запроса RecordCount также может помочь в этой ситуации, если ваш запрос не настолько сложен, чтобы выполнить его во второй раз.

0 голосов
/ 29 июня 2010

Попробуйте

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 голосов
/ 29 июня 2010

-EDIT- Посмотрите на следующую ссылку.Ниже перечислены некоторые причины и решения для большинства из них:

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

[Я был неправ по этому поводу - спасибо, Дейв] Я считаю, что вам нужно вызвать adoRecordset.MoveNext (иликаким бы ни был вызов), прежде чем пытаться получить значение поля в наборе записей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...