Tema: Transacion
Ver Mensaje Individual
  #1  
Antiguo 20-05-2008
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Reputación: 21
Paulao Va por buen camino
Transacion

Tengo un problema con una transacion. Yo tengo una funcion que abre mi transacion, otra comita y otra dar un Rollback. En todos los forma esta funcionando, pero yo tengo un otro forma que cerra mi caja. En este form yo hizo, asi:
if IniciaTransacao then
try
.. Pongo todos mis codigos aca.
Solo que hay una cosa. Dentro del Try, yo tengo procedures llamadas para hacer 2 INSERTS y abajo, despues destas procedures, yo tengo un UPDATE. Mira, mi UPDATE esta despues destas procedures, no se me lo entiende. Que hizo yo, puzo un error en neste UPDATE para hacer un teste para ver se ha grabado o no. Como estas en una transacion, no deberia grabar las mis procedures, pero estas grabando si. Yo saquei todos los ApplyUpdates en el AfterPost de mis CDS, pero aun estas grabando. Que puede ser esto? Abajo está mi Unit, se sirve para usteds hacer una verificacio mejor. En rojo estan las lineas donde queda el error con sua comentarios.

Código Delphi [-]
procedure TFrmEncerramento.Encerrar;
var
  F: TextFile;
  FrmRatVda: TFrmRatVda;
  sMensagem: String;

  nDia_Abertura: Integer;
  sDT_Abertura: String;
begin
  Btn_Encerrar.Enabled := False;
  pbFechAll.Visible := True;

  sNumLoj := FmtCamReg(FloatToStr(gLoja), 4, TIPO_NUM);

  if not MapaCaxConsulta('', true) then
    Exit;

  if IniciaTransacao(DM_Principal.SoConn_GER) then
    Try
      //..>=======================================================================
      Mapa_Caixa_Rel('');
      Mapa_Caixa_Rel('');
      //..>=======================================================================
      RelDesp(DateToStr(gdat));
      //..>=======================================================================
      //..> Efetuando o Rateio das Vendas.
      if ExisteFunRateio then begin
        mbRateou := False;
        Try
          FrmRatVda := TFrmRatVda.Create(Self);
          FrmRatVda.ShowModal;
        Finally
          FreeAndNil(FrmRatVda);
        End;

      if not mbRateou then begin
        Warning('Sr. Operador. Rateio obrigatório.' + #13 + #13 +
                'Favor selecionar funcionários da lista.');
        BTN_Fechar.Enabled := True;
        Btn_Encerrar.Enabled := True;
        exit;
      end
      else
        MM_Fechamento.Lines.add('Rateio Atualizado.');
      end
      else begin
        MM_Fechamento.Lines.add('Não existem vendas a serem rateadas.');
        { $I- }
        AssignFile(F, gPATH_ENV +
                     FormatDateTime('YYYYMMDD', mDt_Abertura) +
                     FormatFloat('000', gLoja) +
                     FormatFloat('00', gcd_caixa) +
                     FILE_RAT +
                     '.SEQ');
        if IOResult <> 0 then
        begin
          sMensagem := gPATH_ENV +
                      FormatDateTime('YYYYMMDD', mDt_Abertura) +
                      FormatFloat('000', gLoja) +
                      FormatFloat('00', gcd_caixa) +
                      FILE_RAT + '.SEQ';
          raise Exception.Create(sMensagem);
        end;
        { $I+ }
        Rewrite(F);
        CloseFile(F);
      end;//Fim do mbrateou
      CB_Rateio.Checked := True;
      //..>=======================================================================


      //..>=======================================================================
      //..> Atualiza Resumo das Vendas.
      AtualizaFunv;//Procedure que inert algo
      MM_Fechamento.Lines.add('Resumo das vendas realizado.');
      CB_ResumoVendas.Checked := True;
      //..>=======================================================================

      //..>=======================================================================
      //..> Atualiza Resumo das Peças.
      AtualizaSecv;//Lo mismo arriba      MM_Fechamento.Lines.add('Resumo das peças realizado.');
      CB_ResumoPecas.Checked := True;
      //..>=======================================================================

      msMensDif := '';

      //..> Zerando variaveis de registros Lidos.
      mnRegLidRes := 0;
      mnRegLidChq := 0;
      mnRegLidTro := 0;
      mnRegLidCli := 0;
      mnRegLidDsp := 0;
      mnRegLidVen := 0;
      mnRegLidFis := 0;
      mnRegLidLiv := 0;
      mnRegLidLog := 0;

      //..> Obtendo contadores dos registros.
      mnRegCntRes := ObtemRegArqRes;
      mnRegCntChq := ObtemRegArqChq;
      mnRegCntTro := ObtemRegArqTro;
      mnRegCntCli := ObtemRegArqCli;
      mnRegCntDsp := ObtemRegArqDsp;
      mnRegCntVen := ObtemRegArqVen;
      mnRegCntFis := ObtemRegArqFis;
      mnRegCntLiv := ObtemRegArqLiv;
      mnRegCntLog := ObtemRegArqLog;

      //..>=======================================================================
      //..> Gerando arquivo de Flash.
      { $I- }
      AssignFile(F, gPATH_ENV +
                    'FLASH' +
                    FormatFloat('0000', gLoja) +
                    '.NET');
      if IOResult <> 0 then begin
        sMensagem := gPATH_ENV +
                     'FLASH' +
                     FormatFloat('0000', gLoja) +
                     '.NET';
        raise Exception.Create(sMensagem);
      end;
      { $I+ }
      Rewrite(F);
      GeraArqFla(F);
      CloseFile(F);
      //..>=======================================================================


      //..>=======================================================================
      //..> Gerando arquivo de Resumo de Cartões.
      { $I- }
      AssignFile(F, gPATH_ENV +
                    FormatDateTime('YYYYMMDD', mDt_Abertura) +
                    FormatFloat('000', gLoja) +
                    FormatFloat('00', gcd_caixa) +
                    FILE_RES +
                    '.SEQ');
      if IOResult <> 0 then
      begin
        sMensagem := gPATH_ENV +
                     FormatDateTime('YYYYMMDD', mDt_Abertura) +
                     FormatFloat('000', gLoja) +
                     FormatFloat('00', gcd_caixa) +
                     FILE_RES + '.SEQ';
        raise Exception.Create(sMensagem);
      end;
      { $I+ }
      Rewrite(F);
      GeraArqRes(F);
      CloseFile(F);
      if CompVal(mnRegCntRes, mnRegLidRes, cmpDiferente) then
        msMensDif := msMensDif + #13 + 'RES - CNT: ' + FormatFloat('000000', mnRegCntRes) + '  LID: ' + FormatFloat('000000', mnRegLidRes);
      //..>=======================================================================


      //..>=======================================================================
      //..> Gerando arquivo de Cheques-Pre.
      { $I- }
      AssignFile(F, gPATH_ENV +
                    FormatDateTime('YYYYMMDD', mDt_Abertura) +
                    FormatFloat('000', gLoja) +
                    FormatFloat('00', gcd_caixa) +
                    FILE_CHQ +
                    '.SEQ');
      if IOResult <> 0 then
      begin
        sMensagem := gPATH_ENV +
                     FormatDateTime('YYYYMMDD', mDt_Abertura) +
                     FormatFloat('000', gLoja) +
                     FormatFloat('00', gcd_caixa) +
                     FILE_CHQ + '.SEQ';
        raise Exception.Create(sMensagem);
      end;
      { $I+ }
      Rewrite(F);
      GeraArqChq(F);
      CloseFile(F);
      if CompVal(mnRegCntChq, mnRegLidChq, cmpDiferente) then
        msMensDif := msMensDif + #13 + 'CHQ - CNT: ' + FormatFloat('000000', mnRegCntChq) + '  LID: ' + FormatFloat('000000', mnRegLidChq);
      //..>=======================================================================


      //..>=======================================================================
      //..> Gerando arquivo de Trocas.
      { $I- }
      AssignFile(F, gPATH_ENV +
                    FormatDateTime('YYYYMMDD', mDt_Abertura) +
                    FormatFloat('000', gLoja) +
                    FormatFloat('00', gcd_caixa) +
                    FILE_TRO +
                    '.SEQ');
      if IOResult <> 0 then
      begin
        sMensagem := gPATH_ENV +
                     FormatDateTime('YYYYMMDD', mDt_Abertura) +
                     FormatFloat('000', gLoja) +
                     FormatFloat('00', gcd_caixa) +
                     FILE_TRO + '.SEQ';
        raise Exception.Create(sMensagem);
      end;
      { $I+ }
      Rewrite(F);
      GeraArqTro(F);
      CloseFile(F);
      if CompVal(mnRegCntTro, mnRegLidTro, cmpDiferente) then
        msMensDif := msMensDif + #13 + 'TRO - CNT: ' + FormatFloat('000000', mnRegCntTro) + '  LID: ' + FormatFloat('000000', mnRegLidTro);
      //..>=======================================================================


      //..>=======================================================================
      //..> Gerando arquivo de Clientes.
      { $I- }
      AssignFile(F, gPATH_ENV +
                    FormatDateTime('YYYYMMDD', mDt_Abertura) +
                    FormatFloat('000', gLoja) +
                    FormatFloat('00', gcd_caixa) +
                    FILE_CLI +
                    '.SEQ');
      if IOResult <> 0 then
      begin
        sMensagem := gPATH_ENV +
                     FormatDateTime('YYYYMMDD', mDt_Abertura) +
                     FormatFloat('000', gLoja) +
                     FormatFloat('00', gcd_caixa) +
                     FILE_CLI + '.SEQ';
        raise Exception.Create(sMensagem);
      end;
      { $I+ }
      Rewrite(F);
      GeraArqCli(F);
      CloseFile(F);
      if CompVal(mnRegCntCli, mnRegLidCli, cmpDiferente) then
        msMensDif := msMensDif + #13 + 'CLI - CNT: ' + FormatFloat('000000', mnRegCntCli) + '  LID: ' + FormatFloat('000000', mnRegLidCli);
      //..>=======================================================================


      //..>=======================================================================
      //..> Gerando arquivo de Despesas.
      { $I- }
      AssignFile(F, gPATH_ENV +
                    FormatDateTime('YYYYMMDD', mDt_Abertura) +
                    FormatFloat('000', gLoja) +
                    FormatFloat('00', gcd_caixa) +
                    FILE_DSP +
                    '.SEQ');
      if IOResult <> 0 then
      begin
        sMensagem := gPATH_ENV +
                     FormatDateTime('YYYYMMDD', mDt_Abertura) +
                     FormatFloat('000', gLoja) +
                     FormatFloat('00', gcd_caixa) +
                     FILE_DSP + '.SEQ';
        raise Exception.Create(sMensagem);
      end;
      { $I+ }
      Rewrite(F);
      GeraArqDsp(F);
      CloseFile(F);
      if CompVal(mnRegCntDsp, mnRegLidDsp, cmpDiferente) then
        msMensDif := msMensDif + #13 + 'DSP - CNT: ' + FormatFloat('000000', mnRegCntDsp) + '  LID: ' + FormatFloat('000000', mnRegLidDsp);
      //..>=======================================================================


      //..>=======================================================================
      //..> Gerando arquivo de Vendas.
      { $I- }
      AssignFile(F, gPATH_ENV +
                    FormatDateTime('YYYYMMDD', mDt_Abertura) +
                    FormatFloat('000', gLoja) +
                    FormatFloat('00', gcd_caixa) +
                    FILE_VEN +
                    '.SEQ');
      if IOResult <> 0 then
      begin
        sMensagem := gPATH_ENV +
                     FormatDateTime('YYYYMMDD', mDt_Abertura) +
                     FormatFloat('000', gLoja) +
                     FormatFloat('00', gcd_caixa) +
                     FILE_VEN + '.SEQ';
        raise Exception.Create(sMensagem);
      end;
      { $I+ }
      Rewrite(F);
      GeraArqVenCapea(F);
      CloseFile(F);
      if CompVal(mnRegCntVen, mnRegLidVen, cmpDiferente) then
        msMensDif := msMensDif + #13 + 'VEN - CNT: ' + FormatFloat('000000', mnRegCntVen) + '  LID: ' + FormatFloat('000000', mnRegLidVen);
      //..>=======================================================================


      //..>=======================================================================
      //..> Gerando arquivo Fiscal.
      { $I- }
      AssignFile(F, gPATH_ENV +
                    FormatDateTime('YYYYMMDD', mDt_Abertura) +
                    FormatFloat('000', gLoja) +
                    FormatFloat('00', gcd_caixa) +
                    FILE_FIS +
                    '.SEQ');
      if IOResult <> 0 then
      begin
        sMensagem := gPATH_ENV +
                     FormatDateTime('YYYYMMDD', mDt_Abertura) +
                     FormatFloat('000', gLoja) +
                     FormatFloat('00', gcd_caixa) +
                     FILE_FIS + '.SEQ';
        raise Exception.Create(sMensagem);
      end;
      { $I+ }
      Rewrite(F);
      GeraArqFisCapea(F);
      CloseFile(F);
      if CompVal(mnRegCntFis, mnRegLidFis, cmpDiferente) then
        msMensDif := msMensDif + #13 + 'FIS - CNT: ' + FormatFloat('000000', mnRegCntFis) + '  LID: ' + FormatFloat('000000', mnRegLidFis);
      //..>=======================================================================


      //..>=======================================================================
      //..> Gerando arquivo Livros Fiscais.
      { $I- }
      AssignFile(F, gPATH_ENV +
                    FormatDateTime('YYYYMMDD', mDt_Abertura) +
                    FormatFloat('000', gLoja) +
                    FormatFloat('00', gcd_caixa) +
                    FILE_LIV +
                    '.SEQ');
      if IOResult <> 0 then
      begin
        sMensagem := gPATH_ENV +
                     FormatDateTime('YYYYMMDD', mDt_Abertura) +
                     FormatFloat('000', gLoja) +
                     FormatFloat('00', gcd_caixa) +
                     FILE_LIV + '.SEQ';
        raise Exception.Create(sMensagem);
      end;
      { $I+ }
      Rewrite(F);
      GeraArqLivCapea(F);
      CloseFile(F);
      if CompVal(mnRegCntLiv, mnRegLidLiv, cmpDiferente) then
        msMensDif := msMensDif + #13 + 'LIV - CNT: ' + FormatFloat('000000', mnRegCntLiv) + '  LID: ' + FormatFloat('000000', mnRegLidLiv);
      //..>=======================================================================


      //..>=======================================================================
      //..> Gerando arquivo de Log
      { $I- }
      AssignFile(F, gPATH_ENV +
                    FormatDateTime('YYYYMMDD', mDt_Abertura) +
                    FormatFloat('000', gLoja) +
                    FormatFloat('00', gcd_caixa) +
                    FILE_LOG +
                    '.SEQ');
      if IOResult <> 0 then
      begin
        sMensagem := gPATH_ENV +
                     FormatDateTime('YYYYMMDD', mDt_Abertura) +
                     FormatFloat('000', gLoja) +
                     FormatFloat('00', gcd_caixa) +
                     FILE_LOG + '.SEQ';
        raise Exception.Create(sMensagem);
      end;
      { $I+ }
      Rewrite(F);
      GeraArqLog(F);
      CloseFile(F);
      if CompVal(mnRegCntLog, mnRegLidLog, cmpDiferente) then
        msMensDif := msMensDif + #13 + 'LOG - CNT: ' + FormatFloat('000000', mnRegCntLog) + '  LID: ' + FormatFloat('000000', mnRegLidLog);
      //..>=======================================================================


      //..>=======================================================================
      CB_Geracao.Checked := True;
      //..>=======================================================================

      //..>=======================================================================
      //..> Atualiza variaveis com Parâmetros da Loja.
      Dm_Principal.SacParametro;
      //..>=======================================================================


      //..>=======================================================================
      //Copia o banco para o dir de backup
      CopyFile(pChar(gPATH_BANCO + 'SAC_DB.FDB'),pChar(gPATH_BACKUP+ 'SAC_DB.FDB'), False);
      //..>=======================================================================


      //..>=======================================================================
      //Inicializa Tabela
      //..>=======================================================================
      InicializaTabelas;
      CB_Inicializacao.Checked := True;
      //..>=======================================================================


      //..>=======================================================================
      //..> Atualiza Flags de Encerramento Paulo..>
      CDSINS.Close;
      CDSINS.CommandText  := ' UPDATE TB_SAC_PARAM_CAIXA SET' +
                             ' FL_CX_ABERTO = ' + QuotedStr('N') +
                             ' ,DT_ENCERRAMENTO = ' + QuotedStr(FormatDateTime('dd-mmm-yyyy', gDat)) +
                             ' ,HR_ENCERRAMENTO = ' + QuotedStr(FormatDateTime('HH:NN:SS',Time));
      CDSINS.Execute;//Aca pongo el error
      CDSINS.Close;
      //..>=======================================================================


      //..>=======================================================================
      gsDT_Encerramento := FormatDateTime('dd/mm/yyyy', gDat);
      //..>=======================================================================


      //..>=======================================================================
      //..> Mensagem de diferença de contadores.
      if Trim(msMensDif) <> '' then
        Warning('- Sr.Operador, favor anotar a mensagem abaixo e avisar o CPD. Obrigado' + #13 + #13 +
                ' _ Módulo: Sac_Gerencial' + #13 +
                ' _ Programa: Encerramento [Verificação de Contadores com diferença]' + #13 +
                ' _ MENSAGEM:' + #13 + #13 + msMensDif);

      Warning('Fechamento ConcluÍdo.');
      MM_Fechamento.Lines.add('Fechamento concluido.');

      BTN_Fechar.Enabled := True;
      BTN_Fechar.SetFocus;

      CommitTransacao(DM_Principal.SoConn_GER);

    Except
      on E: Exception do
      begin
        RollbackTransacao(DM_Principal.SoConn_GER);

        Warning('.:: ERRO ::. Senhor Operador, por favor, comunique o erro ao CPD.' + #13 + #13 +
                ' _ Módulo: Sac_Gerencial' + #13 +
                ' _ Programa: Encerramento [Geração de Arquivos]' + #13 + #13 +
                ' .:: MENSAGEM  ::.' + #13 + E.Message);
      end;
    End;
end;
Responder Con Cita