无法在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 
+2

这是什么'cnn'?这不应该是'objMyConn'吗? –

在您的模块的顶部添加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回报一个RecordsetCommand

+0

谢谢。感到惊讶,我没有看到。我有选择明确,但我没有得到变量声明投诉.... – Luv

+0

@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