Janio Aguiar

Excluir LINHAS de uma Table

4 posts in this topic

Boa noite,

Replicando aqui duvida do colega Ronaldo q foi postada no grupo do skype:

Ronaldo escreveu:



Agora é minha vez?

ln_line_Sel = 0



FOR EACH ROW OF TABLE_Titulos

	ln_line_Sel = TABLE_Titulos

	Info(ln_line_Sel)

	

	IF TABLE_Titulos[ln_line_Sel].COL_Marca = 0 THEN

		TableDelete(TABLE_Titulos,ln_line_Sel)

	END

END



A intenção é excluir as linhas da tabela que não estão marcadas, sempre sobra uma.

Alguma sugestão ou vou na de Jedson? kkkkkkkkk

 

Solução:

Janio escreveu:



Prepara o vinho que a solução chegou! hehehe



Filtra na table as linhas que não estao marcadas. Depois exclui somente estas:



TableEnableFilter(TABLE_Titulos.COL_Marca,filterEqual,0)



NbSelection is int = TableCount(TABLE_Titulos)



FOR i = NbSelection TO 1 STEP -1

	TableDelete(TABLE_Titulos, TableSelect(TABLE_Titulos, i))

END



TableDisableFilter( TABLE_Titulos.COL_Marca )

 

 

 

 

2 people like this

Share this post


Link to post
Share on other sites

Entendi, grato, no caso o STEP -1 é pra fazer do final pro início devido a realocar a posição do registro e evitar problemas correto?

Share this post


Link to post
Share on other sites

Bom dia,

Mestre Mello explica:

"deixa eu dar um pitaco na rotina. Para qualquer table, quando você desejar excluir várias linhas, como no caso, você JAMAIS pode ir do começo para o final excluindo, porque sempre haverá um reposicionamento das linhas. Tem de ir do final para o início.
Digamos que eu tenha 3 linhas e a 1 e a 3 estão marcadas. Se eu excluir a 1, automaticamente a 2 2 a três passa a ser -1, ou seja a 2 passa para 1 e a 3 passa para a 2, .... mas se eu excluir de trás para frente esse efeito não ocorre. Percebem?"

 

Eu, por outro lado, explico igual o Chicó do Auto da Compadecida:

"So sei que foi assim"

 

 

1 person likes this

Share this post


Link to post
Share on other sites

Só para complementar. Nesse caso imagine uma pilha de tijolos onde o tijolo mais próximo da terra tem o índice de número 1. Se você for removendo os tijolos de baixo para cima (do começo para o final) o que ocorre quando remove o primeiro tijolo? O Tijolo que tinha o índice número 2 passar a ser o 1, o tijolo de número 3 passa a ser o dois e o 1 não existe mais,Na realidade o índice 1 mudou de dono no meio do processo. Por esse motivo é que não se pode remover do começo para o final em uma tabela, deve-se remover do final para o início.

Abraços

2 people like this

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now