O Processamento de Transações: BeginTrans, CommitTrans e RollBack.
Uma transação pode ser definida como um conjunto de operações(alteração,inclusão,exclusão,atualização,etc.) realizadas nos dados de uma aplicação em um dado momento. Uma transação tem o seu início no início de uma sessão e o seu término no encerramento da sessão (fechamento do programa ou operação.).
O ínicio de uma nova transação é marcada pela diretiva BeginTrans , o encerramento pela diretiva CommitTrans e o Cancelamento da transação pela diretiva RollBack.
O processamento da transação é realizado pelo objeto Workspace definido em uma sessão.Então temos:
O processamento de transações permite a você proteger a integridade dos dados garantindo que múltiplas alterações em uma ou mais tabelas de dados ocorram de forma integrada , permitindo que todas as alterações sejam realizadas ou caso contrário nenhuma alteração ocorra.
Por exemplo : a transferência de valores de uma conta corrente para a conta de poupança de uma pessoa precisa ser realizada como uma transação , vejamos os passos envolvidos:
'Vejamos o
exemplo de débito de um valor da Conta Corrente e
Crédito na Conta de Poupança dim db as database dim conta as recordset dim poupanca as recordset set db=OpenDatabase( app.path & "\banco.mdb") set conta=db.OpenRecordset("tblconta", DbopenTable) set poupanca=db.OpenRecordset("tblpoupanca", dbOpenTable) 'inicia a transação tratando todas as alterações subsequentes como uma unidade DBEngine.Workspaces(0).BeginTrans conta.edit conta("saldo")=conta("saldo")-valor conta.update 'se a energia acabar neste ponto o valor não seria subtraido do saldo da conta corrente poupanca.addnew poupanca("saldo")=poupanca("saldo")+valor poupanca.update 'neste ponto iremos permitir ao usuário salvar as alterações ou abortá-las If MsgBox("Confirma a operação : Debito em Conta Corrente e Crédito em Poupança ? ", vbYesNo) = vbYes Then DBEngine.Workspaces(0).CommitTrans 'salva as alterações Else DBEngine,Workspaces(0).RollBack 'aborta as alterações End If |
Podemos aninhar no máximo até cinco transações sendo que cada nível precisa ser encerrado antes que as transações de nível mais alto sejam executadas.
Quando usamos consultas ação há uma transação implícita sendo executada , de forma que se a consulta falhar as alterações não serão realizadas.
Quando múltiplas alterações precisam ser realizadas em uma ou mais tabelas, a utilização de transações aumenta a velocidade do processo, pois os dados serão armazenados em um cache de memória antes de serem escritos nos arquivos e assim o acesso a disco diminui. No momento que o cache encher um arquivo em disco de transferência temporário será usado e o desempenho cai.
Se você fechar o objeto Workspace sem salvar or encerrar as transações pendentes, as transações são automaticamente canceladas.(RollBack).
Se você usar o método CommitTrans ou o método RollBack sem iniciar uma transação com BeginTrans, o Jet retorna um erro.
Se você usar os métodos addNew, Edit ou Update dentro de um loop que editará mais que um registro , a versão 3.0 de Jet Engine, pode tratar o loop como uma transação implícita. Isto significa que as atualizações não serão necessariamente efetuadas nos arquivos. Naturalmente isto afetará o tratamento de erros , o bloqueio de páginas e visibilidade das alterações para outros usuários. Para garantir que as alterações sejam imediatamente escritas nos arquivos encerre cada bloco Edit/Update dentro de uma transação explicita. Vejamos um exemplo abaixo:
While NOT RS.EOF
WS.BeginTrans |
Quando você inicia uma transação, o Jet Engine grava esta operação em um arquivo no diretório definido pela variável TEMP de seu ambiente na estação. Se o arquivo de log da transação esgota o espaço disponível no diretório TEMP , o Jet dispara o erro 2004.
Dica: Para aumentar a performance de sua aplicação você pode encerrar as operações de acesso a disco dentro de blocos de transações. Desta forma você esta reduzindo o acesso a disco e trabalhando com o buffer de memória.
Até a próxima...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#