运行时错误'3705':打开对象时不允许进行操作

问题描述 投票:0回答:2
'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。

vba vb6 runtime runtime-error
2个回答
0
投票

发生运行时错误 3705 是因为只有客户端 ADO 记录集

rs
可以断开连接。当您尝试断开服务器端 ADO 记录集的连接时,会发生这种情况。您需要将 ADO Recordset 的
CursorLocation
属性设置为
adUseClient
。假设您的
ADODB.Connection
变量名为
cn
,您需要在打开连接之前添加以下行:

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

这是微软提供的完整示例

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

参见


0
投票

另一个潜在原因是 rs 已经打开了一个记录集。因为您的代码不会在方法内部变暗并初始化 rs,所以我假设它是作为模块变量创建的,并且看起来没有被关闭。

在某个地方,您需要先调用 rs.Close,然后才能再次调用 rs.Open。在 rs.Open 行之前添加此内容并运行您的代码。

If Not rs.State = adStateClosed Then
    MsgBox "The recordset is already open"
End If
© www.soinside.com 2019 - 2024. All rights reserved.