Fórum Erro na Transação com delphi #389006
21/10/2010
0
o que ha de errado na rotina abaixo , o erro aparece justo na linha vermelha , e estranho e que tenho outras transaçoes com esses mesmo padrao
procedure TfrmRadioLocar.finaliza_locacao;
var
x: TMotoqueiro;
NovoSaldo: Real;
LimiteDebito: Real;
r: TRadio;
t: TDBXTransaction;
begin
if fnc_verifica_dados_Motoqueiro(edtMatricula.Text) then
raise Exception.Create('Não será possivel locar o Rádio com os dados do Motoqueiro desatualizados');
if edtvalorpagamento.Text = EmptyStr then
edtvalorpagamento.Text := IntToStr(0);
NovoSaldo := StrToFloat(edtnovosaldo.Text);
LimiteDebito := StrToFloat(edtlimitedebito.Text);
if LimiteDebito < -NovoSaldo then
raise Exception.Create('Limite do motoqueiro insuficiente para uma nova locação !');
case Application.MessageBox('Deseja concluir a locação para esse motoqueiro ?', 'Locação ',
MB_YESNO + MB_ICONQUESTION) of
IDYES:
begin
r := verificaRadioLocado(edtRadio.Text);
x := VerificaMotoRadio(edtMatricula.Text);
try
t := DM.SQLConnection.DBXConnection.BeginTransaction(TDBXIsolations.ReadCommitted);
Atualiza_limite;
locacaoRadio;
Lanca_Movimento;
Lancamento_caixa;
// Imprimirecibo ;
DM.SQLConnection.DBXConnection.CommitFreeAndNil(t);
Imprimirecibo;
ShowMessage(IntToStr(aIdlocacao) + ' locacão realizada com sucesso !');
except
DM.SQLConnection.DBXConnection.RollbackFreeAndNil(t);
ShowMessage('Houve um erro na transação');
end;
getLimpaLocacao;
end;
IDNO:
begin
getLimpaLocacao;
end;
end;
end;
Carlos Faria
Curtir tópico
+ 0Posts
21/10/2010
Carlos Faria
se houver necessidade eu gravo um video demo ok .
ao depurar o erro e na seguinte linha .
Gostei + 0
21/10/2010
Wesley Yamazack
Olha assim a olho nú, se você tirar o :
DM.SQLConnection.DBXConnection.CommitFreeAndNil(t);
E mandar apenas dar o Commit, funciona ?
Tem como gravar uma vídeo mostrando ? Qual BD você esta usando ? FB ?
Tem como mandar o projeto e também o BD, dai fica mais fácil de ajudar, só me diz qual é o Form e o método, fica mais fácil de achar.
Um abraço
Wesley Y
Gostei + 0
22/10/2010
Carlos Faria
[#VIDEO-194#]
Gostei + 0
22/10/2010
Carlos Faria
Gostei + 0
25/10/2010
Wesley Yamazack
Vamos lá
try Except, você usa para proteger o código. caso de algum erro dentro do try except, as linhas imediatamente abaixo de onde deu o erro, não são executas, ele pula para a parte Except do código, e executa o que esta dentro dela.
O Fato de você ter tirado, lanca_pgto_free_lancer e imprimirecibo e colocar o mesmo abaixo do DM.Conexao.DBXConnection.CommiteFreeAndNil(T); não gerou o erro.
Vejo que você tem umasl linhas comentadas
1//lancamento_caixa;
2//Imprimirrecibo;
3//Imprimirrecibo;
4//Imprimirrecibo;
5DM.Conexao.DBXConnection.CommiteFreeAndNil(T);
6lanca_pgto_free_lancer;
7Imprimirrecibo;
Será que você não esta tirando o comentário da linha 1, achando que é a mesma procedure ? Isso acontece ainda mais trabalhando com muitas procedures.
Você não me mostrou o erro na vídeo. Mostra ele por favor.
Obrigado.
Wesley Y
Gostei + 0
25/10/2010
Carlos Faria
('Deseja concluir a locação para esse motoqueiro ?', 'Locação ', MB_YESNO + MB_ICONQUESTION) of
IDYES:
begin
r := verificaRadioLocado(edtRadio.Text);
x := VerificaMotoRadio(edtMatricula.Text);
try
t := DM.SQLConnection.DBXConnection.BeginTransaction (TDBXIsolations.ReadCommitted);
Lancamento_caixa;
Atualiza_limite;
locacaoRadio; Lanca_Movimento; // Lancamento_caixa;
// Imprimirecibo ;
DM.SQLConnection.DBXConnection.CommitFreeAndNil(t); lanca_pgto_free_lancer; // gambiarra nao pode ficar aqui precisa ficar no bloco begintransaction
Imprimirecibo; // gambiarra nao pode ficar aqui precisa ficar no bloco begintransaction ShowMessage(IntToStr(aIdlocacao)
+ ' locacão realizada com sucesso !'); except
DM.SQLConnection.DBXConnection.RollbackFreeAndNil(t);
ShowMessage('Houve um erro na transação');
end;
getLimpaLocacao;
end;
IDNO:
begin
getLimpaLocacao;
end;
end;
Gostei + 0
25/10/2010
Wesley Yamazack
Entendi o que você disse, porém eu não vi na vídeo o erro.
Eu hoje pensando neste teu problema, escrevi um artigo sobre transação. Por que você não usa da maneira que mostro neste artigo (https://www.devmedia.com.br/post-18316-TransactionDesc--Delphi.html) ???
Qual seria a diferença ?
Um abraço
Wesley Y
Gostei + 0
26/10/2010
Carlos Faria
Segue abaixo uma nova video , se voce observar eu faço do mesmo jeito como voce faz no artigo.Nao ha diferenças
http://www.4shared.com/get/Yb2zCgnH/erro_na_transacao2.html
Gostei + 0
26/10/2010
Carlos Faria
Gostei + 0
27/10/2010
Wesley Yamazack
Você poderia salvar a vídeo em .AVI, pois em SWF, eu não consegui abrir, ele carrega até 5 segundos somente, e não mostra o restante.
Qual SQLServer você usa ? Estou com o 2008 instalado e o Firebird também, não quer me enviar junto com a vídeo teu projeto ? Pelo menos a tela que esta dando o erro, para poder testar.
Obrigado.
Um abraço
Wesley Y
Gostei + 0
27/10/2010
Carlos Faria
segue os fontes abaixo , so toma cuidade com esse banco pois tem mais de 500 cadastros de motoqueiros com rg e cpf
se possivel joga esse banco fora depois ok , ou apaga essa tabela tb_Motoqueiros eu nao quiz apagar nada para voce executar o projeto ai certinho pois existem rotinas de verificação de cpf e cnh ia dar pau se eu removesse esse tabela sem falar dos relacionamentos.
projeto em delphi 2010 com update 5
http://video.devmedia.com.br/discovirtual/187481/PontualMotoTaxiLtda.rar
sqlserver 2008 express edition free
http://www.4shared.com/get/VryJTEEL/DISP_BACKUP.html
Gostei + 0
27/10/2010
Carlos Faria
a transação esta dentro de um botao locar (finalizalocacao)
ok
att
Gostei + 0
28/10/2010
Wesley Yamazack
Seu código fonte não veio, esta com 0 Kb, será que você pode subir para a pasta do seus disco virtual por favor ?
Obrigado.
Att,
Wesley Y
Gostei + 0
29/10/2010
Carlos Faria
Gostei + 0
29/10/2010
Devmedia
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)