2012-05-31 46 views
1

我在本地表中使用Access 2003,稍後將傳輸並鏈接到SQL Server 2008表。我正在使用下面的代碼,但在cnn.Execute行上出現錯誤:「運行時錯誤3704:對象關閉時不允許操作」。訪問ADO:當對象關閉時不允許操作錯誤消息

sub test() 
On Err GoTo Err_Sub 
    Dim cnn As ADODB.Connection 
    Dim rs As ADODB.Recordset 

    Dim str As String 
    Dim strSQL As String 

    'Open a connection. 
    Set cnn = New ADODB.Connection  
    cnn.ConnectionString = _ 
     "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
     "Data Source=" & CurrentDb.Name & ";" & _ 
     "Persist Security Info=False" 

    strSQL = Me.RecordSource 
    str = Mid(strSQL, InStr(strSQL, "Where ")) 
    strSQL = "Update myTable SET Active = False " & str 

    Set rs = cnn.Execute(strSQL) 

    If Not rs Is Nothing Then rs.Close 

Exit_Sub: 
    Set rs = Nothing 
    Exit Sub 

Err_Sub: 
    MsgBox Err.Description 
    Resume Exit_Sub 
End Sub 

回答

2

退出之前嘗試CurrentProject.Connection.Execute strSQL,而不是聲明你cnn對象。

+0

它的工作,但這樣做,我不會需要rs對象。我也沒有在這個過程中使用ADO。 – Rick

1

那很簡單。您需要添加

cnn.Open 

地方cnn.Execute 前也不要忘記調用

cnn.Close 
Set cnn = nothing 

從子

+0

On cnn.open我收到錯誤信息:「數據庫已經由用戶'Admin'置於機器'xxxx'的狀態,防止它被打開或鎖定。」 – Rick

+0

@Rick與DAO不同,在使用ADO與MS Access DB之前,您必須保存。 – Fionnuala

+0

不能幫助。這個錯誤的原因非常廣泛。從設計模式中打開的簡單表格到併發問題。搜索錯誤消息的第一部分可能是一個起點。 – Steve

5

也進入這個錯誤(在我的情況下,我正在使用存儲過程來檢索一些信息)。我做了一些改動,導致執行失靈。

當我將SET NOCOUNT ON作爲存儲過程的第一條語句時,錯誤消失。

相關問題