Fórum exclusão de itens com while #238299

17/06/2004

0

Não estou conseguindo excluir todos os itens de uma tabela de uma vez, estou fazendo assim:

With TbItens do
begin
First;
while not Eof do
begin
Delete;
Next;
end;
end;

mas ele só exclui um item, o resto continua na tabela, alguém tem alguma solução pra isso?


Janete

Janete

Responder

Posts

17/06/2004

Emerson Nascimento

pelo jeito vc está utilizando Paradox, certo?
(vc pode utilizar queries para essa tarefa)

não precisa do [b:08271aea43]with[/b:08271aea43]. são apenas duas linhas.


TbItens.First;
while not TbItens.Eof do TbItens.Delete;


Responder

Gostei + 0

17/06/2004

Gandalf.nho

Se for TTable, pode usar só uma linha:
TbItens.EmptyTable;


Responder

Gostei + 0

17/06/2004

Janete

pelo jeito vc está utilizando Paradox, certo? (vc pode utilizar queries para essa tarefa) não precisa do [b:c523cb740f]with[/b:c523cb740f]. são apenas duas linhas. TbItens.First; while not TbItens.Eof do TbItens.Delete;


Assim tb não deu certo, ele exclui um só


Responder

Gostei + 0

17/06/2004

Janete

Se for TTable, pode usar só uma linha: TbItens.EmptyTable;


tb não deu e dá um erro: traduzindo: tabela não pode ser aberta para uso exclusivo

essa tabela de itens q quero q exclua os itens está vinculada a tabela de pedidos q seria os itens da venda, e até hoje não consegui achar a solução para esse problema de não excluir e tenho q ficar verificando toda vez q o cliente quer cancelar ou excluir um pedido, se existe itens na tabela se existir fico dando uma mensagem para e ele exclua um a um até q exclua todos e só depois disso eu excluo o pedido e tá muito ruim dessa forma, então deve ter alguma forma de fazer um while ou algo parecido para q exclua todos de uma vez :?:


Responder

Gostei + 0

17/06/2004

Marcelino

Prezada Janete

1) Pela leitura das respostas, assumo que esta sendo usado um componente TTable e o banco de dados Paradox.

2) 1a pergunta : Vc está com algum Filter ativado na tabela ?
Razão da minha pergunta : Não sei o comportamento que o comando First assume quando o Filter esta ativado, mas ja tive algumas surpresas usando o Filter.
Resumo da opera : Debuge a aplicação para ver onde o ´pointer´ esta sendo posicionado na tabela.

3) 2a pergunta : Existe algum indice associado a tabela pelo Numero de Pedido ?

Se não houver , vc vai ter que varrer a tabela inteira para ver quais registros tem aquele numero de pedido e excluir o que tiver o numero de pedido em questão ( Muito embora, aconselhe vc a criar o tal do indice por questões de performance ).

TbItens.First;
while (not TbItens.Eof) do
begin
if TbItens.FieldByName(´NUMERO_PEDIDO´).AsInteger = NUM_PEDIDO then
TbItens.Delete
else
TbItens.Next;
end;

Se houver o indice, vc deve indicar que o indice usado é o proprio e posicionar no NUMERO_PEDIDO e excluir enquanto for NUMERO_PEDIDO

TbItens.Locate(´NUM_PEDIDO´,NUM_PEDIDO,[])
while (not TbItens.Eof) and TbItens.FieldByName(´NUMERO_PEDIDO´).AsInteger = NUM_PEDIDO do
TbItens.Delete;

4) Não sei se vc reparou nas respostas anteriores, mas quando vc executa o comando Delete, automaticamente o ´pointer´ ja vai para o próximo registro, sendo que o comando Next ´não deve´ ser executado.

[]s,


Responder

Gostei + 0

17/06/2004

Marcelino

Vc fala em ´então deve ter alguma forma de fazer um while ou algo parecido para q exclua todos de uma vez´

O que vc pode fazer é incluir um componente TQuery na sua aplicação com a seguinte instrução SQL ( Ex : Query_Exclui ) .
´delete from TBITENS where NUMERO_PEDIDO = :NUMERO_PEDIDO´

Ao excluir use a rotina abaixo

with Query_Exclui do
begin
Close;
Params.ParamByName(´NUMERO_PEDIDO´).AsInteger := NUM_PEDIDO;
ExecSQL;
end;


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar