Erro na Transação com delphi

21/10/2010

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;

Carlos Faria

Carlos Faria

Curtidas 0

Respostas

Carlos Faria

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 .
GOSTEI 0
Wesley Yamazack

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
GOSTEI 0
Carlos Faria

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#]
GOSTEI 0
Carlos Faria

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

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
GOSTEI 0
Carlos Faria

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;
GOSTEI 0
Wesley Yamazack

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
GOSTEI 0
Carlos Faria

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
GOSTEI 0
Carlos Faria

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

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
GOSTEI 0
Carlos Faria

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

 
GOSTEI 0
Carlos Faria

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

GOSTEI 0
Wesley Yamazack

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
GOSTEI 0
Carlos Faria

Carlos Faria

21/10/2010

vou enviar via 4shared ai no server devmedia nao da mais
GOSTEI 0
Devmedia

Devmedia

21/10/2010

Carlos,o problema foi resolvido. Por favor, coloque os arquivos no disco virtual.
GOSTEI 0
Carlos Faria

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
POSTAR