Erro na Transação com delphi
Ola Wesley
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;
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
Curtidas 0
Respostas
Carlos Faria
21/10/2010
so para retificar o erro ocorre quando o motoqueiro paga adiantado , se ele nao pagar nada a transação se realiza sem problemas.
se houver necessidade eu gravo um video demo ok .
ao depurar o erro e na seguinte linha .
se houver necessidade eu gravo um video demo ok .
ao depurar o erro e na seguinte linha .
GOSTEI 0
Wesley Yamazack
21/10/2010
Olá Carlos,
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
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
Carlos Faria
21/10/2010
Wesley assiste esse video , acho que ai ficou bem claro o erro .Nao tem nada a ver com o que voce disse.
att
[#VIDEO-194#]
[#VIDEO-194#]
GOSTEI 0
Carlos Faria
21/10/2010
Wesley faz o seguinte pegue o video aqui :
http://www.4shared.com/get/Ayhq_E9P/erro_na_transacao.html
eu tentei varias vezes no site de devmedia e hoje nao deu certo
aguardo sua reposta o mais rapido possivel ok
att
GOSTEI 0
Wesley Yamazack
21/10/2010
Olá Carlos,
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
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
Carlos Faria
21/10/2010
Wesley tem nada a ver veja no codigo abaixo que as procedures comentadas sao as mesmas que estao sendo executadas em cima , eu apenas mudei a ordem de qual procedure executar primeiro dentro da transação.
as procedures comentadas podem ate ser apagadas que nao mudaram em nada a ordem .
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);
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;
('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
Wesley Yamazack
21/10/2010
Carlos,
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
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
Carlos Faria
21/10/2010
Wesley
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
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
Carlos Faria
21/10/2010
So uma dica eu ja tive um problemas com essas transaçãoes uma vez foi dificil resolver , se nao me engano foi o guinter pauli que solucionou a coisa. as procedures estao todas corretas. o erro e aquele que mostra na video mesmo !
GOSTEI 0
Wesley Yamazack
21/10/2010
Olá Carlos,
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
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
Carlos Faria
21/10/2010
Ola Wesley
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
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
Carlos Faria
21/10/2010
outra observação la no projeto procure o form frmradiolocar
a transação esta dentro de um botao locar (finalizalocacao)
ok
att
a transação esta dentro de um botao locar (finalizalocacao)
ok
att
GOSTEI 0
Wesley Yamazack
21/10/2010
Olá Carlos
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
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
Carlos Faria
21/10/2010
vou enviar via 4shared ai no server devmedia nao da mais
GOSTEI 0
Devmedia
21/10/2010
Carlos,o problema foi resolvido. Por favor, coloque os arquivos no disco virtual.
GOSTEI 0
Carlos Faria
21/10/2010
Ola Wesley
Nada feito amigo , no servidor da dev eu tentei enviar esse arquivo mais de 10x ja . vai via 4shares mesmo
http://www.4shared.com/file/VryJTEEL/DISP_BACKUP.html
so toma cuidado com o que eu te falei , joga aquela tb_Motoqueiros fora deposi ok
GOSTEI 0