2012-05-31 1 views
1

Я использую Access 2003 с локальной таблицей, которая позже будет передана и привязана к таблице SQL Server 2008. Я использую следующий код, но получаю сообщение об ошибке: «Ошибка выполнения 3704: операция не разрешена, когда объект закрыт» в строке cnn.Execute.Доступ 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

На cnn.open Я получаю сообщение об ошибке: «База данных была помещена пользователем в« Admin »на машине« xxxx », которая предотвращает ее открытие или блокировку». – Rick

+0

@Rick В отличие от DAO, вы должны сохранить перед использованием ADO с MS Access DB. – Fionnuala

+0

Не могу помочь. Причины этой ошибки очень широкие. Из простой таблицы, открытой в режиме проектирования, на проблемы параллелизма. Поиск первой части сообщения об ошибке может быть отправной точкой. – Steve

5

Изнашивание этой ошибки (в моем случае я использую хранимую процедуру для получения некоторой информации). Я внесла некоторые изменения, которые вызвали сбой в работе.

Ошибка исчезла, когда я положил SET NOCOUNT ON в качестве первого утверждения хранимой процедуры.

Смежные вопросы