Problema bizarro! ordenação de registros
Estou fazendo um pequeno script para alterar a ordenação de registros no banco de dados e toda vez que eu executo este script, ele parece estar sendo executado DUAS vezes, pois está alterando a ordem em dois níveis, quando deveria ser apenas um.
Exemplo: se pego o produto na posição 1 e peço para alterar para a posição 2, ele vai para a 3. Mas o mais bizarro é que quando a página recarrega, a listagem mostra ele na posição 2, correta, porém no BD o registro já está na posição 3. Chamando a página novamente (agora sem enviar os parametros offset e iCod) a listagem já se altera e mostra o registro na posição 3, conforme o banco. Bizarro!!!
Testei no Chrome e Firefox.
É um script que roda na mesma página que lista os registros. Quando o usuário clica na seta pra cima ou para baixo, o redireciono para a mesma página com os parametros offset e iCod, sendo offset (0 ou 1) e iCod o id do produto.
Onde está o erro? Por favor, ajudem.
Vejam o código abaixo.
' Alteração de ordem
If trim(offset) <> "" AND IsNumeric(iCod) Then
Set objRsOrder = Server.CreateObject("Adodb.Recordset")
'Recupero a posição atual do registro
SQLOrder = "SELECT ordem_produto FROM ns_tb_produtos WHERE cod_produto = " & iCod
objRsOrder.Open SQLOrder, oConn, 1, 3
If Not objRsOrder.Eof Then
posAtual = objRsOrder("ordem_produto")
End If
objRsOrder.Close
Set objRsOrder = nothing
'Recupero a posição do registro logo acima ou abaixo, conforme a escolha do usuário
SQLOrder = "SELECT TOP 1 cod_produto, ordem_produto FROM ns_tb_produtos"
if offset = 1 OR offset <> 0 Then
SQLOrder = SqlOrder & " WHERE ordem_produto > " & posAtual & " ORDER BY ordem_produto"
elseif offset = 0 Then
SQLOrder = SqlOrder & " WHERE ordem_produto < " & posAtual & " ORDER BY ordem_produto DESC"
end If
Set objRsOrder = Server.CreateObject("Adodb.Recordset")
objRsOrder.Open SQLOrder, oConn, 1, 3
if Not objRsOrder.Eof Then
codProdSuperior = objRsOrder("cod_produto")
ordemProdutoSuperior = objRsOrder("ordem_produto")
SQLOrder = "UPDATE ns_tb_produtos SET ordem_produto = " & ordemProdutoSuperior & " WHERE cod_produto = " & ParaNumeralSQL(iCod)
'Atualiza posição do registro em edição
oConn.Execute(SQLOrder)
SQLOrder = "UPDATE ns_tb_produtos SET ordem_produto = " & posAtual & " WHERE cod_produto = " & ParaNumeralSQL(codProdSuperior)
'Atualiza posição do registro superior
oConn.Execute(SQLOrder)
End if
objRsOrder.Close
Set objRsOrder = nothing
end if
Discussão (6)
Carregando comentários...