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