[OFF] ONDE ESTA O ERRO NA ROTINA DE EXCLUSAO

LCSD 20/08/2007 11:17:09
#231636
Resposta escolhida
Amigo. vc abriu duas vezes o begintrans, sem finalizar a transação anterior....
ou seja, seria necessário vc finalizar a transação anterior , para iniciar uma nova transação......




USUARIO.EXCLUIDOS 20/08/2007 11:18:36
#231638
Explica melhor ai FOXMAN.
USUARIO.EXCLUIDOS 20/08/2007 11:26:51
#231639
Roberto, se colocar apenas uma transação antes do IF e excluir a linha de novo início de transação, como abaixo:

Private Sub ApagaPagamentosCheques()

[txt-backcolor=#ff0000]' Inicio da Transacao SQL
cnCeramica.begintrans [/txt-backcolor]

' Confirmada a Exclusao
' Elimina Frete da Tabela PagamentosFretes se for o caso
If txtValorPgtoFrete.Text <> "" Then
' Elimina Frete
strSQL = ""
strSQL = "DELETE * FROM PagamentosFretes WHERE Vale = " & CLng(Format(txtVale.Text, "#####0"))
' Nomeia Label para Tratamento de Erro
On Error GoTo ErrPgtoChequeEXC
' Limpa Tabela de Errors
cnCeramica.Errors.Clear
' Executa Comando SQL
cnCeramica.Execute (strSQL)
End If

' Elimina Cheque da Tabela PagamentosCheques
strSQL = ""
strSQL = "DELETE * FROM PagamentosCheques WHERE NumeroPagamento = " & txtNumeroPagamento.Text

' Nomeia Label para Tratamento de Erro
On Error GoTo ErrPgtoChequeEXC
' Limpa Tabela de Errors
cnCeramica.Errors.Clear
' Executa Comando SQL
cnCeramica.Execute (strSQL)

' GRAVA CC de Clientes - EXCLUSAO de Pagamentos CHEQUES
Dim StrErr As Boolean
GravaCC txtCodigoCliente.Text, txtCodigoVendedor.Text, dteDataEmissao.Text, _
"EXCLUSAO Pagamento CHEQUE Numero: " & txtNumeroPagamento.Text, _
txtValorDoc, "0", "X", txtNumeroPagamento.Text, StrErr
If StrErr Then
' Erro Na Gravacao do CC do Cliente
MsgBox "EXCLUSAO - Erro na Gravacao do CC do Cliente."
Exit Sub
End If

' Efetiva a Transacao SQL nas Tabelas
cnCeramica.CommitTrans

Exit Sub

ErrPgtoChequeEXC:
' No caso de Erro Desfazer alteracoes nas Tabelas
cnCeramica.RollbackTrans
funGravaErro Err.Number, Err.Description, Err.Source
End Sub

LCSD 20/08/2007 11:26:57
#231640
Na função ApagaPagamentosCheques() vc inicia duas veses o begintrans sem finalizar a transação, o correto seria :

  Private Sub ApagaPagamentosCheques()

' Confirmada a Exclusao
' Elimina Frete da Tabela PagamentosFretes se for o caso
If txtValorPgtoFrete.Text <> "" Then
' Elimina Frete
strSQL = ""
strSQL = "DELETE * FROM PagamentosFretes WHERE Vale = " & CLng(Format(txtVale.Text, "#####0"))
' Inicio da Transacao SQL
cnCeramica.BeginTrans ' aki vc inicia a transação.......
' Nomeia Label para Tratamento de Erro
On Error GoTo ErrPgtoChequeEXC
' Limpa Tabela de Errors
cnCeramica.Errors.Clear
' Executa Comando SQL
cnCeramica.Execute (strSQL)
End If

' Elimina Cheque da Tabela PagamentosCheques
strSQL = ""
strSQL = "DELETE * FROM PagamentosCheques WHERE NumeroPagamento = " & txtNumeroPagamento.Text

' Inicio da Transacao SQL
cnCeramica.BeginTrans [txt-color=#ff0000]' aki vc inicia novamente a tranzação, matando a intrução anterior, pois deveria ter dado um committrans.......soh haverá alteração daqui para frente....para que a sql anterior tenha efeito, teria q ter dado um committrans e dai sim aberto outro, e mesmo assim com tratamento de erro, caso ocorra erro um rollback seria necessário.....[/txt-color]


' Nomeia Label para Tratamento de Erro
On Error GoTo ErrPgtoChequeEXC
' Limpa Tabela de Errors
cnCeramica.Errors.Clear
' Executa Comando SQL
cnCeramica.Execute (strSQL)

' GRAVA CC de Clientes - EXCLUSAO de Pagamentos CHEQUES
Dim StrErr As Boolean
GravaCC txtCodigoCliente.Text, txtCodigoVendedor.Text, dteDataEmissao.Text, _
"EXCLUSAO Pagamento CHEQUE Numero: " & txtNumeroPagamento.Text, _
txtValorDoc, "0", "X", txtNumeroPagamento.Text, StrErr
If StrErr Then
' Erro Na Gravacao do CC do Cliente
MsgBox "EXCLUSAO - Erro na Gravacao do CC do Cliente."
Exit Sub
End If

' Efetiva a Transacao SQL nas Tabelas
cnCeramica.CommitTrans

Exit Sub

ErrPgtoChequeEXC:
' No caso de Erro Desfazer alteracoes nas Tabelas
cnCeramica.RollbackTrans
funGravaErro Err.Number, Err.Description, Err.Source
End Sub

USUARIO.EXCLUIDOS 20/08/2007 11:33:02
#231641
FOXMAN e JSILVA29 mataram a questão...
Estou pontuando o FOXMAN

Solução do Problema.

O ERRO acontece quando a variavel txtValorPgtoFrete.text eh diferente de zero, ou seja,
teremos 3xBeginTrans e apenas 2xCommitTrans
Quando a variavel txtValorPgtoFrete.txt eh igual a ZERO tudo funciona.
DICA:
Sempre que usar o BeginTrans, tem que ter um CommitTrans pra ele do contrário um "RollBack" será executado e as alterações no BD não serão efetivadas.

Segue o código corrigido funcionando:

Private Sub ApagaPagamentosCheques()

' Confirmada a Exclusao
' Inicio da Transacao SQL
cnCeramica.BeginTrans
' Nomeia Label para Tratamento de Erro
On Error GoTo ErrPgtoChequeEXC

' Elimina Frete da Tabela PagamentosFretes se for o caso
If txtValorPgtoFrete.Text <> "" Then
' Elimina Frete
strSQL = ""
strSQL = "DELETE * FROM PagamentosFretes WHERE Vale = " & CLng(Format(txtVale.Text, "#####0"))
' Limpa Tabela de Errors
cnCeramica.Errors.Clear
' Executa Comando SQL
cnCeramica.Execute (strSQL)
End If

' Elimina Cheque da Tabela PagamentosCheques
strSQL = ""
strSQL = "DELETE * FROM PagamentosCheques WHERE NumeroPagamento = " & txtNumeroPagamento.Text
' Limpa Tabela de Errors
cnCeramica.Errors.Clear
' Executa Comando SQL
cnCeramica.Execute (strSQL)

' GRAVA CC de Clientes - EXCLUSAO de Pagamentos CHEQUES
Dim StrErr As Boolean
GravaCC txtCodigoCliente.Text, txtCodigoVendedor.Text, dteDataEmissao.Text, _
"EXCLUSAO Pagamento CHEQUE Numero: " & txtNumeroPagamento.Text, _
txtValorDoc, "0", "X", txtNumeroPagamento.Text, StrErr
If StrErr Then
' Erro Na Gravacao do CC do Cliente
MsgBox "EXCLUSAO - Erro na Gravacao do CC do Cliente."
Exit Sub
End If

' Efetiva a Transacao SQL nas Tabelas
cnCeramica.CommitTrans

Exit Sub

ErrPgtoChequeEXC:
' No caso de Erro Desfazer alteracoes nas Tabelas
cnCeramica.RollbackTrans
funGravaErro Err.Number, Err.Description, Err.Source
End Sub

USUARIO.EXCLUIDOS 20/08/2007 11:34:29
#231642
OPS!
Não vai dar pra pontuar ninguém.
Tópicos [OFF] não pontuam. Foi mal.
At,
LCSD 20/08/2007 11:38:42
#231643
Procedimentos para transações.

seubd.begintrans

'instruçoes...........

'entre esse inicio de transação e a conclusão da transação naum poderá haver uma nova trasação.






tratamento de erro.......

select case err.number
case is 0
seubd.committrans
case xxxxxxx
msgbox "xxxxxxx"
seubd.rollbacktrans
end select


Página 2 de 2 [17 registro(s)]
Tópico encerrado , respostas não são mais permitidas