Uma transação pode ser definida como uma série de alterações realizadas nos dados de uma aplicação. Assim o início de uma sessão começa uma transação e o encerramento da sessão (fechamento do programa) termina a transaçã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:
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 |
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 termporá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 necessariamentes 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
. . . 'código com as alterações RS.Update
|
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...