[RESOLVIDO] Ordenar campos na grid editável

Tenho um formulário GRID EDITÁVEL que sempre terá 7 registros. No BD tenho a coluna (pai_ordem) que utilizo no SQL do formulário (ORDE BY pai_ordem).
Ao alterar a ordem, eu preciso que todos os campos afetados sejam alterados na tabela, ou seja, se alterar a ordem do 6 para 3, eu preciso fazer um update na tabela alterando o 3 pra 4, o 4 pra 5 e o 5 pra 6. Eu fiz as seguintes alterações no formulário:

  • Coloquei o campo {pai_ordem} do formulário como LABEL e criei um campo (pai_ordem_altera} como SELECT (de 1 a 7).

  • Criei o método alter_ordem():

    // Se alterar a ordem
    if(sc_changed({pai_ordem_altera})){

    $ordem_atual = {pai_ordem};
    $ordem_alter = {pai_ordem_altera};

    // Verifica a maior ordem
    if($ordem_alter < $ordem_atual){
    $ini = $ordem_alter;
    $fim = $ordem_atual;
    }else{
    $ini = $ordem_atual;
    $fim = $ordem_alter;
    }

    // grava um array
    while($ini < $fim){
    $valores[$ini]= $ini+1;
    $ini++;
    }

    // Altera os valores na tabela
    foreach($valores as $key => $value)
    {
    // Faz update na ordem
    $update_sql = “UPDATE tb_site_pai
    SET pai_ordem = “.$value.”
    WHERE pai_ordem = “.$key.”
    AND pai_sit_id = [id_site];”;
    sc_exec_sql($update_sql);

      //sc_error_message($update_sql);
    

    }
    }

Ao executar o método, acontece o seguinte:

  • o campo 6 altera para 3 (ok! mesmo pq é a alteração feita pelo formulário)
  • o campo 3, 4 e 5 alteram todos para 6… e não para os valores que preciso (3 pra 4, 4 pra 5 e 5 pra 6)

No desespero, já tentei executar o método nos eventos OnBeforeUpdate, OnAfterUpdate, OnValidade e não dá certo.

Agora a parte interessante… quando retiro o comentário da mensagem de erro ‘sc_error_message($update_sql)’ exibe os 3 updates corretamente:

UPDATE tb_site_pai SET pai_ordem = 4 WHERE pai_ordem = 3 AND pai_sit_id = 1;
UPDATE tb_site_pai SET pai_ordem = 5 WHERE pai_ordem = 4 AND pai_sit_id = 1;
UPDATE tb_site_pai SET pai_ordem = 6 WHERE pai_ordem = 5 AND pai_sit_id = 1;

O que será que estou fazendo errado?
Se alguém tiver outra idéia pra atualizar as tabelas agradeço muito.
Obrigado!

Consegui resolver fazendo uma alteração no método para pegar o ID primeiro e depois fazer o update. Ficou assim:

// Altera as ordens na tabela
// Se a ordem nova for maior
if($ordem_alter < $ordem_atual){

$ini = $ordem_alter;
$fim = $ordem_atual;

// grava um array
while($ini < $fim){ 
	
	// pesquisa o id do pai
	$check_sql = "SELECT pai_id  
				FROM tb_site_pai 
				WHERE pai_sit_id = [id_site] AND pai_ordem = ".$ini.";";
	sc_lookup(rs, $check_sql);

	// atribui o id da navegação e a ordem que vai alterar
	$valores[$rs[0][0]]= $ini+1;

	$ini++;
}	

// Se a ordem nova for menor
}else{

$ini = $ordem_atual;
$fim = $ordem_alter;		

// grava um array
while($ini <= $fim){ 

	// pesquisa o id da navegação
	$check_sql = "SELECT pai_id  
				FROM tb_site_pai 
				WHERE pai_sit_id = [id_site] AND pai_ordem = ".$ini.";";
	sc_lookup(rs, $check_sql);

	// atribui o id da navegação e a ordem que vai alterar
	$valores[$rs[0][0]]= $ini-1;

	$ini++;
}

}

// Altera os valores na tabela
foreach($valores as $key => $value)
{
// Faz update na ordem
$update_sql = “UPDATE tb_site_pai
SET pai_ordem = “.$value.”
WHERE pai_id = “.$key.”;”;

sc_exec_sql($update_sql);

}

Já está ordenando como eu precisava, agora é só ‘enxugar’ o código e blza!

Abraço a todos!