Ошибка выполнения "3705": операция не разрешена, когда объект открыт

'Redundancy checking function
Private Function Redundancy_Check(Sup_ID)
rs.Open "Select*from tblSupplier where Supplier_ID='" & Sup_ID & "'", cn, 3, 3
If rs.RecordCount > 0 Then
    If Not (rs.BOF And rs.EOF) Then
        iTerminate = True
    End If
End If
Set rs = Nothing
End Function

Что-то не так с моим кодированием? Я проверил журнал и в нем говорится:

"Невозможно загрузить элемент управления usrGrid."

Я использую Visual Basic 6.0 + MS Access.

2 ответа

Другая потенциальная причина в том, что rs уже имеет открытый набор записей. Поскольку ваш код не тускнеет и не инициализирует rs внутри вашего метода, я предполагаю, что он создан как переменная модуля и не выглядит как закрываемый.

Где-то вам нужно позвонить rs.Close, прежде чем вы сможете снова вызвать rs.Open. Добавьте это перед строкой rs.Open и запустите ваш код.

If Not rs.State = adStateClosed Then
    MsgBox "The recordset is already open"
End If

Ошибка 3705 во время выполнения происходит потому, что только наборы записей ADO на стороне клиента rs можно отключить Это происходит, когда вы пытаетесь отключить набор записей ADO на стороне сервера. Вам нужно установить CursorLocation свойство набора записей ADO для adUseClient, Предположим, что ваш ADODB.Connection переменная называется cn, вам нужно добавить следующую строку, прежде чем открывать соединение:

Set cn = New ADODB.Connection
cn.CursorLocation = adUseClient ' avoid error 3705
cn.Open "..."

Вот полный пример, предоставленный Microsoft

Private Sub Command1_Click()

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset

'Place cn.CursorLocation = adUseClient here
cn.Open "Provider=SQLOLEDB;Data Source=<SQL Server>;Initial Catalog=pubs;User Id=<UID>;Password=<PWD>" 
rs.Open "Select * from authors", cn, adOpenStatic, adLockBatchOptimistic

Set rs.ActiveConnection = Nothing

rs.Close
cn.Close

End Sub

Увидеть

Другие вопросы по тегам