Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ZioNN

Problema bizarro! ordenação de registros

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

ao inves de deixar

if offset = 1 OR offset <> 0 Then

deixe apenas

if offset = 1

e faça o teste

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Xanburzum! Obrigado por ajudar.

 

Então, como "teste desespero" separei o script da página de listagem. Agora chamo a função em outra página que depois retorna para a listagem, e desta forma funciona perfeitamente, sem qualquer alteração no código que postei acima.

 

Alguma ideia do que pode estar acontecendo, pois quando o script está na mesma página da listagem de produtos dá o problema mencionado anteriormente?

 

Muito esquisito.

 

Como funciona, acho que o problema não está no ponto que você mencionou, certo? Ou não? rsss

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente , como citado acima, limpar , use isso para limpar

 

response.expires = 0
response.expiresabsolute = Now() -1
response.addHeader "pragma","no-cache"
response.addHeader "cache-control","private"
Response.CacheControl = "no-cache"
Session.Contents.RemoveAll()
Session.Abandon

 

e dê um response.write na sua string SQL para ver o que esta sendo passado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Xanburzum, já existe isso no script, exceto o Session pois trata-se de uma área admin que só funciona logado com Sessions.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

'o seu formulário vem depois deste script
'aqui faça um redirect para a mesma página
feche as conexões
oconn.close
set oconn = nothing
response.redirect "para a mesma página"

end if


...
form

 

 

coloquei o código no fim do seu script

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.