sql-server - 在 VBA 中使用记录集时如何修复错误 7965?
问题描述
我正在使用 VBA 中的子表单(ms access 2013)。我正在尝试使用从存储过程(SQL-Server v17.9.1)返回的数据加载 2 个文本框当我在 Management Studio 中运行 proc 时,我得到 3 行返回,只有 2 列员工的姓名缩写和总数他们的客户。
当我尝试将表单的记录集 (Set Me.Recordset = rst) 设置为查询返回的记录集时,出现以下错误:
“错误 7965:您输入的对象不是有效的 Recordset 属性。”
这是一个现有的访问数据库(2013),我的公司希望将访问表单保留为前端,但将所有数据和操作指向一个 SQL-Server(V17.9.1)数据库。
Private Sub Form_Load()
Dim strError As String
Dim cnn As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
On Error GoTo Err_Handler
Set cnn = New ADODB.Connection
cnn.Open gconConnectOLEDB
Set cmd = New ADODB.Command
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "spGetInitialsAndCounts"
cmd.ActiveConnection = cnn
Set rs = New ADODB.Recordset
Set rs = cmd.Execute
Set Me.Recordset = rs '<---- This is where the error is occurring
Me.Rep.ControlSource = "Rep"
Me.CountOfRep.ControlSource = "CountOfActiveClients"
Exit_Handler:
On Error Resume Next
If LenB(strError) Then
MsgBox strError, vbCritical, Me.Name & ".Form_Load"
End If
If Not(rs Is Nothing) Then
rs.Close
Set rs = Nothing
End If
If Not(cnn Is Nothing) Then
If Not(cnn.State = adStateClosed) Then cnn.Close
Set cnn = Nothing
End If
Exit Sub
Err_Handler:
strError = "Error " & Err.Number & ": " & Err.Description
Resume Exit_Handler
End Sub
最令人沮丧的是在其他形式中使用了类似的代码,并且文本框填充正确。
感谢您提供的任何帮助和见解。
解决方案
经过大量研究,最终发现需要将 ADODB Recordset 的“CursorLocation”属性设置为 adUseClient。“CursorLocation”属性可以设置为“adUseServer”或“adUseClient”。就我而言,我根本没有为它指定一个值,它默认为 adUseServer。我更正的代码片段如下:
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cnn = New ADODB.Connection
cnn.Open gconConnectOLEDB
With rs
Set .ActiveConnection = cnn
.Source = "EXEC spSQLServerProc "
.LockType = adLockOptimistic
.CursorType = adOpenKeyset
**.CursorLocation = adUseClient**
.Open
End With
Set Me.Recordset = rs
推荐阅读
- python - 帕拉米科谈惠普供应
- python - 无法按照我的意愿调整列表
- r - 重新排列多个 GGPLOT2 图表和移动/调整比例时遇到问题
- python - Python子进程模块等待方法
- scala - 澄清为什么我不能通过它的子类型覆盖使用泛型类参数的方法
- sql-server - SSDT - 排除某些模式以及未命名的约束
- mongodb - 使用 Go 获取 MongoDB 中的所有模型树子节点
- django-models - 从 pandas 数据框中快速更新 django 模型对象
- python - Python字符串格式中的“f”和“F”有区别吗?
- amazon-web-services - 在 AWS EMR 中运行 spark sql 查询