Problema criptografia senha update
Bom dia!!!
Tenho um formulario de cadastro de usuario e utilizo uma rotina para criptografar a senha.
Utilizo o componente ZQuery.
Quando incluo o usuario esta ok, a senha grava no banco criptografada, mas quando faço uma alteracao neste usuario esta acontecendo que criptografa a senha ja criptografada novamente. Como devo proceder para corregir isso.
o beforepost coloquei esta linha
Ado_Usuario.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave);
fico no aguardo.
Tenho um formulario de cadastro de usuario e utilizo uma rotina para criptografar a senha.
Utilizo o componente ZQuery.
Quando incluo o usuario esta ok, a senha grava no banco criptografada, mas quando faço uma alteracao neste usuario esta acontecendo que criptografa a senha ja criptografada novamente. Como devo proceder para corregir isso.
o beforepost coloquei esta linha
Ado_Usuario.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave);
fico no aguardo.
Iramar Junior
Curtidas 0
Respostas
Marcelo Diniz
27/01/2011
Bom dia!!!
Tenho um formulario de cadastro de usuario e utilizo uma rotina para criptografar a senha.
Utilizo o componente ZQuery.
Quando incluo o usuario esta ok, a senha grava no banco criptografada, mas quando faço uma alteracao neste usuario esta acontecendo que criptografa a senha ja criptografada novamente. Como devo proceder para corregir isso.
o beforepost coloquei esta linha
Ado_Usuario.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave);
fico no aguardo.
Tenho um formulario de cadastro de usuario e utilizo uma rotina para criptografar a senha.
Utilizo o componente ZQuery.
Quando incluo o usuario esta ok, a senha grava no banco criptografada, mas quando faço uma alteracao neste usuario esta acontecendo que criptografa a senha ja criptografada novamente. Como devo proceder para corregir isso.
o beforepost coloquei esta linha
Ado_Usuario.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave);
fico no aguardo.
Na alteração verifique se a senha foi alterada pelo usuário ou não, se não retire o campo senha do update, se foi pegue o novo valor e salve ele.
Ex.: Var SenhaAtual, NovaSenha : string;
SenhaAtual := Ado_Usuario.FieldByName('SENHA').AsString;NovaSenha := DBEdSenha.text ;
if SenhaAtual <> NovaSenha then Ado_Usuario.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave);
GOSTEI 0
Marcelo Diniz
27/01/2011
Corrigindo o código acima.
Var SenhaAtual, NovaSenha : string;
SenhaAtual := Ado_Usuario.FieldByName('SENHA').AsString;NovaSenha := Encrypt(EditSenha.Text, chave);
if SenhaAtual <> NovaSenha then Ado_Usuario.FieldByName('SENHA').AsString := NovaSenha;
GOSTEI 0
Marco Salles
27/01/2011
outra opção é testar o dataset , se trata de uma Edição desconsidere
eu não trabalho com o ZQuery mas considerando as boas práticas de programação , este evento
OnBeforePost tem a mesma assinatura do que a classe Herdade , portanto deve ter o parametro DataSet
procedure TSeuFormulario.SeuDataSetTQUERY1BeforePost(DataSet: TDataSet);
begin
if DataSet.State in [DsInsert] then
DATASET.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave);
end;
GOSTEI 0
Wilson Junior
27/01/2011
No evento OnBeforeUpdate (acho que é este):
E no evento OnBeforePost:
Espero ter colaborado.
DATASET.FieldByName('SENHA').AsString := Descrypt(EditSenha.Text, chave);
E no evento OnBeforePost:
DATASET.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave);
Espero ter colaborado.
GOSTEI 0
William Galleti
27/01/2011
Concordo com o pessoal acima...
Acho que a melhor pratica mesmo é a questão de comparação de senhas.
Eu faço assim...
No AfterOpen do ClientDataSet alimento uma variável global SenhaOld : string.
No botão gravar eu verifico se a senha é igual a da variável SenhaOld . Se não for, mando criptografar e boa...
No meu caso ta com ClientDataSet, adeque a sua necessidade
Espero ter ajudado.
Acho que a melhor pratica mesmo é a questão de comparação de senhas.
Eu faço assim...
No AfterOpen do ClientDataSet alimento uma variável global SenhaOld : string.
No botão gravar eu verifico se a senha é igual a da variável SenhaOld . Se não for, mando criptografar e boa...
//codigo afteropen SenhaOld := cdsPadraoPasswd.AsString; //codigo btnGravar if SenhaOld <> edtSenha.Text then begin cdsPadrao.Edit; cdsPadraoPasswd.AsString := MD5.MD5Print(MD5String(cxDBTextEditSenha.Text)); cdsPadrao.Post; end;
No meu caso ta com ClientDataSet, adeque a sua necessidade
Espero ter ajudado.
GOSTEI 0
Efraim Santana
27/01/2011
concordo com William Galleti.
apenas um ajuste no codigo.
apenas um ajuste no codigo.
//codigo afteropen SenhaOld := cdsPadraoPasswd.AsString; //codigo btnGravarvar novasenha : String; novasenha := MD5.MD5Print(MD5String(cxDBTextEditSenha.Text)); if SenhaOld <> novasenha then begin cdsPadrao.Edit; cdsPadraoPasswd.AsString := novasenha; cdsPadrao.Post; end;
GOSTEI 0
Marco Salles
27/01/2011
Oh gente eu não costumo rebater idéias pq idéias são livres , tanto para fornecer qnt para receber.
Mas ou Vcs não entenderam o problema dele ou eu não entendi . Será que eu entendi tão errado assim ???
Me corrijam :
1) Quando incluo o usuario esta ok ... Ele esta inserindo sem problema nehum
2)mas quando faço uma alteracao esta acontecendo que criptografa a senha ja criptografada novamente. pq esta ocorrendo isto ????? Ora pq beforepost esta Criptogravando o valor do EditSenha.Text , que pode estar em branco ou conter um Lixo qualquer porque pode ser uma simples alteração de Telefone por exemplo.. Ele não esta Reclamando de Alteração De Senha Então durante um processo de alteração (não de Senha) ele não pode executar a instrução
Ado_Usuario.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave); So isso gente !!!!! nada mais do que isso Agora a alteração de senha é um processo que não foi tratado pq não foi pedido , pelo menos a meu ver . Para Alteração de senha sugiro um Form separado com algumas particularidades . O Paulista mandou tb uma opção que para mim ele entendeu o espirito da dúvida . Ele coloca no valor do Edit um Valor Descriptografado no evento e depois o Criptograva , não aterando o seu conteudo .Tb funciona . So que o evento mais indicado para isto seguindo a sua iéia é o evento BeforeEdit e sem testar para mim é a solução que não precisa de outros arranjos
Mas ou Vcs não entenderam o problema dele ou eu não entendi . Será que eu entendi tão errado assim ???
Me corrijam :
1) Quando incluo o usuario esta ok ... Ele esta inserindo sem problema nehum
2)mas quando faço uma alteracao esta acontecendo que criptografa a senha ja criptografada novamente. pq esta ocorrendo isto ????? Ora pq beforepost esta Criptogravando o valor do EditSenha.Text , que pode estar em branco ou conter um Lixo qualquer porque pode ser uma simples alteração de Telefone por exemplo.. Ele não esta Reclamando de Alteração De Senha Então durante um processo de alteração (não de Senha) ele não pode executar a instrução
Ado_Usuario.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave); So isso gente !!!!! nada mais do que isso Agora a alteração de senha é um processo que não foi tratado pq não foi pedido , pelo menos a meu ver . Para Alteração de senha sugiro um Form separado com algumas particularidades . O Paulista mandou tb uma opção que para mim ele entendeu o espirito da dúvida . Ele coloca no valor do Edit um Valor Descriptografado no evento e depois o Criptograva , não aterando o seu conteudo .Tb funciona . So que o evento mais indicado para isto seguindo a sua iéia é o evento BeforeEdit e sem testar para mim é a solução que não precisa de outros arranjos
No evento OnBeforeEdit(acho que é este):
E no evento OnBeforePost:
Espero ter colaborado.
DATASET.FieldByName('SENHA').AsString := Descrypt(EditSenha.Text, chave);
E no evento OnBeforePost:
DATASET.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave);
Espero ter colaborado.
GOSTEI 0
Iramar Junior
27/01/2011
Obrigado pela ajuda de todos, mas o Marco Antonio entendeu o meu problema, é isso mesmo.
Fiz todos os testes e nao consegui resolver o problema, pelo visto vou ter modificar meu projeto deixando cadastrar os usuarios e desenvolver um form para cadastro e alteracao da senha.
Acho que foi isso a ideia que o Marco teve também.
Algum de vcs teria uma exemplo de como poderia fazer isso sem ter que alterar muito no meu projeto?
Minha ideia seria verificar se o campo senha é nulo, se for so ira pedir a senha e repetir a senha e confirmar, senao, será solicitado a senha atual e so depois de validar a senha que sera solicitado a nova senha e repetir para confirmar a alteracao.
Continuo esperando ajuda e sugestoes.
Obrigado
Fiz todos os testes e nao consegui resolver o problema, pelo visto vou ter modificar meu projeto deixando cadastrar os usuarios e desenvolver um form para cadastro e alteracao da senha.
Acho que foi isso a ideia que o Marco teve também.
Algum de vcs teria uma exemplo de como poderia fazer isso sem ter que alterar muito no meu projeto?
Minha ideia seria verificar se o campo senha é nulo, se for so ira pedir a senha e repetir a senha e confirmar, senao, será solicitado a senha atual e so depois de validar a senha que sera solicitado a nova senha e repetir para confirmar a alteracao.
Continuo esperando ajuda e sugestoes.
Obrigado
GOSTEI 0
Marco Salles
27/01/2011
Mas antes de partir para os finalmente vamos primeiro aos entretantos...
Qnd vc fez este teste indicado pelo Paulista o que teve de errado ou o que não te agradou ????
Citação:
No evento OnBeforeEdit(acho que é este):
#Código
DATASET.FieldByName('SENHA').AsString := Descrypt(EditSenha.Text, chave);
E no evento OnBeforePost:
#Código
DATASET.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave);
Espero ter colaborado.
Na minha opinião ... Errado esta pq qualquer um Pode alterar a senha de qualquer um Deste que coloque o DataSet em modo de edição e coloque um Valor para o Edit Mas certo esta , porque resolveu o seu problema inicial ???? Acredito eu Então estamos 50% para lá e 50% para cá . Pergunto isto , pq será mais fácil atacar o problema desse ponto , sem ter que efetuar muitas alteraçoes no codigo Ultima pergunta ... Patrocineo perto de muriaé ??? Mg
No evento OnBeforeEdit(acho que é este):
#Código
DATASET.FieldByName('SENHA').AsString := Descrypt(EditSenha.Text, chave);
E no evento OnBeforePost:
#Código
DATASET.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave);
Espero ter colaborado.
Na minha opinião ... Errado esta pq qualquer um Pode alterar a senha de qualquer um Deste que coloque o DataSet em modo de edição e coloque um Valor para o Edit Mas certo esta , porque resolveu o seu problema inicial ???? Acredito eu Então estamos 50% para lá e 50% para cá . Pergunto isto , pq será mais fácil atacar o problema desse ponto , sem ter que efetuar muitas alteraçoes no codigo Ultima pergunta ... Patrocineo perto de muriaé ??? Mg
GOSTEI 0
Iramar Junior
27/01/2011
Marco, blz...
Resolveu em parte, pq só e decriptografado caso o cursor passar pelo edit, caso contrario continua criptografando a senha que ja esta criptografada....
Sem duvida creio que a solucao esta em criar outro form...
Cidade Patrocinio proxima a Uberlandia
Resolveu em parte, pq só e decriptografado caso o cursor passar pelo edit, caso contrario continua criptografando a senha que ja esta criptografada....
Sem duvida creio que a solucao esta em criar outro form...
Cidade Patrocinio proxima a Uberlandia
GOSTEI 0
Marco Salles
27/01/2011
Marco, blz...
Resolveu em parte, pq só e decriptografado caso o cursor passar pelo edit, caso contrario continua criptografando a senha que ja esta criptografada....
Mas parece que o codigo esta errado... Fui olhar a idéia e esqueci da lógica
Veja o evento OnBeforeEdit é chamado imediatamente qnd vc coloca o dataset em edição
beste momento o codigo do Paulista estava assim
DATASET.FieldByName('SENHA').AsString := Descrypt(EditSenha.Text, chave);
Resolveu em parte, pq só e decriptografado caso o cursor passar pelo edit, caso contrario continua criptografando a senha que ja esta criptografada....
Ta errado ... O Certo é assim
EditSenha.Text:= Descrypt(DATASET.FieldByName('SENHA').AsString,chave);
Isto é , o conteudo do edit recebe o conteudo do campo senha descriptografada
Agora sim , na hora de gravar o campo recebe o conteudo do edit Criptografado
E no evento OnBeforePost:
DATASET.FieldByName('SENHA').AsString := Encrypt(EditSenha.Text, chave);
Patrocicineo perto de uberlandia .. Sei ja ouvi falar . Aqui perto de minha cidade tem uma cidade com o mesmo nome da sua
GOSTEI 0
Iramar Junior
27/01/2011
bom, resolvi o problema da seguinte forma:
Quando clico no botao editar ja faz a decriptografia da senha, assim sendo quando gravo, mesmo sem alterar a senha ela é criptografada corretamente.
Nao gostaria que fosse assim pq existem programas que consegue ver a senha mesmo estando mascarada com qualquer caracter, mas em tese resolveu o problema.
Continuo com a ideia inicial de criar um form separado somente para cadastrar e alterar a senha, como vc (Marco) mesmo disse anteriormente, so nao entendi o que quiz dizer com algumas particularidades.
Gostaria de me ajudar a desenvolver este form?
Agradeço.
Quando clico no botao editar ja faz a decriptografia da senha, assim sendo quando gravo, mesmo sem alterar a senha ela é criptografada corretamente.
Nao gostaria que fosse assim pq existem programas que consegue ver a senha mesmo estando mascarada com qualquer caracter, mas em tese resolveu o problema.
Continuo com a ideia inicial de criar um form separado somente para cadastrar e alterar a senha, como vc (Marco) mesmo disse anteriormente, so nao entendi o que quiz dizer com algumas particularidades.
Gostaria de me ajudar a desenvolver este form?
Agradeço.
GOSTEI 0
Wilson Junior
27/01/2011
Para este form sitado, eu utiizo da seguinte maneira...
Tenho um form para alteração dos dados do usuário e neste tenho um botão q chama outro form para alterar a senha, quando entro neste, peço a senha atul e a nova senha e sua confirmação da nova senha. ao dar OK neste form, descriptografo a senha atual para comparar com a senha atual informada, se for igual, atribuo a nova senha ao campo do ClientDataSet, sendo assim ele sempre irá criptografar a nova senha, mas para o caso de alterar os dado do usuário e não alterar a senha, utilizo, sempre o evento OnBeforeEdti, conforme o Marco citou, como maneira de desripitografar q senha, pois assim sempre tenho o contéudo da senha, mas sem mostrar para o usuário.
Espero ter colaborado.
Tenho um form para alteração dos dados do usuário e neste tenho um botão q chama outro form para alterar a senha, quando entro neste, peço a senha atul e a nova senha e sua confirmação da nova senha. ao dar OK neste form, descriptografo a senha atual para comparar com a senha atual informada, se for igual, atribuo a nova senha ao campo do ClientDataSet, sendo assim ele sempre irá criptografar a nova senha, mas para o caso de alterar os dado do usuário e não alterar a senha, utilizo, sempre o evento OnBeforeEdti, conforme o Marco citou, como maneira de desripitografar q senha, pois assim sempre tenho o contéudo da senha, mas sem mostrar para o usuário.
Espero ter colaborado.
GOSTEI 0
Marco Salles
27/01/2011
bom, resolvi o problema da seguinte forma:
Quando clico no botao editar ja faz a decriptografia da senha, assim sendo quando gravo, mesmo sem alterar a senha ela é criptografada corretamente.
usando que foi postado . pegando a idéa do Paulisat e Alterando o evento e corrigindo o codigo
Nao gostaria que fosse assim pq existem programas que consegue ver a senha mesmo estando mascarada com qualquer caracter, mas em tese resolveu o problema.
Continuo com a ideia inicial de criar um form separado somente para cadastrar e alterar a senha, como vc (Marco) mesmo disse anteriormente, so nao entendi o que quiz dizer com algumas particularidades.
visivel ????? .... Resposta é Não .. So precisa ficar Visivel na Inserção de novo usário vamos continuar o aclopamento .. No before Insert Coloque o Edit como Visibel:=True e No AfterPost Coloque o Edit Como Visible:=False e no AfterCancel tn o Edit Como Visible:=False Pronto seu problema com programas que consegue ver a senha esta Resolvido . O Conteudo do Edit com a senha não aparecera mais ... Agora vamos a criação do Form para Alterar a Senha Crie um Formulario com Tres edites e dois Butoes .... o Primeiro é onde o usuário ira informar a Senha Atual O Segundo a Alteracao e o Terceiro a nova senha Para cada um dos botoes Altere a propriedade modalResult para mrOk e para o segundo altere para mrCancel Define para este formulario
private
{ Private declarations }
FOldsenha:String;
public
{ Public declarations }
constructor Create(Aowner:Tcomponent;out StrSenha:String);reintroduce;
end;
var
FrmSenha: TFrmSenha;
implementation
{$R *.dfm}
{ TForm1 }
constructor TFrmSenha.Create(Aowner:Tcomponent;out StrSenha:String);
begin
inherited Create(Aowner);
FoldSenha:=StrSenha;
end;
procedure TForm6.Button2Click(Sender: TObject);
var
formulario:Tform;
oldSenha:String;
begin
oldSenha:= SeuDataSet.FieldByName('Senha').AsString;
formulario:=TFrmSenha.Create(nil,oldSenha);
try
if formulario.ShowModal = mrOk then
begin
editSenha.text:=oldSenha;
SeuDataSet.Edit;
SeuDataSet.Post;
end;
finally
formulario.Free;
formulario:=nil;
end;
end;
GOSTEI 0
Iramar Junior
27/01/2011
Blz, o formulario esta criado, falta a autenticacao da senha atual e as alteracoes da nova senha.
GOSTEI 0
Marco Salles
27/01/2011
Vc recebeu o meu Emeil de alguras alteraçoes que fiz pessoal ????
Tornando-a Publico subscrevo:
Iramar tem um erro bobo , mas foi distração minha no metodo que lhe passei
Minha Unit AlterarSenha esta assim
unit USenha;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TFrmSenha = class(TForm)
btnValidar: TButton;
btnSair: TButton;
edtSenhaAtual: TEdit;
edtNovaSenha: TEdit;
edtConfirmarSenha: TEdit;
procedure btnValidarClick(Sender: TObject);
private
{ Private declarations }
FOldsenha:String;
public
{ Public declarations }
constructor Create(Aowner:Tcomponent;
const StrSenha:String);reintroduce;
property OldSenha:String read FOldsenha write FoldSenha;
end; var
FrmSenha: TFrmSenha; implementation {$R *.dfm} { TForm1 }
Meu Botao AlterarSenha no Form Principal esta ssim
procedure TForm6.btnAlterarSenhaClick(Sender: TObject);
var
formulario:Tform; oldSenha:String; begin
oldSenha:= SeuDataSet.FieldByName('Senha').AsString;
formulario:=TFrmSenha.Create(nil,oldSenha);
try
if formulario.ShowModal = mrOk then
begin SeuDataSet.Edit; // a ordem desse evento é importante no contexto
editSenha.text:=TfrmSenha(formulario).OldSenha;
SeuDataSet.Post;
Showmessage('Senha Alterado com Sucesso !!!');
end;
finally
formulario.Free;
formulario:=nil;
end;
end; Acho que é isso ai , não tem mais erro .. Pode ter melhorias Testei aqui , esta dando Certo Não esqueça dos Eventos
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TFrmSenha = class(TForm)
btnValidar: TButton;
btnSair: TButton;
edtSenhaAtual: TEdit;
edtNovaSenha: TEdit;
edtConfirmarSenha: TEdit;
procedure btnValidarClick(Sender: TObject);
private
{ Private declarations }
FOldsenha:String;
public
{ Public declarations }
constructor Create(Aowner:Tcomponent;
const StrSenha:String);reintroduce;
property OldSenha:String read FOldsenha write FoldSenha;
end; var
FrmSenha: TFrmSenha; implementation {$R *.dfm} { TForm1 }
procedure TFrmSenha.btnValidarClick(Sender: TObject);
begin
modalResult:=mrCancel;
//NA verdade a comparacao Tem que ser assim edit1.Text = Descriptogrvar(FOldsenha)
if not (edtSenhaAtual.Text = FOldsenha) then
begin
Showmessage('Senha incorreta ..');
//Faz Alguma coisa .. Comuinca depois de um Nmero de Tentativas
exit;
end;
if edtNovaSenha.Text = edtConfirmarSenha.Text then
begin
FOldsenha:=edtNovaSenha.Text;
modalresult:=mrOk;
end;
end;
constructor TFrmSenha.Create(Aowner:Tcomponent;const StrSenha:String);
begin
inherited Create(Aowner);
FoldSenha:=StrSenha;
end;
end.
var
formulario:Tform; oldSenha:String; begin
oldSenha:= SeuDataSet.FieldByName('Senha').AsString;
formulario:=TFrmSenha.Create(nil,oldSenha);
try
if formulario.ShowModal = mrOk then
begin SeuDataSet.Edit; // a ordem desse evento é importante no contexto
editSenha.text:=TfrmSenha(formulario).OldSenha;
SeuDataSet.Post;
Showmessage('Senha Alterado com Sucesso !!!');
end;
finally
formulario.Free;
formulario:=nil;
end;
end; Acho que é isso ai , não tem mais erro .. Pode ter melhorias Testei aqui , esta dando Certo Não esqueça dos Eventos
GOSTEI 0
Iramar Junior
27/01/2011
Marco, nao recebi nenhum email teu.....
estou testando os codigos que me passou, ainda nao consegui fazer funcionar...
caso tenha talk me add
iramar.ads@gmail.com
estou testando os codigos que me passou, ainda nao consegui fazer funcionar...
caso tenha talk me add
iramar.ads@gmail.com
GOSTEI 0
Marco Salles
27/01/2011
O Emai que lhe mandei é este
iramar@cmpatrocinio.mg.gov.br
ta errado ???
ads Não num tem não
mas o que esta pegando.. ???
GOSTEI 0
Iramar Junior
27/01/2011
Marco veja o que fiz?
funcionou perfeito para alterar a senha, mas acontece que se der algum erro para exibir qualquer dessas mensagens nao retorna ao formsenha, ele é fechado e retorna ao form que o chamou, sendo necessario que clique no botao para chamar o formsenha.
Nao sei se deu para entender, mas o que gostaria é que mesmo que aconteca algum erro, depois que exibir a mensagem retorne ao formsenha e no focus onde ocorreu o erro, compreendeu?????
O email é este mesmo mas nao recebi nada....
Me reenvia para este: iramar.ads@gmail.com
Agradeco
modalResult:=mrCancel;
if not (encrypt(edit1.Text, chave) = foldsenha) then
begin
showmessage('A senha não confere com a original!!!');
exit;
Edit1.SetFocus;
end;
if (edit2.Text = '') then
begin
showmessage('A nova senha não foi informada!!!');
edit2.SetFocus;
end;
if (edit3.Text = '') then
begin
showmessage('Repetição da nova senha não foi informada!!!');
edit3.SetFocus;
end;
if (alltrim(edit2.Text) <> alltrim(edit3.Text)) then
begin
showmessage('A repetição da senha não confere com a original!!!');
edit2.SetFocus;
end
else
begin
FoldSenha := encrypt(edit3.text, chave);
ModalResult:=mrOk;
end;
funcionou perfeito para alterar a senha, mas acontece que se der algum erro para exibir qualquer dessas mensagens nao retorna ao formsenha, ele é fechado e retorna ao form que o chamou, sendo necessario que clique no botao para chamar o formsenha.
Nao sei se deu para entender, mas o que gostaria é que mesmo que aconteca algum erro, depois que exibir a mensagem retorne ao formsenha e no focus onde ocorreu o erro, compreendeu?????
O email é este mesmo mas nao recebi nada....
Me reenvia para este: iramar.ads@gmail.com
Agradeco
GOSTEI 0
Marco Salles
27/01/2011
Marco veja o que fiz?
funcionou perfeito para alterar a senha, mas acontece que se der algum erro para exibir qualquer dessas mensagens nao retorna ao formsenha, ele é fechado e retorna ao form que o chamou, sendo necessario que clique no botao para chamar o formsenha.
Nao sei se deu para entender, mas o que gostaria é que mesmo que aconteca algum erro, depois que exibir a mensagem retorne ao formsenha e no focus onde ocorreu o erro, compreendeu?????
O email é este mesmo mas nao recebi nada....
Me reenvia para este: iramar.ads@gmail.com
Agradeco
é muito simples .... Vc altere a propriedade modalResult do Primeiro Botao para mrNome (Padrao)
e fala apenas um pequeno ajuste no codigo
modalResult:=mrCancel;
modalResult:=mrCancel;
if not (encrypt(edit1.Text, chave) = foldsenha) then
begin
showmessage('A senha não confere com a original!!!');
exit;
Edit1.SetFocus;
end;
if (edit2.Text = '') then
begin
showmessage('A nova senha não foi informada!!!');
edit2.SetFocus;
end;
if (edit3.Text = '') then
begin
showmessage('Repetição da nova senha não foi informada!!!');
edit3.SetFocus;
end;
if (alltrim(edit2.Text) <> alltrim(edit3.Text)) then
begin
showmessage('A repetição da senha não confere com a original!!!');
edit2.SetFocus;
end
else
begin
FoldSenha := encrypt(edit3.text, chave);
ModalResult:=mrOk;
end;
funcionou perfeito para alterar a senha, mas acontece que se der algum erro para exibir qualquer dessas mensagens nao retorna ao formsenha, ele é fechado e retorna ao form que o chamou, sendo necessario que clique no botao para chamar o formsenha.
Nao sei se deu para entender, mas o que gostaria é que mesmo que aconteca algum erro, depois que exibir a mensagem retorne ao formsenha e no focus onde ocorreu o erro, compreendeu?????
O email é este mesmo mas nao recebi nada....
Me reenvia para este: iramar.ads@gmail.com
Agradeco
if not (encrypt(edit1.Text, chave) = foldsenha) then
begin
showmessage('A senha não confere com a original!!!');
exit;
Edit1.SetFocus;
end;
if (edit2.Text = '') then
begin
showmessage('A nova senha não foi informada!!!');
edit2.SetFocus;
end;
if (edit3.Text = '') then
begin
showmessage('Repetição da nova senha não foi informada!!!');
edit3.SetFocus;
end;
if (alltrim(edit2.Text) <> alltrim(edit3.Text)) then
begin
showmessage('A repetição da senha não confere com a original!!!');
edit2.SetFocus;
end
else
begin
FoldSenha := encrypt(edit3.text, chave);
ModalResult:=mrOk; close; //Acho que so ISSO funciona
end;
GOSTEI 0
Iramar Junior
27/01/2011
nao funcionou com a alteracao que me passou
GOSTEI 0
Marco Salles
27/01/2011
vo testar . Peguei so o seu codigo e tcham
GOSTEI 0
Marco Salles
27/01/2011
fiz ajuste no codigo que vc postou
Mas deixe o botao de confirmar com a propriedade ModaResult mrNone (Padrao)
Codigo Fica:
procedure TFrmSenha.btnValidarClick(Sender: TObject);
begin
if not (edtSenhaAtual.Text = foldsenha) then
begin
showmessage('A senha não confere com a original!!!');
EdtSenhaAtual.SetFocus;
exit;
end;
if (edtNOvaSenha.Text = '') then
begin
showmessage('A nova senha não foi informada!!!');
edtNovaSenha.SetFocus;
exit;
end;
if (edtConfirmarSenha.Text = '') then
begin
showmessage('Repetição da nova senha não foi informada!!!');
edtConfirmarSenha.SetFocus;
exit;
end;
if edtNovaSenha.Text <> edtConfirmarSenha.Text then
begin
showmessage('A repetição da senha não confere com a original!!!');
edtConfirmarSenha.SetFocus;
end
else
begin
FoldSenha := edtConfirmarSenha.text;
ModalResult:=mrOk;
end;
GOSTEI 0
Iramar Junior
27/01/2011
Funcionou ai com vc????
Marco,
Nao tem nem msn???? ficaria bem mais facil de comunicarmos....
aguardo
Marco,
Nao tem nem msn???? ficaria bem mais facil de comunicarmos....
aguardo
GOSTEI 0
Iramar Junior
27/01/2011
Blz, agora funcinou aki perfeitamente do jeito que gostaria, valew muito pela ajuda....
So mais uma coisa, gostaria que ao abrir o formsenha o seu caption ficasse assim:
frmsenha.Caption := 'Mudança de senha para o usuário ''' + Usuario.Text + '''.';
fiz varias mudanças mas nao consigo fazer isso, sei que coisa boba, mas estou apanhando.....
So mais uma coisa, gostaria que ao abrir o formsenha o seu caption ficasse assim:
frmsenha.Caption := 'Mudança de senha para o usuário ''' + Usuario.Text + '''.';
fiz varias mudanças mas nao consigo fazer isso, sei que coisa boba, mas estou apanhando.....
GOSTEI 0
Marco Salles
27/01/2011
Blz, agora funcinou aki perfeitamente do jeito que gostaria, valew muito pela ajuda....
So mais uma coisa, gostaria que ao abrir o formsenha o seu caption ficasse assim:
frmsenha.Caption := 'Mudança de senha para o usuário ''' + Usuario.Text + '''.';
fiz varias mudanças mas nao consigo fazer isso, sei que coisa boba, mas estou apanhando.....
O certo de fazer isto ( tem outras maneiras ) mas uma das mais indicadas é vc passar o Parametro
Usuario.Text ( quem deve ser um campo do seu BD) , no constructor do Formulario Senha
Assim altere o contructor para
constructor Create(Aowner:Tcomponent;out StrSenha:String;Const StrUsuario:String);reintroduce;
na Implementacao do Médodo Contructor Adicione
constructor TFrmSenha.Create(Aowner:Tcomponent;const StrSenha:String);So mais uma coisa, gostaria que ao abrir o formsenha o seu caption ficasse assim:
frmsenha.Caption := 'Mudança de senha para o usuário ''' + Usuario.Text + '''.';
fiz varias mudanças mas nao consigo fazer isso, sei que coisa boba, mas estou apanhando.....
begin
inherited Create(Aowner);
FoldSenha:=StrSenha;
self.Caption := 'Mudança de senha para o usuário " '+StrUsuario+' "'; end; Na hora de Instanciar o formulario faça
procedure TForm6.btnAlterarSenhaClick(Sender: TObject);
var
formulario:Tform;
oldSenha:String;
UserName:String;
begin
oldSenha:= SeuDataSet.FieldByName('Senha').AsString;
User:=SeuDataSet.FieldByName('CampoComNomeUsuario').AsString;
formulario:=TFrmSenha.Create(nil,oldSenha,UserName);
try
......................Segue o Codigo sem alteração
GOSTEI 0