无法打开 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 执行 Connectionreturns a Recordset.