Ajuda em trocar senha

Delphi

15/10/2012

Olá , gostaria de uma ajuda na hora de trocar senha , quando eu clico para trocar senha , ele diz que não é possível salvar e as vezes pede o campo código(Quando coloco QueryTrocaSenha.edit) , algo que ja tem , eu quero só trocar senha e manter os dados antigos, no programa está estas linhas de código:
   QueryTrocaSenha.Close;
   QueryTrocaSenha.SQL.Clear;
   QueryTrocaSenha.SQL.Add('SELECT * FROM USUARIOS WHERE SENHA_USUARIO = :PRM_SenhaUsuA');
   QueryTrocaSenha.ParamByName('PRM_SenhaUsuA').AsString := edtSenhaAntiga.text;
   QueryTrocaSenha.Open;
     if (QueryTrocaSenha.RecordCount) = 1 then
     begin
          If (edNovaSenha.text = edtConfirmaNvSenha.Text) then
          begin
            QueryTrocaSenha.FieldByName('SENHA_USUARIO').Value := edtConfirmaNvSenha.Text;
            QueryTrocaSenha.ParamByName('PRM_SenhaUsuA').AsString := edtConfirmaNvSenha.text;
            QueryTrocaSenha.Post;
            Self.Close;
            MessageDlg('Senha Modificada com sucesso!',mtConfirmation,[mbOK],0);
          end else
         begin
               MessageDlg('Verifique se os campos de nova senha conferem!',mtError,[mbOK],0);
              edtConfirmaNvSenha.SetFocus;
          end;
     end else
     begin
          Application.MessageBox('Senha antiga não confere!', 'Alerta', mb_Ok+
          mb_IconExclamation);
          edtSenhaAntiga.SetFocus;
     end;


end;
Jonathan Romeiro

Jonathan Romeiro

Curtidas 0

Respostas

Alisson Santos

Alisson Santos

15/10/2012

Amigo o ideal é fazer um update na tabela, pois o jeito que está fazendo está errado mesmo, pois não está dando um update.
poderia fazer dessa maneira. So lembrando que tem que colocar dentro de uma transação, agora se quiser criar uma store procedure para fazer isso fica ao critério.

QueryTrocaSenha.Close;
QueryTrocaSenha.SQL.Clear;
QueryTrocaSenha.SQL.Add('SELECT * FROM USUARIOS WHERE SENHA_USUARIO = :PRM_SenhaUsuA');
QueryTrocaSenha.ParamByName('PRM_SenhaUsuA').AsString := edtSenhaAntiga.text;
QueryTrocaSenha.Open;
if (QueryTrocaSenha.RecordCount) = 1 then
begin
If (edNovaSenha.text = edtConfirmaNvSenha.Text) then
begin
QueryTrocaSenha.sql.add('update usuarios set senha = ' + edtConfirmaNvSenha.Text);
QueryTrocaSenha.sql.add('where cd_usuário = ' + parametro do usuário);
Self.Close;
MessageDlg('Senha Modificada com sucesso!',mtConfirmation,[mbOK],0);
end else
begin



Olá , gostaria de uma ajuda na hora de trocar senha , quando eu clico para trocar senha , ele diz que não é possível salvar e as vezes pede o campo código(Quando coloco QueryTrocaSenha.edit) , algo que ja tem , eu quero só trocar senha e manter os dados antigos, no programa está estas linhas de código:
   QueryTrocaSenha.Close;
   QueryTrocaSenha.SQL.Clear;
   QueryTrocaSenha.SQL.Add('SELECT * FROM USUARIOS WHERE SENHA_USUARIO = :PRM_SenhaUsuA');
   QueryTrocaSenha.ParamByName('PRM_SenhaUsuA').AsString := edtSenhaAntiga.text;
   QueryTrocaSenha.Open;
     if (QueryTrocaSenha.RecordCount) = 1 then
     begin
          If (edNovaSenha.text = edtConfirmaNvSenha.Text) then
          begin
            QueryTrocaSenha.FieldByName('SENHA_USUARIO').Value := edtConfirmaNvSenha.Text;
            QueryTrocaSenha.ParamByName('PRM_SenhaUsuA').AsString := edtConfirmaNvSenha.text;
            QueryTrocaSenha.Post;
            Self.Close;
            MessageDlg('Senha Modificada com sucesso!',mtConfirmation,[mbOK],0);
          end else
         begin
               MessageDlg('Verifique se os campos de nova senha conferem!',mtError,[mbOK],0);
              edtConfirmaNvSenha.SetFocus;
          end;
     end else
     begin
          Application.MessageBox('Senha antiga não confere!', 'Alerta', mb_Ok+
          mb_IconExclamation);
          edtSenhaAntiga.SetFocus;
     end;


end;


GOSTEI 0
Jonathan Romeiro

Jonathan Romeiro

15/10/2012

Fiz o que dissestes , mas é como se nada ocorresse fui no IBexpert e continuou a antiga senha.
GOSTEI 0
Gilvanio Gonçalves

Gilvanio Gonçalves

15/10/2012

Jonathan, Onde vc esta usando este codigo em um botão, certo?

onde tem a string PRM_SenhaUsuA , é uma variavel?ou campo na tabela?

se for uma variavel como vc declara ela? onde vc declara, qual o valor?

vc tres edits. edtisenhaantiga,editnovasenha, editconfirmanovasenha.

Aqui :
QueryTrocaSenha.ParamByName('PRM_SenhaUsuA').AsString := edtSenhaAntiga.text;

vc diz no codigo que parametroname(prm_senhaUsuaA) é igual edtsenhaantiga
ou seja vc carrega a senha antiga do banco para este edit, como?


poste o codigo onde declara PRM_SenhaUsuA.
que vou ajustar o seu codigo,ok.
GOSTEI 0
Alisson Santos

Alisson Santos

15/10/2012

Amigo, tentou executar no ibexpert o update.
Execute primeiramente o update e verifica se vai funcionar, caso não faz os acertos necessários e depois coloca no seu código.
GOSTEI 0
Jonathan Romeiro

Jonathan Romeiro

15/10/2012

Gilvanio é uma variável ou melhor um parâmetro do fb que eu utilizo para receber os arquivos do edit, outra onde você citou como code é onde o parâmetro é declarado.
GOSTEI 0
Jonathan Romeiro

Jonathan Romeiro

15/10/2012

Amigo, tentou executar no ibexpert o update.
Execute primeiramente o update e verifica se vai funcionar, caso não faz os acertos necessários e depois coloca no seu código.

Tentei no ibexpert e também não funcionou.
GOSTEI 0
Gilvanio Gonçalves

Gilvanio Gonçalves

15/10/2012

Gilvanio é uma variável ou melhor um parâmetro do fb que eu utilizo para receber os arquivos do edit onde , outra onde você citou como code é onde o parâmetro é declarado.

entendi, vc usa o parametro levando o valor para o edit no caso acredito a senha atual do usuario,
veja bém para segurança de troca de senha, vc não acha que a rotina deveria pegar o usuario logado! onde só ele
pode alterar a senha?

no seu exemplo não vi onde vc define qual usuario será a troca de senha, para ele digitar a senha atual, ser verificada se é valida, e ser for valida, digita nova senha, e confirma a nova senha, e grava.

o que me diz?
GOSTEI 0
Jonathan Romeiro

Jonathan Romeiro

15/10/2012

Gilvânio , tentei outro meio aqui usando update ,deu certo ,eu não faria o que me disse pois o programa ja está demorando muito na minha mão e preciso entregar pronto logo.
GOSTEI 0
POSTAR