BEGIN E COMMITTRANS VANTAGENS NO ADO?
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:
---
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
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)
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)
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?
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?
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
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
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?
up!
Tópico encerrado , respostas não são mais permitidas