Ошибка выполнения "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
Увидеть