Transação (ODBC)
Este tópico aplica-se às classes ODBC do MFC.
Uma transação é uma maneira de agrupar, ou pôr em lote, uma série de atualizações para uma fonte de dados para que todas sejam confirmadas de uma só vez ou nenhuma seja confirmada se você reverter a transação. Se você não usar uma transação, as alterações na fonte de dados serão confirmadas automaticamente em vez de serem confirmadas sob demanda.
Observação
Nem todos os drivers de banco de dados ODBC dão suporte a transações. Chame a função CanTransact
membro de seu objeto CDatabase ou CRecordset para determinar se o driver dá suporte a transações para um determinado banco de dados. Observe que CanTransact
não informa se a fonte de dados fornece suporte completo à transação. Você também precisa chamar CDatabase::GetCursorCommitBehavior
e CDatabase::GetCursorRollbackBehavior
depois de CommitTrans
e Rollback
para verificar o efeito da transação no objeto aberto CRecordset
.
Chamadas para as funções de membro AddNew
e Edit
de um objeto CRecordset
afetam a fonte de dados imediatamente quando você chama Update
. Chamadas Delete
também entram em vigor imediatamente. Por outro lado, você pode usar uma transação que consiste em várias chamadas para AddNew
, Edit
, Update
e Delete
, que são executadas mas não confirmadas até que você chame CommitTrans
explicitamente. Ao estabelecer uma transação, você pode executar uma série dessas chamadas, ao mesmo tempo em que mantém a capacidade de revertê-las. Se um recurso crítico não estiver disponível ou alguma outra condição impedir que a transação seja inteiramente concluída, você poderá reverter a transação em vez de confirmá-la. Nesse caso, nenhuma das alterações referentes à transação afetará a fonte de dados.
Observação
Atualmente, a classe CRecordset
não dá suporte a atualizações para a fonte de dados se você tiver implementado a busca em massa de linhas. Isso significa que você não pode fazer chamadas paraAddNew
, Edit
, Delete
ou Update
. No entanto, você pode escrever suas próprias funções para executar atualizações e, em seguida, chamar essas funções dentro de uma determinada transação. Para obter mais informações sobre busca de linhas em massa, confira Conjunto de registros: buscando registros em massa (ODBC).
Observação
Além de afetar o conjunto de registros, as transações afetam as instruções SQL que você executa diretamente, desde que use o HDBC ODBC associado ao seu objeto CDatabase
ou a um HSTMT ODBC com base nesse HDBC.
As transações são particularmente úteis quando você tem vários registros que devem ser atualizados simultaneamente. Nesse caso, você deseja evitar uma transação deixada pela metade, como pode acontecer se uma exceção tiver sido lançada antes de a última atualização ser feita. Agrupar essas atualizações em uma transação permite uma recuperação (reversão) das alterações e retorna os registros ao estado de pré-transação. Por exemplo, em uma transação bancária automatizada, se você transferir dinheiro de uma conta A para a conta B, tanto a retirada de A quanto o depósito em B devem processar os fundos corretamente, ou a transação inteira falhará.
Nas classes de banco de dados, você executa transações por meio de objetos CDatabase
. Um objeto CDatabase
representa uma conexão com uma fonte de dados, e um ou mais conjuntos de registros associados a esse objeto CDatabase
operam em tabelas do banco de dados por meio de funções de membro do conjunto de registros.
Observação
Só há suporte para um nível de transações. Você não pode aninhar transações nem uma transação pode abranger vários objetos de banco de dados.
Os tópicos a seguir fornecem mais informações sobre como as transações são executadas: