Fórum exclusão de itens com while #238299
17/06/2004
0
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
Curtir tópico
+ 0Posts
17/06/2004
Emerson Nascimento
(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;
Gostei + 0
17/06/2004
Gandalf.nho
TbItens.EmptyTable;
Gostei + 0
17/06/2004
Janete
Assim tb não deu certo, ele exclui um só
Gostei + 0
17/06/2004
Janete
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 :?:
Gostei + 0
17/06/2004
Marcelino
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,
Gostei + 0
17/06/2004
Marcelino
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;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)