[firebase-br] situação estranha com firebird

Marcio Alves de Almeida net.marcio em gmail.com
Qua Maio 26 14:36:43 -03 2010


Da uma Olhada ai para vc tirar uma idéia

procedure TFrmFecha_Caixa.BtnConfirClick(Sender: TObject);
Var
Txt1: String;
begin
     Q_AchaVenda.Close;                                      //
"Cod_Venda"  //Ven_NumNota  Cod_Venda
     Q_AchaVenda.Sql.Clear;                                   //Ven_NumNota
     Q_AchaVenda.SQL.Add('SELECT * FROM "Venda" WHERE
"Venda"."Cod_Venda" = '''+UpperCase(EditBusca.Text)+'''  ');
     Q_AchaVenda.Open;


     If Q_AchaVendaVen_Status.Value = 'F' Then
     Begin
      ShowMessage('Esta nota foi fechada por outro caixa...Verifique!!!');
     // LimpaCampos;
      Q_AchaVenda.Close;
      exit;
     end;





    Try
         Modulo.ibDatabase.StartTransaction;
         Modulo.Q_Venda.Edit;
         Modulo.Q_VendaVen_Status.Value            := 'F';
         Modulo.Q_VendaVen_Caixa.Value             := Modulo.MemoriaNome.Value;
         Modulo.Q_VendaCod_Caixa_Funcionario.Value :=
Modulo.MemoriaCodigo.Value;
         Modulo.Q_VendaVen_Codigo_AbreCaixa.Value  := ACodigo_Caixa;
//aki eh o codigo do caixa que esta aberto

         Modulo.Q_Venda.Post;

      //   BaixaItens;   // Aki mexe na tabela itensVenda alterando
status e descontando quantidade de reserva Quantidade2

         Modulo.Q_Fecha_Nota.Close;
         Modulo.Q_Fecha_Nota.Sql.Clear;
         Modulo.Q_Fecha_Nota.SQL.Add('SELECT * FROM "Fecha_Nota" where
"Fecha_Nota"."Cod_Fecha_Nota" Is Null ');
         Modulo.Q_Fecha_Nota.Open;


         Modulo.Q_Fecha_Nota.Append;
         Modulo.Q_Fecha_NotaData.Value            :=
Modulo.MemoriaDataServer.Value;;
         Modulo.Q_Fecha_NotaHora.Value            := Now;
         Modulo.Q_Fecha_NotaCod_Venda.Value       :=
Modulo.Q_VendaCod_Venda.Value;
         Modulo.Q_Fecha_NotaVen_NumNota.Value     :=
Modulo.Q_VendaVen_NumNota.Value;
         Modulo.Q_Fecha_NotaV_Total_Real.Value    :=
Modulo.Q_VendaVen_VlrTotal.Value;
         Modulo.Q_Fecha_NotaV_Total_Guarani.Value :=
Modulo.Q_VendaVen_VlrTot_Guarani.Value;
         Modulo.Q_Fecha_NotaV_Total_Peso.Value    :=
Modulo.Q_VendaVen_VlrTot_Peso.Value;
         Modulo.Q_Fecha_NotaV_Total_Dolar.Value   :=
Modulo.Q_VendaVen_VlrTot_Dolar.Value;
         Modulo.Q_Fecha_NotaPromissoria.Value     := 'N'; //digo se eh
promissoria o a vista
         Modulo.Q_Fecha_NotaTipo.Value            := 'V'; // akii eh
troco V = Venda
         Modulo.Q_Fecha_NotaCod_Funcionario.Value := Modulo.MemoriaCodigo.Value;
         Modulo.Q_Fecha_NotaNomeCaixa.Value       := Modulo.MemoriaNome.Value;

         //****************ver isso depois**************20/10/2009
          //***Real
         If EditReal.Value > 0 Then
         Begin
         Modulo.Q_Fecha_NotaV_Total_Real_Recebido.Value    :=
RecebidoReal.Value;
         end;
          //***Guarani
         If EditGuarani.Value > 0 Then
         Begin
         Modulo.Q_Fecha_NotaV_Total_Guarani_Recebido.Value :=
RecebidoGuarani.Value;
         end;
         //** Dolar
         If EditDolar.Value > 0 Then
         Begin
         Modulo.Q_Fecha_NotaV_Total_Dolar_Recebido.Value   :=
RecebidoDolar.Value;
         end;
         //** Peso
         If EditPeso.Value > 0 Then
         Begin
         Modulo.Q_Fecha_NotaV_Total_Peso_Recebido.Value    :=
RecebidoPeso.Value;
         end;

         Modulo.Q_Fecha_NotaCod_Abertura_Caixa.Value       := ACodigo_Caixa;

         Modulo.Q_Fecha_Nota.Post;


         BaixaItens;   // Aki mexe na tabela itensVenda alterando
status e descontando quantidade de reserva Quantidade2

         TeProgressBar1.Visible := False;
         Modulo.ibDatabase.Commit;
         LimpaCampos;
         Modulo.Q_MovSaida.Close;
     except
       If Modulo.Q_Fecha_Nota.State in [dsEdit,dsInsert] Then
       Begin
        Modulo.Q_Fecha_Nota.Cancel;
       end;
       Modulo.ibDatabase.Rollback;
       Txt1 := 'Nao foi possivel concluir este recebimento tente novamente';
       //ShowMessage('Nao foi possivel concluir o recebimento tente novamente');
       MessageBox(Application.Handle, PChar(Txt1), 'Atencao Caixa',
MB_ICONINFORMATION + MB_OK);
       Modulo.Q_MovSaida.Close;
       TeProgressBar1.Visible := False;
       LimpaCampos;
     end;
end;



procedure TFrmFecha_Caixa.BaixaItens;
Var
Conta,Quantid : Integer;
Begin
  Q_ItemVenda.Close;
  Q_ItemVenda.Sql.Clear;
  Q_ItemVenda.SQL.Add('SELECT * FROM "ItemVenda" where
"ItemVenda"."Cod_Venda" = '+IntToStr(Modulo.Q_VendaCod_Venda.Value)+'
');
  Q_ItemVenda.Open;
  If Q_ItemVenda.RecordCount > 0 Then
  Begin

      Modulo.Q_MovSaida.Close;
      Modulo.Q_MovSaida.Sql.Clear;
      Modulo.Q_MovSaida.SQL.Add('SELECT * FROM "MovSaida" where
"MovSaida"."Cod_MovSaida" is null ');
      Modulo.Q_MovSaida.Open;

      Conta    := 0;
      Quantid  := 0;
      Quantid  := Q_ItemVenda.RecordCount;
      Q_ItemVenda.First;

      TeProgressBar1.Visible := True;
      TeProgressBar1.Min := 0;
      TeProgressBar1.Max := Quantid;
      TeProgressBar1.Position := 0;

      While  Conta <> Quantid do
      Begin

         Q_ItemVenda.Edit;
         Q_ItemVendaItem_FatData.Value := Modulo.MemoriaDataServer.Value;
         Q_ItemVendaItem_Status.Value  := 'F';   //fechada
         Q_ItemVenda.Post;

         Q_Produto.Close;
         Q_Produto.Sql.Clear;
         Q_Produto.SQL.Add('SELECT * FROM "Produto" where
"Produto"."Cod_Produto" = '+IntToStr(Q_ItemVendaCod_Produto.Value)+'
');
         Q_Produto.Open;



        If Q_Produto.RecordCount > 0 Then
        Begin
         Modulo.Q_MovSaida.Append;
         Modulo.Q_MovSaidaCod_Venda.Value        :=
Modulo.Q_VendaCod_Venda.Value;
         //*******************************************
         Modulo.Q_MovSaidaVen_NumNota.Value      :=
Modulo.Q_VendaVen_NumNota.Value;
         Modulo.Q_MovSaidaCod_Marca.Value        := Q_ItemVendaCod_Marca.Value;
         //*******************************************
         Modulo.Q_MovSaidaCod_ItemVenda.Value    :=
Q_ItemVendaCod_ItemVenda.Value;
         Modulo.Q_MovSaidaCod_Produto.Value      :=
Q_ItemVendaCod_Produto.Value;
         Modulo.Q_MovSaidaCod_Grupo.Value        :=
Q_ItemVendaItem_Cod_Grupo.Value;
         Modulo.Q_MovSaidaCod_vendedor.Value     :=
Modulo.Q_VendaCod_Funcionario.Value;
         Modulo.Q_MovSaidaCod_Caixa.Value        :=
Modulo.Q_VendaCod_Caixa_Funcionario.Value;
         Modulo.Q_MovSaidaNumeroNota.Value       :=
Modulo.Q_VendaVen_NumNota.Value;
         Modulo.Q_MovSaidaSaida_Estorno.Value    := 'Venda';
         Modulo.Q_MovSaidaData.Value             :=
Modulo.MemoriaDataServer.Value;
         Modulo.Q_MovSaidaPrecoUnit.Value        :=
Q_ItemVendaItem_VlrVenda.Value;
         Modulo.Q_MovSaidaQuantidade.Value       :=
Q_ItemVendaItem_QtddVenda.Value;
         Modulo.Q_MovSaidaHora.Value             := Now;
         Modulo.Q_MovSaidaValorTotal.Value       := Q_ItemVendaItem_Total.Value;
         Modulo.Q_MovSaidaCod_Fecha_Nota.Value   :=
Modulo.Q_Fecha_NotaCod_Fecha_Nota.Value;
         Modulo.Q_MovSaidaEstoqueAnterior.Value  :=
Q_ProdutoPro_Quantidade.Value;
         Modulo.Q_MovSaidaEstoqueAtual.Value     :=
Q_ProdutoPro_Quantidade.Value - Q_ItemVendaItem_QtddVenda.Value;
         Modulo.Q_MovSaida.Post;

         Q_Produto.Edit;
         Q_ProdutoPro_Quantidade.Value          :=
Q_ProdutoPro_Quantidade.Value - Q_ItemVendaItem_QtddVenda.Value;
         Q_ProdutoPro_DtUltimaVenda.Value       :=
Modulo.MemoriaDataServer.Value;
         Q_Produto.Post;
        end;
         Conta := Conta + 1;
         TeProgressBar1.Position := TeProgressBar1.Position + 1;
         Q_ItemVenda.Next;

      end;
  end;
end;


Em 26 de maio de 2010 14:20, Elton da Motta Barbosa
<embarbosa em gmail.com> escreveu:
>>pois é, 9 da manha e parou novamente :(
>>creio que não seja mais problema com o firebird, coloquei um trecho de um
>>módulo que faz muito comitrettaing, com commit, vou ver se ajuda , fiz um
>>gstat e o next transacion tá acima de 52 mil em poucos mais de 2 horas de
>>uso..é normal isso?
>>
>>fui
>
> Depende da quantidade de usuários que você tem e do movimento que está fazendo.
> Mas no seu caso, acredito que você tenha algum loop que esteja algo como
>
> while not Tabela.eof
> begin
>  Sql.clear;
>  Sql.add('INSERT ALGO'+ tabela.campo1.asstring+
> ','+tabela.campo2.asstring+'etc...' );
>  Sql.execute;
>  transactionInserir.commit;
> end;
>
> Se for esse o caso, talvez queira mover o commit para o final do
> processo. Tem como você mostrar o relatório do gstat quando o banco de
> dados parou?
> Outra pergunta, você está com o *forced write* desligado. Tem algum
> motivo você ter feito isso?
>
> desculpe se demorar a responder, mas é que estou bem apertado aqui.
> bom trabalho,
> Elton
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>




Mais detalhes sobre a lista de discussão lista