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