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!