2010-06-29 72 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()總記錄請求之後,還可以在這種情況下幫助,如果您的查詢是不那麼複雜執行這是第二次。