ID do artigo: 223213 - Última revisão: quinta-feira, 23 de junho de 2005 - Revisão: 3.0

ACC2000: Erro usando CurrentProject.Connection no transações

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Avançadas: Requer especialista de codificação, interoperabilidade e habilidades de multiusuário.

Este artigo se aplica a um banco de dados do Microsoft Access (.mdb) e para um projeto Microsoft Access (.adp).

Nesta página

Expandir tudo | Recolher tudo

Sintomas

Se você usar os métodos CommitTrans ou RollbackTrans diretamente com o objeto CurrentProject.Connection , você pode receber uma das seguintes erros:
Você tentou confirmar ou reverter uma transação sem primeiro iniciar uma transação.
- ou -
Nenhuma transação está ativa.

Causa

Cada vez que o objeto CurrentProject.Connection é usado, ele possui um ponteiro diferente para a conexão. Na verdade, a instância ou ponteiro para esse objeto é temporário. Isso é por que você não vê nenhum erro em CurrentProject.Connection.BeginTrans , mas você receber um erro quando tentar confirmar ou reverter a transação.

Resolução

Microsoft fornece exemplos de programação apenas para ilustração, sem garantia expressa ou implícita. Isso inclui, mas não está limitado a, garantias implícitas de comercialização ou adequação para uma finalidade específica. Este artigo presume que você está familiarizados com a linguagem de programação que está sendo demonstrada e com as ferramentas que são usadas para criar e depurar procedimentos. Engenheiros de suporte podem ajudar a explicar a funcionalidade de um determinado procedimento, mas eles não modificarão esses exemplos para fornecer funcionalidades adicionais ou construir procedimentos para atender às suas necessidades. cuidado : se você seguir as etapas neste exemplo, você modificar o banco de dados de exemplo Northwind.mdb. Convém fazer o backup do arquivo Northwind.mdb e seguir essas etapas numa cópia do banco de dados.

Definir uma variável de objeto uma vez para CurrentProject.Connection e use-lo para a transação de processamento, como no exemplo a seguir. Aqui, "c" é o objeto de conexão usado para transações:

Observação : O código de exemplo neste artigo usa o Microsoft ActiveX Data Objects. Para que este código seja executado corretamente, você deve fazer referência a 2.x Microsoft ActiveX Data Objects Library (onde 2.x é 2.1 ou posterior.) Para fazer isso, clique em referências no menu Ferramentas no Editor do Visual Basic e veja que a caixa de seleção 2.x Microsoft ActiveX Data Objects Library está selecionada.

  1. Abra o banco de dados de exemplo Northwind.mdb.
  2. Na janela do banco de dados, clique em módulos em objetos e, em seguida, clique em novo .
  3. Digite o seguinte código no novo módulo:
    Sub tstConnectionObj()
    
       Dim c As ADODB.Connection
       Dim rs As ADODB.Recordset
    
       Set c = CurrentProject.Connection
       Set rs = New ADODB.Recordset
    
       rs.Open "Categories", c, adOpenDynamic, adLockOptimistic
    
       c.BeginTrans
       rs.Fields(1) = "Drinks"
    
       rs.Update
       MsgBox "Updated field to " & rs.Fields(1) & "."
    
       c.RollbackTrans
       rs.Requery
       MsgBox "Rolled back field to " & rs.Fields(1) & "."
    
    End Sub
    					
  4. Na janela Immediate, digite o seguinte e pressione ENTER:
    tstConnectionObj
    						
    anotação que você vir a seguinte mensagem:
    Campo atualizado para bebidas.
  5. Clique em OK na mensagem. Observe que você vir a seguinte mensagem:
    Revertida campo para bebidas.
  6. Clique em OK na mensagem.

Mais Informações

Etapas para reproduzir o problema

  1. Abra o banco de dados de exemplo Northwind.mdb.
  2. Na janela do banco de dados, clique em módulos em objetos e, em seguida, clique em novo .
  3. Digite o seguinte código no novo módulo:
    Sub tstCurrentProj()
    
       Dim rs As ADODB.Recordset
    
       Set rs = New ADODB.Recordset
    
       rs.Open "Categories", CurrentProject.Connection, adOpenDynamic, _
         adLockOptimistic
    
       CurrentProject.Connection.BeginTrans
       rs.Fields(1) = "Drinks"
       rs.Update
       MsgBox "Updated field to " & rs.Fields(1) & "."
    
       CurrentProject.Connection.RollbackTrans
       MsgBox "Rolled back field to " & rs.Fields(1) & ".
    
    End Sub
    					
  4. Na janela Immediate, digite o seguinte e pressione ENTER:
    tstCurrentProj
    						
    anotação que você vir a seguinte mensagem:
    Campo atualizado para bebidas.
  5. Clique em OK na mensagem.

    Observe que você ver a primeira mensagem de erro mencionada na seção "Sintomas" deste artigo.

A informação contida neste artigo aplica-se a:
  • Microsoft Access 2000 Standard Edition
Palavras-chave: 
kbmt kbprb KB223213 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 223213  (http://support.microsoft.com/kb/223213/en-us/ )