Desculpe faltou o database.StartTransaction 
  if liQtdRegs >= 50 then
     begin
        Database.Commit;
        DataBase.StartTransaction;
        liQtdRegs := 0; 
     end;

Bit


--- Em [EMAIL PROTECTED], "sandrobit2000" 
<[EMAIL PROTECTED]> escreveu
> 
> Ola,
> 
> Vc pode fazer commit apos uma quantidade de inserts, se apos 100 
ele 
> nao esta suportando o cache, vc commita a cada 50, nao commit a 
cada 
> insert pois ficara lenta a rotina. Embora eu ache q esta operacao 
tem 
> q ser efetuada completamente, verifique algo do tipo tamanho de 
cache 
> ou coisa parecida!
> 
>                    // Inicia uma Transacao
>                    Database.StartTransaction;
>                    tbNotaItem.DisableControls;
>                    tbNotaItem.First;
>                    liQtdRegs := 0; 
>                    while not tbNotaItem.Eof do
>                    begin
>                            // Atualiza Estoque
>                            with tQry do
>                            begin
>                                    SQL.Clear;
>                                    SQL.Add('Update Produtos ');
>                                    SQL.Add('Set Estoque = Estoque 
> + :Qtde ');
>                                    SQL.Add('Where Codigo 
= :Codigo');
>                                    ParamByName('Qtde').AsFloat    :=
>    tbNotaItem.FieldByName('Qtde').AsInteger;
>                                    ParamByName('Codigo').AsString :=
>    tbNotaItem.FieldByName('Produto').AsString;
>                                    ExecSQL;
>                            end;
>                            inc(liQtdRegs);
>                            //verifica se ja pode commitar 
>                            if liQtdRegs >= 50 then
>                               begin
>                                   Database.Commit;
>                                   liQtdRegs := 0; 
>                               end;
>   
>                            tbNotaItem.Next;
>                    end;
> 
> 
> Espero ter ajudado
> 
> Bit
> 
> --- Em [EMAIL PROTECTED], "Sergio Toshio Kawahara" 
> <[EMAIL PROTECTED]> escreveu
> > Olá, Alexandre
> > 
> > Agradeço a sua atenção para o meu problema, fiz o teste mas deu o 
> mesmo erro, então resolvi o problema tirando a transação, acho que 
> vou mudar a forma de atualização ao inves de atualizar no final vou 
> atualizar item a item direto na inclusão, de qualquer forma valeu.
> > 
> > []'s
> >   ----- Original Message ----- 
> >   From: Alexandre Oliveira 
> >   To: [EMAIL PROTECTED] 
> >   Sent: Tuesday, October 26, 2004 7:25 AM
> >   Subject: Re: [delphi-br] Problemas na Atualização do Estoque
> > 
> > 
> >   Olá,
> > 
> >   Porque você não tenta assim:
> > 
> >   procedure TForm1.bConfirmarClick(Sender: TObject);
> >   var
> >           tQry : TQuery;
> >   begin
> >           try
> >              tQry := tQuery.Create(nil);  // Cria Query temporaria
> >              tQry.DatabaseName := 'dbTeste';    //Alias
> >              try
> >                   // Inicia uma Transacao
> >                   Database.StartTransaction;
> >                   tbNotaItem.DisableControls;
> >                   tbNotaItem.First;
> >                   while not tbNotaItem.Eof do
> >                   begin
> >                           // Atualiza Estoque
> >                           with tQry do
> >                           begin
> >                                   SQL.Clear;
> >                                   SQL.Add('Update Produtos ');
> >                                   SQL.Add('Set Estoque = Estoque 
> + :Qtde ');
> >                                   SQL.Add('Where Codigo 
= :Codigo');
> >                                   ParamByName
('Qtde').AsFloat    :=
> >   tbNotaItem.FieldByName('Qtde').AsInteger;
> >                                   ParamByName
('Codigo').AsString :=
> >   tbNotaItem.FieldByName('Produto').AsString;
> >                                   ExecSQL;
> >                           end;
> >                           tbNotaItem.Next;
> >                   end;
> >                   tbNotaItem.EnableControls;
> >                   Database.Commit;
> >              except
> >                   Database.Rollback;
> >                   raise;
> >              end;
> >           finally
> >              FreeAndNil(tQry);
> >           end;
> >   end;
> > 
> > 
> > 
> >   ----- Original Message -----
> >   From: "Sergio Toshio Kawahara" <[EMAIL PROTECTED]>
> >   To: <[EMAIL PROTECTED]>
> >   Sent: Monday, October 25, 2004 10:43 PM
> >   Subject: [delphi-br] Problemas na Atualização do Estoque
> > 
> > 
> > 
> >   DELPHI 6, PARADOX
> > 
> >   Pessoal estou com o seguinte problema na atualização do estoque 
> quando mando
> >   rodar a rotina abaixo com mais de 100 itens da a seguinte 
> mensagem:
> >   "Operation not Applicate too many open tables", alguem já 
passou 
> por isso?
> > 
> >   Rotina para atualizar o estoque:
> > 
> >   procedure TForm1.bConfirmarClick(Sender: TObject);
> >   var
> >           tQry : TQuery;
> >   begin
> >           // Inicia uma Transacao
> >           Database.StartTransaction;
> >           try
> >                   tQry := tQuery.Create(Application);  // Cria 
Query
> >   temporaria
> >                   tQry.DatabaseName := 'dbTeste';    //Alias
> > 
> >                   tbNotaItem.First;
> >                   while not tbNotaItem.Eof do
> >                   begin
> >                           // Atualiza Estoque
> >                           with tQry do
> >                           begin
> >                                   SQL.Clear;
> >                                   SQL.Add('Update Produtos ');
> >                                   SQL.Add('Set Estoque = Estoque 
> + :Qtde ');
> >                                   SQL.Add('Where Codigo 
= :Codigo');
> > 
> >                                   ParamByName
('Qtde').AsFloat    :=
> >   tbNotaItem.FieldByName('Qtde').AsInteger;
> >                                   ParamByName
('Codigo').AsString :=
> >   tbNotaItem.FieldByName('Produto').AsString;
> >                                   ExecSQL;
> >                                   Free;
> >                           end;
> >                           tbNotaItem.Next;
> >                   end;
> > 
> >                   tQry.Free;
> >                   Database.Commit;
> >           except
> >                   tQry.Free;
> >                   Database.Rollback;
> >                   raise;
> >           end;
> >   end;
> > 
> >   Agradeço qualquer ajuda.
> > 
> >   [As partes desta mensagem que não continham texto foram 
removidas]
> > 
> > 
> > 
> >   --
> >   <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>
> > 
> >   Para ver as mensagens antigas, acesse:
> >   http://br.groups.yahoo.com/group/delphi-br/messages
> > 
> >   Para falar com o moderador, envie um e-mail para:
> >   [EMAIL PROTECTED] ou [EMAIL PROTECTED]
> > 
> >   Links do Yahoo! Grupos
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> >   --
> >   Este e-mail está livre de vírus.
> >   Verificado por AVG Anti-Vírus (http://www.avgbrasil.com.br).
> >   Versão: 7.0.280 / Banco de dados de Vírus: 264.12.2 - Data de 
> Lançamento:
> >   22/10/2004
> > 
> > 
> > 
> > 
> >   -- 
> >   Mensagens enviadas estão livres de vírus.
> >   Verificado por AVG Anti-Vírus (http://www.avgbrasil.com.br).
> >   Versão: 7.0.280 / Banco de dados de Vírus: 264.12.2 - Data de 
> Lançamento: 22/10/2004
> > 
> > 
> > 
> >   -- 
> >   <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>
> > 
> >   Para ver as mensagens antigas, acesse:
> >   http://br.groups.yahoo.com/group/delphi-br/messages
> > 
> >   Para falar com o moderador, envie um e-mail para:
> >   [EMAIL PROTECTED] ou [EMAIL PROTECTED]
> > 
> > 
> > 
> >         Yahoo! Grupos, um serviço oferecido por: 
> >              
> >                     São Paulo Rio de Janeiro Curitiba Porto 
Alegre 
> Belo Horizonte Brasília  
> >              
> >        
> > 
> > 
> > ------------------------------------------------------------------
--
> ----------
> >   Links do Yahoo! Grupos
> > 
> >     a.. Para visitar o site do seu grupo na web, acesse:
> >     http://br.groups.yahoo.com/group/delphi-br/
> >       
> >     b.. Para sair deste grupo, envie um e-mail para:
> >     [EMAIL PROTECTED]
> >       
> >     c.. O uso que você faz do Yahoo! Grupos está sujeito aos 
Termos 
> do Serviço do Yahoo!. 
> > 
> > 
> > 
> > [As partes desta mensagem que não continham texto foram removidas]





-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a