Fórum Problema ao excluir usando loop.. #295905

17/09/2005

0

estou com um probleminha onde uso aki esta função...

  BD_CONT_REC.First;
    while not BD_CONT_REC.Eof do
  BD_CONT_REC.Delete;
  Close;


O problema é que a função esta excluindo somente um registro..a tabela tem vários registros que são excluidos de uma só vez, e depois ele sai do formulário automáticamente...tem como executar a função toda primeiro para depois sair do form ?...t+ vlw..


Gigatel

Gigatel

Responder

Posts

17/09/2005

Rjun

Aparentemente seu código está OK. Você usou o trace para ver se ele passa somente um vez pelo loop? Pq você não utiliza um sql para fazer a exclusão dos registros.

DELETE FROM Tabela



Responder

Gostei + 0

17/09/2005

Martins

Aparentemente seu código está OK. Você usou o trace para ver se ele passa somente um vez pelo loop? Pq você não utiliza um sql para fazer a exclusão dos registros.
DELETE FROM Tabela


vc pode fazer assim, mas se vc quiser utilizar a sua função, vc vai fazer algumas alterações para que ela fique assim:
begin
  while not Ds1.Eof do
   begin
     Ds1.Delete;
     ShowMessage(´Nome: ´+Ds1Nome.AsString); //Só para checar!!!
   end;
  Close;  //Só vai fechar o form depois q excluí todos os reg Ok!
end;


Boa sorte e bom desenvolvimento!!!


Responder

Gostei + 0

17/09/2005

Gigatel

Vou fazer uns teste... aki, más parece estar funcionando...blz...t+


Responder

Gostei + 0

17/09/2005

Gameiro

não sei se pode ser isso mas eu uso assim



begin 
Ds1.first; 
while not Ds1.Eof do 
   begin 
     Ds1.Delete; 
     ShowMessage(´Nome: ´+Ds1Nome.AsString); //Só para checar!!! 
     Ds1.next;  
   end; 
  Close;  //Só vai fechar o form depois q excluí todos os reg Ok! 
end; 




uso o first e o next


ate mais. :)


Responder

Gostei + 0

17/09/2005

Userba

estou com um probleminha onde uso aki esta função...
  BD_CONT_REC.First;
    while not BD_CONT_REC.Eof do
  BD_CONT_REC.Delete;
  Close;
O problema é que a função esta excluindo somente um registro..a tabela tem vários registros que são excluidos de uma só vez, e depois ele sai do formulário automáticamente...tem como executar a função toda primeiro para depois sair do form ?...t+ vlw..


Olá!

Está faltando um ´Next´ no seu código :)

...
  BD_CONT_REC.First;
  while not BD_CONT_REC.Eof do
  begin
    BD_CONT_REC.Delete;
    BD_CONT_REC.Next;
  end;  
  close;
...



Responder

Gostei + 0

17/09/2005

Gigatel

Aí galera valew pelo apoio..más por encrível que pareça esta é a função que funcionou sem problema...
  while not BD_CONT_REC.Eof do
    begin
    BD_CONT_REC.Delete;
    end;
  Close;


Valw..o apoio de todos..t+


Responder

Gostei + 0

17/09/2005

Marco Salles

Aí galera valew pelo apoio..más por encrível que pareça esta é a função que funcionou sem problema... Código: while not BD_CONT_REC.Eof do begin BD_CONT_REC.Delete; end; Close;


Não é nenhuma surpesa que é este codigo funcione

Está faltando um ´Next´ no seu código


Não porque o propio delete faz as vias do Next


Responder

Gostei + 0

18/09/2005

Martins

[quote:a14007b580=´Marco Salles´]
Aí galera valew pelo apoio..más por encrível que pareça esta é a função que funcionou sem problema... Código: while not BD_CONT_REC.Eof do begin BD_CONT_REC.Delete; end; Close;


Não é nenhuma surpesa que é este codigo funcione

Está faltando um ´Next´ no seu código


Não porque o propio delete faz as vias do Next[/quote:a14007b580]

Verdade [b:a14007b580]Marcos[/b:a14007b580], por isso não coloquei o [b:a14007b580]Next[/b:a14007b580], vamos ter mais atenção pessoal e dar mais enfase no estudo das estruturas dos blocos de comando do Delphi.

Boa Sorte a todos!!!


Martins


Responder

Gostei + 0

18/09/2005

Rjun

Eu achei estranho o bloco só funcionar com um begin..end. Era só uma linha. Não teria que funcionar sem o begin..end?


Responder

Gostei + 0

19/09/2005

Martins

Eu achei estranho o bloco só funcionar com um begin..end. Era só uma linha. Não teria que funcionar sem o begin..end?


