无法打开 vba 中的记录集
cannot open recordset in vba
当此 vba 代码尝试打开记录集时,出现以下错误:
运行 时间错误“3709”
该连接不能用于执行此操作。在此上下文中,它要么关闭要么无效。
Set objMyConn = New ADODB.Connection
Set objMyRecordset = New ADODB.Recordset
Dim strSQL As String
objMyConn.ConnectionString = "Driver={SQL Server};Server=localhost\SQLEXPRESS;Database=Contact;Trusted_Connection=True;"
objMyConn.Open
strSQL = "Select * from Contact where Lastname like " + Chr(39) + LastSearch + "%" + Chr(39) + " And Firstname like " + Chr(39) + FirstSearch + "%" + Chr(39)
MsgBox strSQL
objMyRecordset.Open strSQL, cnn, adOpenForwardOnly, adLockOptimistic
这是通用的 ADODB 连接设置
Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strConnection As String
strConnection = "connectionString"
con.Open strConnection
rs.Open "SELECT * FROM Tbl", con
在模块顶部添加 Option Explicit
;您会发现 VBE 对未声明的 cnn
变量尖叫。
您的记录集没有使用任何打开的连接 - 正如错误消息所说。
也就是说,您可以在字符串文字中使用单引号; Chr(39)
那些东西只是无用地混淆了代码。
也可以考虑改用参数。如果您不确定原因,请阅读 Little Bobby Tables.
这是一个例子:
Option Explicit
Sub Test()
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider='SQLOLEDB';Data Source='INSTANCE NAME';Initial Catalog='DATABASE NAME';Integrated Security='SSPI';"
conn.Open
Dim sql As String
sql = "SELECT Field1 FROM dbo.TestTable WHERE Field3 LIKE '%' + ? + '%'"
Dim results As ADODB.Recordset
With New ADODB.Command
.ActiveConnection = conn
.CommandType = adCmdText
.CommandText = sql
.Parameters.Append .CreateParameter(Type:=adVarChar, Value:="foo", Size:=255)
Set results = .Execute
End With
Debug.Print results(0).Name, results(0).Value
results.Close
conn.Close
End Sub
注意 Command
执行 Connection
和 returns a Recordset
.
当此 vba 代码尝试打开记录集时,出现以下错误: 运行 时间错误“3709” 该连接不能用于执行此操作。在此上下文中,它要么关闭要么无效。
Set objMyConn = New ADODB.Connection
Set objMyRecordset = New ADODB.Recordset
Dim strSQL As String
objMyConn.ConnectionString = "Driver={SQL Server};Server=localhost\SQLEXPRESS;Database=Contact;Trusted_Connection=True;"
objMyConn.Open
strSQL = "Select * from Contact where Lastname like " + Chr(39) + LastSearch + "%" + Chr(39) + " And Firstname like " + Chr(39) + FirstSearch + "%" + Chr(39)
MsgBox strSQL
objMyRecordset.Open strSQL, cnn, adOpenForwardOnly, adLockOptimistic
这是通用的 ADODB 连接设置
Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strConnection As String
strConnection = "connectionString"
con.Open strConnection
rs.Open "SELECT * FROM Tbl", con
在模块顶部添加 Option Explicit
;您会发现 VBE 对未声明的 cnn
变量尖叫。
您的记录集没有使用任何打开的连接 - 正如错误消息所说。
也就是说,您可以在字符串文字中使用单引号; Chr(39)
那些东西只是无用地混淆了代码。
也可以考虑改用参数。如果您不确定原因,请阅读 Little Bobby Tables.
这是一个例子:
Option Explicit
Sub Test()
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider='SQLOLEDB';Data Source='INSTANCE NAME';Initial Catalog='DATABASE NAME';Integrated Security='SSPI';"
conn.Open
Dim sql As String
sql = "SELECT Field1 FROM dbo.TestTable WHERE Field3 LIKE '%' + ? + '%'"
Dim results As ADODB.Recordset
With New ADODB.Command
.ActiveConnection = conn
.CommandType = adCmdText
.CommandText = sql
.Parameters.Append .CreateParameter(Type:=adVarChar, Value:="foo", Size:=255)
Set results = .Execute
End With
Debug.Print results(0).Name, results(0).Value
results.Close
conn.Close
End Sub
注意 Command
执行 Connection
和 returns a Recordset
.