BEGIN E COMMITTRANS VANTAGENS NO ADO?

TAMANINI 17/01/2005 15:54:17
#61431
Há alguma vantagem em utilizar o BeginTrans e commitTrans, além do rollback? Ficará mais lento o processo?
Estou tendo problemas com alguns clientes que acaba a energia e nesse momento ele está atualizando os dados e acaba ficando alguns dados não preenchido e com isso gera erros quando for selecionar os registros. E pelo que li em alguns artigos o begin, commit e rollback me ajudaria nesse problema, se acabasse a energia ou desligassem o micro por besteira, alguém saberia me explicar?
O processo que estarei fazendo é mais ou menos isto, faço um um insert para inserir um histórico em uma tabela e um laço com vários registros dos dados do histórico em outra tabela, por exemplo 60 registros:
Exemplo +ou- parecido com o meu:
---
On Error GoTo Erro
SQL = insert...
Con.BeginTrans
Con.Execute SQL
Con.CommitTrans
For I = 1 To xParcela
xDat_Vencimento = xDtInicial + xDias
SQL = "INSERT INTO TBLPARC_CONT_PAGAR (COD_CONTA,"
SQL = SQL & "DAT_VENCIMENTO,"
SQL = SQL & "V_PARCELA,"
SQL = SQL & "PAGO,"
SQL = SQL & "PARCELA) VALUES ( "
SQL = SQL & "'" & TxtCodigo.Text & "','"
SQL = SQL & xDat_Vencimento & "','"
SQL = SQL & xVlParcelas & "',"
SQL = SQL & "0,'"
SQL = SQL & I & "')"

Con.BeginTrans
Con.Execute SQL
Con.CommitTrans
xDias = xDias + 30
Next
exit sub
Erro:
Con.RollbackTrans

RXGOMES 17/01/2005 16:21:53
#61434
Tamanini, quando eu comecei a usar o begin e committrans não senti nenhuma difierença no tempo de executação. Eu mudaria a rotina do FOR

con.BeginTrans

For I = 1 To xParcela
xDat_Vencimento = xDtInicial + xDias
SQL = "INSERT INTO TBLPARC_CONT_PAGAR (COD_CONTA,"
SQL = SQL & "DAT_VENCIMENTO,"
SQL = SQL & "V_PARCELA,"
SQL = SQL & "PAGO,"
SQL = SQL & "PARCELA) VALUES ( "
SQL = SQL & "'" & TxtCodigo.Text & "','"
SQL = SQL & xDat_Vencimento & "','"
SQL = SQL & xVlParcelas & "',"
SQL = SQL & "0,'"
SQL = SQL & I & "')"

Con.Execute SQL

xDias = xDias + 30
Next
Con.CommitTrans
exit sub
Erro:
Con.RollbackTrans

Assim vc elimina duas rotinas do FOR. (neste ponto a rotina ganha velocidade)
TAMANINI 17/01/2005 16:58:34
#61441
Não entendi, só tem uma rotina do FOR.
1º) Eu insiro um registro em uma tabela e depois insiro vários registros através de um FOR em outra tabela. As tabelas estão relacionadas em 1 para n.
A minha dúvida é se por exemplo acaba a energia e nisto não inseriu os 60 registros, apenas inseriu o registro do histórico e tinha começado a inserir os dados do registro do histórico, por exemplo acabou parando no 10º registro, com o rollbackTrans ele voltaria para o registro do histórico anterior, excluindo os 10 dados do historico e o historico que está relacionado a estes 10 registros?
USUARIO.EXCLUIDOS 17/01/2005 17:56:31
#61457
Caro Tamanini, desculpe-me por meter-me no assunto mas nao sei se chegou a notar q o
committrans do RXGOMES esta fora do FOR .. NEXT, no caso dele só ira gravar os dados
apos os 60 registros estarem gravados no banco sem nenhum problemas, se faltar energia o BD ira ignorar os registros

No seu FOR..... NEXT, vc colocou o committrans dentro do laco e a cada registro tu manda
gravar, um apos o outro, se acaso cair o cliente, nao houve nenhuma falha pois ja estava
gravado, como tu especificou no sistema.

Espero ter ajudado e não atrapalhado.

Abracos.
Lins
TAMANINI 17/01/2005 18:09:01
#61458
Vlw. Então só encerraria(CommitTrans) quando acabasse de inserir todos os dados do registro do FOR, e preciso do rollbackTrans na função de verificação de erro?
TAMANINI 18/01/2005 07:51:03
#61499
up!
Tópico encerrado , respostas não são mais permitidas