'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。
答案 0 :(得分: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 "..."
以下是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
见
答案 1 :(得分:0)
另一个潜在的原因是rs已经打开了记录集。因为您的代码不会在方法内部进行暗淡和初始化,所以我假设它是作为模块变量创建的,并且它看起来不像是被关闭了。 / p>
在某地你需要先调用rs.Close才能再次调用rs.Open。在rs.Open行之前添加它并运行代码。
If Not rs.State = adStateClosed Then
MsgBox "The recordset is already open"
End If