Implementação: Singleton - Design Pattern Delphi - Parte 2
Veja nesta Quick, um exemplo prático de Singleton em Delphi
Olá galera, nesta Quick Tips, irei mostrar a implementação dos métodos declarados no artigo anterior, aonde vimos como montar o Singleton.
Vamos as implementações :
class function TUsuario.Criptografar(const Value: string): string;
var
xMD5: TIdHashMessageDigest5;
begin
xMD5 := TIdHashMessageDigest5.Create;
try
Result := xMD5.HashStringAsHex(Value);
finally
xMD5.Free;
end;
end;
class function TUsuario.ChangePassword(strOldPassword,
strNewPassword, strCheckPassword: String; xConexao : TSQLConnection): Boolean;
var
xQry : TSQLQuery;
begin
xQry := TSQLQuery.Create(Nil);
xQry.SQLConnection := xConexao;
if FSenha = Criptografar(strOldPassword) then
begin
if strNewPassword = strCheckPassword then
begin
try
xQry.SQL.Add('UPDATE USUARIO SET SENHA =
'+QuotedStr(Criptografar(strNewPassword))+
' WHERE IDUSUARIO = '+ IntToStr(FID));
xQry.ExecSQL;
Result := True;
FSenha := Criptografar(strNewPassword);
MessageDlg('Senha alterada com sucesso !!!!',mtInformation,[mbOK],0);
finally
FreeAndNil(xQry);
end;
end
else
MessageDlg('As senhas não conferem !!!!',mtInformation,[mbOK],0);
end
else
MessageDlg('A senha antiga não confere !!!!',mtInformation,[mbOK],0);
end;
constructor TUsuario.Create;
begin
raise Exception.Create('Para obter uma instância de TUsuario utilize
TUsuario.GetInstance !');
end;
constructor TUsuario.CreatePrivate;
begin
inherited Create;
end;
class function TUsuario.GetInstance: TUsuario;
begin
if not Assigned(FInstance) then
FInstance := TUsuario.CreatePrivate;
Result := FInstance;
end;
class function TUsuario.GetUsuarioLogado: String;
begin
Result := FUsuario;
end;
class function TUsuario.Login(AUsuario, ASenha: String; xConexao: TSQLConnection): Boolean;
var
xQry : TSQLQuery;
begin
try
xry := TSQLQuery.Create(Nil);
xQry.SQLConnection := xConexao;
xQry.SQL.Add('SELECT * FROM USUARIO WHERE DESCRICAO =
'+QuotedStr(AUsuario)+
' AND SENHA = '+QuotedStr(Criptografar(ASenha)));
xQry.Open;
if not xQry.IsEmpty then
begin
FID := xQry.Fields[0].AsInteger;
FUsuario := xQry.Fields[1].AsString;
FSenha := xQry.Fields[2].AsString;
FNivel := xQry.Fields[3].AsInteger;
Result := True;
end
else
ShowMessage('Usuario ou senha inválidos');
except
on E : EXCEPTION do
raise Exception.Create('ERRO NAO ESPERADO '+ E.Message +#13+
E.ClassName + ' - - - ' + E.UnitName);
end;
end;
end.
O que é interessante nestes métodos, é que podemos aproveitar eles para outros projeto, montados nesta uUsuario.pas
Fico por aqui ate à próxima Quick Tips, onde veremos como aplicar os métodos de Login, GetUsuario, ChangePassword.
Um abraço
Wesley Y
wyamazack@rwsolution.com.br

Space do autor


Estudo comparativo entre banco de dados IBM Informix e Microsoft SQL

0
0
Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!