problema ao alterar senha de usuario
olá amigos..estou tentando fazer uma comparação no sistema mas não estou conseguindo..
tenho um campo usuario onde o sistema compara se o usuario está cadastrado no banco de dados..
E dois edits para comparar a nova senha para atualizar o banco de dados..
Só que ao comparar os edits o sistema não está compilando..
da erro justamente na linha que compara os edits..estou usando variais neste caso..
Grato a quem possa ajudar
tenho um campo usuario onde o sistema compara se o usuario está cadastrado no banco de dados..
E dois edits para comparar a nova senha para atualizar o banco de dados..
Só que ao comparar os edits o sistema não está compilando..
da erro justamente na linha que compara os edits..estou usando variais neste caso..
procedure Tfrmaltus.btnconfirmarClick(Sender: TObject);
var
senha1: string;
senha2: string;
begin
edit2.text:=senha1;
edit3.text:=senha2;
if (edit1.Text = '') then
begin
Messagedlg('O campo "Usuário" deve ser preenchido!', mtError, [mbOk], 0);
if edit1.CanFocus then
edit1.SetFocus;
Exit;
end;
if (edit2.Text = '') then
begin
Messagedlg('O campo "Senha" deve ser preenchido!', mtError, [mbOk], 0);
if edit2.CanFocus then
edit2.SetFocus;
Exit;
end;
if (edit3.Text = '') then
begin
Messagedlg('O campo "Nova senha" deve ser preenchido!', mtError, [mbOk], 0);
if edit3.CanFocus then
edit3.SetFocus;
Exit;
end;
if logvalido (edit1.Text) then
ModalResult := mrOk
else
Messagedlg('Usuário não cadastrado!', mtError, [mbOk], 0);
if edit1.CanFocus then
edit1.SetFocus;
Exit;
end;
if UpperCase(senha1) = UpperCase(senha2) then
begin
DM.ADOQuerySql.SQL.CLEAR;
DM.ADOQuerySql.SQL.ADD('update administrador set usuario= '+QuotedStr(trim(senha1))+', '+quotedstr(trim(senha2))+', where usuario= '+edit1.Text);
DM.ADOQuerySql.execsql;
showmessage('Senha alterada com sucesso!');
end;
end;
function Tfrmaltus.logvalido(const usuario: string): Boolean;
begin
with DM.ADOconexao, DM.ClientDataSet do
begin
if not connected then
connected :=true;
DM.ClientDataSet.Close;
DM.ClientDataSet.commandtext := 'select count(1) from administrador ' + 'where upper(usuario) = '+ Quotedstr(AnsiupperCase(trim(usuario)));
DM.ClientDataSet.Open;
result := (Fields[0].AsInteger > 0);
end;
end;
end;
end.
Grato a quem possa ajudar
Mauricio Nicoli
Curtidas 0
Respostas
Mauricio Nicoli
16/09/2012
consegui fazer o programa rodar..mas ao clicar no botão confirmar o sistema não testa nada..apenas fica preso no if
codigo inteiro...
if (edit2.Text = '') then
begin
Messagedlg('O campo "Senha" deve ser preenchido!', mtError, [mbOk], 0);
if edit2.CanFocus then
edit2.SetFocus;
Exit;
end;
codigo inteiro...
procedure Tfrmaltus.btnconfirmarClick(Sender: TObject);
var
senha1: string;
senha2: string;
begin
edit2.text:=senha1;
edit3.text:=senha2;
if (edit1.Text = '') then
begin
Messagedlg('O campo "Usuário" deve ser preenchido!', mtError, [mbOk], 0);
if edit1.CanFocus then
edit1.SetFocus;
Exit;
end;
if (edit2.Text = '') then
begin
Messagedlg('O campo "Senha" deve ser preenchido!', mtError, [mbOk], 0);
if edit2.CanFocus then
edit2.SetFocus;
Exit;
end;
if (edit3.Text = '') then
begin
Messagedlg('O campo "Nova senha" deve ser preenchido!', mtError, [mbOk], 0);
if edit3.CanFocus then
edit3.SetFocus;
Exit;
end;
if logvalido (edit1.Text) then
ModalResult := mrOk
else
begin
Messagedlg('Usuário não cadastrado!', mtError, [mbOk], 0);
if edit1.CanFocus then
edit1.SetFocus;
Exit;
end;
if UpperCase(senha1)=UpperCase(senha2) then
begin
DM.ADOQuerySql.SQL.CLEAR;
DM.ADOQuerySql.SQL.ADD('update administrador set usuario= '+QuotedStr(trim(senha1))+', '+quotedstr(trim(senha2))+', where usuario= '+edit1.Text);
DM.ADOQuerySql.execsql;
showmessage('Senha alterada com sucesso!');
end;
end;
function Tfrmaltus.logvalido(const usuario: string): Boolean;
begin
with DM.ADOconexao, DM.ClientDataSet do
begin
if not connected then
connected :=true;
DM.ClientDataSet.Close;
DM.ClientDataSet.commandtext := 'select count(1) from administrador ' + 'where upper(usuario) = '+ Quotedstr(AnsiupperCase(trim(usuario)));
DM.ClientDataSet.Open;
result := (Fields[0].AsInteger > 0);
end;
end;
GOSTEI 0
Mauricio Nicoli
16/09/2012
consegui fazer o programa rodar..mas ao clicar no botão confirmar o sistema não testa nada..apenas fica preso no if
e pede >>>> 'O campo "Senha" deve ser preenchido!'...
codigo inteiro...
if (edit2.Text = '') then
begin
Messagedlg('O campo "Senha" deve ser preenchido!', mtError, [mbOk], 0);
if edit2.CanFocus then
edit2.SetFocus;
Exit;
end;
e pede >>>> 'O campo "Senha" deve ser preenchido!'...
codigo inteiro...
procedure Tfrmaltus.btnconfirmarClick(Sender: TObject);
var
senha1: string;
senha2: string;
begin
edit2.text:=senha1;
edit3.text:=senha2;
if (edit1.Text = '') then
begin
Messagedlg('O campo "Usuário" deve ser preenchido!', mtError, [mbOk], 0);
if edit1.CanFocus then
edit1.SetFocus;
Exit;
end;
if (edit2.Text = '') then
begin
Messagedlg('O campo "Senha" deve ser preenchido!', mtError, [mbOk], 0);
if edit2.CanFocus then
edit2.SetFocus;
Exit;
end;
if (edit3.Text = '') then
begin
Messagedlg('O campo "Nova senha" deve ser preenchido!', mtError, [mbOk], 0);
if edit3.CanFocus then
edit3.SetFocus;
Exit;
end;
if logvalido (edit1.Text) then
ModalResult := mrOk
else
begin
Messagedlg('Usuário não cadastrado!', mtError, [mbOk], 0);
if edit1.CanFocus then
edit1.SetFocus;
Exit;
end;
if UpperCase(senha1)=UpperCase(senha2) then
begin
DM.ADOQuerySql.SQL.CLEAR;
DM.ADOQuerySql.SQL.ADD('update administrador set usuario= '+QuotedStr(trim(senha1))+', '+quotedstr(trim(senha2))+', where usuario= '+edit1.Text);
DM.ADOQuerySql.execsql;
showmessage('Senha alterada com sucesso!');
end;
end;
function Tfrmaltus.logvalido(const usuario: string): Boolean;
begin
with DM.ADOconexao, DM.ClientDataSet do
begin
if not connected then
connected :=true;
DM.ClientDataSet.Close;
DM.ClientDataSet.commandtext := 'select count(1) from administrador ' + 'where upper(usuario) = '+ Quotedstr(AnsiupperCase(trim(usuario)));
DM.ClientDataSet.Open;
result := (Fields[0].AsInteger > 0);
end;
end;
GOSTEI 0
Alisson Santos
16/09/2012
Não entendi muito bem o que está precisando não.
1º O que precisa que o sistema faça.
2º Qual o erro que está retornando e em qual linha.
3º Está debugando para verificar os valores que está sendo passado.
1º O que precisa que o sistema faça.
2º Qual o erro que está retornando e em qual linha.
3º Está debugando para verificar os valores que está sendo passado.
GOSTEI 0
Romulo Contro
16/09/2012
amigo, tira o Exit; e faz o teste...
GOSTEI 0
Mauricio Nicoli
16/09/2012
Alisson..é o seguinte..
preciso que ao digitar o nome do usuário senha nova e confirmação de senha..sendo edit1 edit2 e edit3 respectivamente..
o sistema primeiro verifique se o usuário está cadastrado no banco de dados mysql..
dando ok passa-se para a próxima etapa..
sendo a senha1 e senha2 iguais ou seja...nova senha e confirmação de senha respectivamente..
o sistema tem que atualizar o banco de dados com a nova senha cadastrada..
só que agora depois de mexer no sistema ele está tentando validar a atualização mas não consegue..diz a mensagem de erro..
[b]check the manual corresponds to your Mysql server version for the right syntax to use near "123456", where usuario=mauricio at line 1[/b]
Dá erro nesta linha..
preciso que ao digitar o nome do usuário senha nova e confirmação de senha..sendo edit1 edit2 e edit3 respectivamente..
o sistema primeiro verifique se o usuário está cadastrado no banco de dados mysql..
dando ok passa-se para a próxima etapa..
sendo a senha1 e senha2 iguais ou seja...nova senha e confirmação de senha respectivamente..
o sistema tem que atualizar o banco de dados com a nova senha cadastrada..
só que agora depois de mexer no sistema ele está tentando validar a atualização mas não consegue..diz a mensagem de erro..
[b]check the manual corresponds to your Mysql server version for the right syntax to use near "123456", where usuario=mauricio at line 1[/b]
Dá erro nesta linha..
showmessage('Senha alterada com sucesso!');
procedure Tfrmaltus.btnalterarClick(Sender: TObject);
var
senha1: string;
senha2: string;
begin
senha1:=edit2.text;
senha2:=edit3.text;
if (edit1.Text = '') then
begin
Messagedlg('O campo "Usuário" deve ser preenchido!', mtError, [mbOk], 0);
if edit1.CanFocus then
edit1.SetFocus;
Exit;
end;
if (edit2.Text = '') then
begin
Messagedlg('O campo "Senha" deve ser preenchido!', mtError, [mbOk], 0);
if edit2.CanFocus then
edit2.SetFocus;
Exit;
end;
if (edit3.Text = '') then
begin
Messagedlg('O campo "Nova senha" deve ser preenchido!', mtError, [mbOk], 0);
if edit3.CanFocus then
edit3.SetFocus;
Exit;
end;
if not logvalido (edit1.Text) then
begin
Messagedlg('Usuário não cadastrado!', mtError, [mbOk], 0);
if edit1.CanFocus then
edit1.SetFocus;
Exit;
end;
if UpperCase(senha1)=UpperCase(senha2) then
begin
DM.ADOQuerySql.SQL.CLEAR;
DM.ADOQuerySql.SQL.ADD('update administrador set usuario= '+QuotedStr(trim(senha1))+', '+quotedstr(trim(senha2))+', where usuario= '+edit1.Text);
DM.ADOQuerySql.execsql;
showmessage('Senha alterada com sucesso!');
ModalResult := mrOk;
end
else
ShowMessage('A confirmação da senha está diferente da senha!');
end;
GOSTEI 0
Alisson Santos
16/09/2012
O erro pode estar nessa linha aqui do update.
Ao invé de fazer desse jeito
DM.ADOQuerySql.SQL.ADD('update administrador set usuario= '+QuotedStr(trim(senha1))+', '+quotedstr(trim(senha2))+', where usuario= '+edit1.Text)
Faça desse jeito para ver se resolve.
DM.ADOQuerySql.SQL.ADD('update administrador set usuario= '+QuotedStr(trim(senha1))+', where usuario= '+edit1.Text)
Pois analisando não entendi pq passou dois campos de senha, sendo que ele você tem que passar apenas um campo para o update, do jeito que fez ele não vai reconhecer o segundo campo.
Sempre que tiver alguma duvida debuga o programa e verifica o que ele está passando, nesse caso quando ele chegar nessa instrução tem que verificar o que ele está passando para o seu update antes de executar, verificar a instução sql.
Se precisar de ajuda no debugger me fala que eu te oriento.
Ao invé de fazer desse jeito
DM.ADOQuerySql.SQL.ADD('update administrador set usuario= '+QuotedStr(trim(senha1))+', '+quotedstr(trim(senha2))+', where usuario= '+edit1.Text)
Faça desse jeito para ver se resolve.
DM.ADOQuerySql.SQL.ADD('update administrador set usuario= '+QuotedStr(trim(senha1))+', where usuario= '+edit1.Text)
Pois analisando não entendi pq passou dois campos de senha, sendo que ele você tem que passar apenas um campo para o update, do jeito que fez ele não vai reconhecer o segundo campo.
Sempre que tiver alguma duvida debuga o programa e verifica o que ele está passando, nesse caso quando ele chegar nessa instrução tem que verificar o que ele está passando para o seu update antes de executar, verificar a instução sql.
Se precisar de ajuda no debugger me fala que eu te oriento.
GOSTEI 0
Mauricio Nicoli
16/09/2012
sim..eu gostaria sim se você pudesse me dar algumas dicas de como fazer isso..
Ao desenvolver um projeto o programa pode, durante o desenvolvimento trancar em alguma linha..
Pelo que entendi este procedimento ajuda a entender melhor o que está acontecendo com o sistema..
Agradeço se puder ajudar neste sentido sobre o procedimento de debugar..
Ao desenvolver um projeto o programa pode, durante o desenvolvimento trancar em alguma linha..
Pelo que entendi este procedimento ajuda a entender melhor o que está acontecendo com o sistema..
Agradeço se puder ajudar neste sentido sobre o procedimento de debugar..
GOSTEI 0
Mauricio Nicoli
16/09/2012
amigo fiz a alteração conforme sua sugestão..o erro continua na mesma linha ainda só que mudou um pouco a mensagem do erro..
[b]check the manual corresponds to your Mysql server version for the right syntax to use near where usuario=mauricio at line 1.[/b]
showmessage('Senha alterada com sucesso!');
[b]check the manual corresponds to your Mysql server version for the right syntax to use near where usuario=mauricio at line 1.[/b]
GOSTEI 0
Mauricio Nicoli
16/09/2012
if (edit1.text <> '') and (edit2.Text <> '') then
begin
DM.ADOQuerySql.SQL.CLEAR;
DM.ADOQuerySql.SQL.ADD('update administrador set usuario= '+QuotedStr(trim(senha1))+', where usuario= '+edit1.Text);
DM.ADOQuerySql.execsql;
showmessage('Senha alterada com sucesso!');
ModalResult := mrOk;
end
else
ShowMessage('A confirmação da senha está diferente da senha!');
end;
GOSTEI 0
Alisson Santos
16/09/2012
Estou no serviço e não utilizo o banco de dados MySQL aqui não, o que eu estarei fazendo é o seguinte.
Logo que chegar em casa estarei simulando o que está ocorrendo e te passo uma resposta mais correta.
Pode ser assim.
E faço uma video de como utilizar o debug para verificar o retorno do sql.
Logo que chegar em casa estarei simulando o que está ocorrendo e te passo uma resposta mais correta.
Pode ser assim.
E faço uma video de como utilizar o debug para verificar o retorno do sql.
GOSTEI 0
Mauricio Nicoli
16/09/2012
pode ser sim
deixei de ir ao estágio hoje para ficar em casa trabalhando em cima do projeto..
obrigado..
deixei de ir ao estágio hoje para ficar em casa trabalhando em cima do projeto..
obrigado..
GOSTEI 0
Bruno Leandro
16/09/2012
Ola Mauricio me parece que o seu sql tem algum erro
tente assim as duas formas seja se algum deu certo e nos retorne
DM.ADOQuerySql.SQL.ADD('update administrador set senha = '+QuotedStr(senha1)+' where usuario = ' + edit1.Text );
ou
DM.ADOQuerySql.SQL.ADD('update administrador set senha = '+QuotedStr(senha1)+' where usuario = ' + QuotedStr(edit1.Text) );
tente assim as duas formas seja se algum deu certo e nos retorne
DM.ADOQuerySql.SQL.ADD('update administrador set senha = '+QuotedStr(senha1)+' where usuario = ' + edit1.Text );
ou
DM.ADOQuerySql.SQL.ADD('update administrador set senha = '+QuotedStr(senha1)+' where usuario = ' + QuotedStr(edit1.Text) );
GOSTEI 0
Deivison Melo
16/09/2012
Problema de sintaxe...
Debugando não encontrou o ponto exato?
Debugando não encontrou o ponto exato?
GOSTEI 0
Mauricio Nicoli
16/09/2012
Amigo bruno..testei das duas maneiras e não deu certo..
fiz o processo de debuggar o programa para ver se a variavel carrega o que foi digitado do edit
na linha
Debugei e vi que a variável senha1 carrega os dados "123456" que foram os mesmos que eu digitei no edit antes de apertar o botão alterar..
e na linha..
debugei também e diz DM.ADOQuerySqlalterar.execsql=inaccessible value
Se a variavel consegue carregar o valor digita porque não atualiza o bd?
fiz o processo de debuggar o programa para ver se a variavel carrega o que foi digitado do edit
na linha
DM.ADOQuerySqlalterar.SQL.ADD('update administrador set senha= '+QuotedStr(senha1)+', where usuario= '+QuotedStr(editalterarus.Text));Debugei e vi que a variável senha1 carrega os dados "123456" que foram os mesmos que eu digitei no edit antes de apertar o botão alterar..
e na linha..
DM.ADOQuerySqlalterar.execsql;
debugei também e diz DM.ADOQuerySqlalterar.execsql=inaccessible value
Se a variavel consegue carregar o valor digita porque não atualiza o bd?
procedure Tfrmaltus.btnalterarusClick(Sender: TObject);
var
senha1: string;
begin
senha1:=editsenhaus.text;
if (editalterarus.Text = '') then
begin
Messagedlg('O campo "Usuário" deve ser preenchido!', mtError, [mbOk], 0);
if editalterarus.CanFocus then
editalterarus.SetFocus;
Exit;
end;
if (editsenhaus.Text = '') then
begin
Messagedlg('O campo "Senha" deve ser preenchido!', mtError, [mbOk], 0);
if editsenhaus.CanFocus then
editsenhaus.SetFocus;
Exit;
end;
if not logvalido (editalterarus.Text) then
begin
Messagedlg('Usuário não cadastrado!', mtError, [mbOk], 0);
if editalterarus.CanFocus then
editalterarus.SetFocus;
Exit;
end;
if (editalterarus.Text <> '') and (editsenhaus.Text <> '') then
begin
DM.ADOQuerySqlalterar.SQL.CLEAR;
DM.ADOQuerySqlalterar.SQL.ADD('update administrador set senha= '+QuotedStr(senha1)+', where usuario= '+QuotedStr(editalterarus.Text));
DM.ADOQuerySqlalterar.execsql;
showmessage('Senha alterada com sucesso!');
ModalResult := mrOk;
end
else
ShowMessage('A confirmação da senha está diferente da senha!');
end;
function Tfrmaltus.logvalido(const usuario: string): Boolean;
begin
with DM.ADOconexaoalterar, DM.ClientDataSetalterar do
begin
if not connected then
connected :=true;
DM.ClientDataSetalterar.Close;
DM.ClientDataSetalterar.commandtext := 'select count(1) from administrador ' + 'where upper(usuario) = '+ Quotedstr(AnsiupperCase(trim(usuario)));
DM.ClientDataSetalterar.Open;
result := (Fields[0].AsInteger > 0);
end;
end;
GOSTEI 0
Bruno Leandro
16/09/2012
tira a virgula antes do where veja se executa
GOSTEI 0
Mauricio Nicoli
16/09/2012
tirei a virgula mas ai não executa..
o que pode ser? tô pesquisando aqui para ver exemplos parecidos sobre este problema mas tá difícil..
o que pode ser? tô pesquisando aqui para ver exemplos parecidos sobre este problema mas tá difícil..
GOSTEI 0