Com certeza [b:3041189d62]Rjun[/b:3041189d62], mas isso seria correto desde que ele não quisesse sair do form após a exclusões, veja novamente o código dele:
BD_CONT_REC.First; //Vai para o ínicio da tabela.
    while not BD_CONT_REC.Eof do //enquanto não chegar ao fim da tab.
  BD_CONT_REC.Delete; //delete os registros, não precisa do next Ok!
  Close; // Feche o formulário.

Pois bem, ele fez quase tudo certo, e estaria tudo certo de ele não estivesse colocado aquele [b:3041189d62]Close[/b:3041189d62], pq para todos os efeitos ele vai ser lido após o [b:3041189d62]Delete[/b:3041189d62], e isso fecha o form e não permite q a rotina dele seja efetuada com sucesso, então faz-se necessário a utilização do bloco [b:3041189d62]begin... end;[/b:3041189d62]. Pq enquanto a condição for verdadeira, será executado o q estiver entre esse bloco, somente quando for falso, será executado o q estiver fora dele, blz!!

Espero ter ajudado.

Boa sorte a todos!!

Martins


Responder

Gostei + 0

19/09/2005

Rjun

Martins, acho que você esta enganado. De acordo com o código mostrado, ele teria que executar o comando Delete até que o arquivo chegasse ao fim. Somente depois que saisse do while o close seria executado. O código abaixo teria que funcionar sem o begin..end.

BD_CONT_REC.First; //Vai para o ínicio da tabela. 

while not BD_CONT_REC.Eof do //enquanto não chegar ao fim da tab. 
  BD_CONT_REC.Delete; //delete os registros, não precisa do next Ok! 

Close; // Feche o formulário. 



Responder

Gostei + 0

19/09/2005

Adriano Santos

Martins, acho que você esta enganado. De acordo com o código mostrado, ele teria que executar o comando Delete até que o arquivo chegasse ao fim. Somente depois que saisse do while o close seria executado. O código abaixo teria que funcionar sem o begin..end.
BD_CONT_REC.First; //Vai para o ínicio da tabela. 

while not BD_CONT_REC.Eof do //enquanto não chegar ao fim da tab. 
  BD_CONT_REC.Delete; //delete os registros, não precisa do next Ok! 

Close; // Feche o formulário. 


[b:67b99e1a0a]Martins[/b:67b99e1a0a], o [b:67b99e1a0a]Rjun[/b:67b99e1a0a] está correto. O Algoritimo será executado até terminar o while, depois ele sairá e executará o Close. Faça o teste. É batata.


Responder

Gostei + 0

19/09/2005

Gigatel

[quote:bbf06d4943=´Adriano Santos´]
Martins, acho que você esta enganado. De acordo com o código mostrado, ele teria que executar o comando Delete até que o arquivo chegasse ao fim. Somente depois que saisse do while o close seria executado. O código abaixo teria que funcionar sem o begin..end.
BD_CONT_REC.First; //Vai para o ínicio da tabela. 

while not BD_CONT_REC.Eof do //enquanto não chegar ao fim da tab. 
  BD_CONT_REC.Delete; //delete os registros, não precisa do next Ok! 

Close; // Feche o formulário. 





[b:bbf06d4943]Martins[/b:bbf06d4943], o [b:bbf06d4943]Rjun[/b:bbf06d4943] está correto. O Algoritimo será executado até terminar o while, depois ele sairá e executará o Close. Faça o teste. É batata.[/quote:bbf06d4943]


Aí galera sem querer botar lenha na fogueira, mas temos que práticos ..por isso que falei POR INCRIVÉL que paressa eu tbm acha que funcionava assim tbm..más na prática o que funcionou foi mesmo este codigo outro acima não dá certo...flw...

  while not BD_CONT_REC.Eof do
    begin
    BD_CONT_REC.Delete;
    end;
  Close;
end;




Más dúvidadas estão aqui para tentar ser resolvidas..t+...


Responder

Gostei + 0

19/09/2005

Adriano Santos

Aí galera sem querer botar lenha na fogueira, mas temos que práticos ..por isso que falei POR INCRIVÉL que paressa eu tbm acha que funcionava assim tbm..más na prática o que funcionou foi mesmo este codigo outro acima não dá certo...flw...
  while not BD_CONT_REC.Eof do
    begin
    BD_CONT_REC.Delete;
    end;
  Close;
end;

Más dúvidadas estão aqui para tentar ser resolvidas..t+...



Cara, que loko...não tinha que dar erro.


Responder

Gostei + 0

19/09/2005

Gigatel

Deixa falar erro num dá..más ele deleta somente um registro...que para mim num era viável...heheheheeh...tenho cada ganbiarra aki no delphi de deixar qualquer programador de cabelo em pé...t+


Responder

Gostei + 0

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

Aceitar