problema ao alterar senha de usuario

Delphi

16/09/2012

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..
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

Mauricio Nicoli

Curtidas 0

Respostas

Mauricio Nicoli

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
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

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
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

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.
GOSTEI 0
Romulo Contro

Romulo Contro

16/09/2012

amigo, tira o Exit; e faz o teste...
GOSTEI 0
Mauricio Nicoli

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..
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

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.
GOSTEI 0
Mauricio Nicoli

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..
GOSTEI 0
Mauricio Nicoli

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..

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

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

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.
GOSTEI 0
Mauricio Nicoli

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..
GOSTEI 0
Bruno Leandro

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) );
GOSTEI 0
Deivison Melo

Deivison Melo

16/09/2012

Problema de sintaxe...

Debugando não encontrou o ponto exato?


GOSTEI 0
Mauricio Nicoli

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
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

Bruno Leandro

16/09/2012

tira a virgula antes do where veja se executa
GOSTEI 0
Mauricio Nicoli

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..
GOSTEI 0
POSTAR