无法在vba中打开记录集
当此vba代码尝试打开记录集时,出现以下错误: 运行时错误'3709' 该连接无法用于执行此操作。在这种情况下,它是封闭的或无效的。无法在vba中打开记录集
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
在您的模块的顶部添加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
注意到它的执行关闭Connection
和回报一个Recordset
的Command
。
谢谢。感到惊讶,我没有看到。我有选择明确,但我没有得到变量声明投诉.... – Luv
@Luv所以它的声明。我的开源项目[Rubberduck](http://rubberduckvba.com)会捡起它 - 它会发布一个使用未分配变量的检查结果(假设它是一个局部变量)。试一试! –
这里的通用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
这是什么'cnn'?这不应该是'objMyConn'吗? –