Ir para conteúdo

POWERED BY:

Arquivado

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

Silvaninha

[Resolvido] update em campo único

Recommended Posts

Pessoal,

 

Estou trabalhando num site e me deparei com um erro muito esquisito.

 

Preciso atualizar um campo no banco que não pode receber registro duplicado.

 

O que fiz foi o seguinte:

 

Set objConexao1 = Server.CreateObject("ADODB.Connection")
objConexao1.Open Application("sConexao")
strSQL1="SELECT * FROM usuarios WHERE apelido_url='" & txtApelido1 & "'"
Set objRs1 = objConexao1.Execute(strSQL1)

dim cont, cod_u, controle
controle="ok"
txtmensagem=""
cont = 0

Do while not objRs1.eof
cont = cont + 1
cod_u = objRs1("cod_usuario")
objRs1.movenext
Loop

if cont=1 then
if cStr(cod_u) = cStr(txtCod1) then
controle = "ok"
txtmensagem=""
else
txtmensagem = "Existe um usuário cadastrado com esse apelido"
controle=""
end if
else
txtmensagem = "Existe um usuário cadastrado com esse apelido"
controle=""
end if
if cont=0 then
controle="ok"
txtmensagem="Apelido alterado com sucesso"
end if

objConexao1.close
set objConexao1 = nothing
set objRS1= nothing

 

 

Em suma: dei um select no banco procurando pelo apelido. Depois contei a quantidade de registros.

Se for 1, pode ser da própria pessoa ou de outra. Se for da própria pessoa (comparo o código do select com o código do usuário atual) ele atualiza. Se não for, não atualiza.

O problema é que ele funciona certinho se não existe o apelido e se o apelido é da própria pessoa. Se for de outra pessoa, o update é executado, dando o erro de usuário duplicado.

O update só executa se controle ="ok"

 

Alguma idéia? Só falta isso para o cadastro funcionar!

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então... o problema é que o Update já tem o where...

 

	Set objConexao = Server.CreateObject("ADODB.Connection") 
	objConexao.Open Application("sConexao")
	strSQL = "UPDATE  usuarios  SET email_usuario='"& txtEmail1 &"',senha_usuario='"& txtSenha1 &"',nome_usuario='"& txtNome1 &"',sexo_usuario='"& txtoptSexo &"', faixa_usuario= '"& txtFaixa &"',como_chegou_usuario ='"& txtVinda &"',receber_usuario = '"& txtVideos &"', apelido_url='"& txtApelido1 &"' WHERE cod_usuario=" & txtCod1

	Set objRs = objConexao.Execute(strSQL)

 

E o mais estranho é que fiz o mesmo controle nessa página para o email. E para o email funcionou! Só para o apelido que dá esse pau!!

Alguma outra sugestão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A variavel txtCod1 é a que contém o id do usuário ?

 

Deu um response.write na query sql para ver se todos os dados estão como esperados ?

 

Pode ser que algum valor da query não esteja vindo, seja por não ter sido chamado com o request.form, seja porque está chamando um post que não existe ou está sendo referenciado de forma errada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vinicius,

 

A variavel txtcod1 é que vem do formulário como um hidden field.

 

Dei um response.write e ele imprime certinho! Inclusive se pegar o apelido, consigo comparar com o apelido encontrado no banco com o original (que fica gravado numa sessão) e todos imprimem certo!

 

Muito estranho, porque em termos de lógica acho que está correto, mas, tem algo... repare que até tive que transformar em string porque tb dava erro (o asp interpretava cod_u diferente de txtcod1, mesmo se eles fossem iguais!).

 

Alguma idéia?

 

Abraços,

Sil

Compartilhar este post


Link para o post
Compartilhar em outros sites

só para dar um feedback...

 

como tinha mencionado, o "controle" era para o email e para o apelido.

 

O problema é que a variável controle era a mesma, então, mesmo não chamando o controle no apelido, ele chamava no email.

 

A solução foi trocar o nome da variável e só chamar o código de update se controle="ok" AND controle1="ok"

 

 

Valeu pelas ajudas porque elas acabaram me dando a idéia para debugar o código!

 

Abraços,

Sil

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.