Ajuda sobre login

Delphi

20/02/2008

tenho esse codigo para um form de login:

procedure TfrmLogin.btnOkClick(Sender: TObject);
var
s:string;
begin
s:=IntToStr(StrToInt(edtSenha.Text));
DM.cdsLogin.Open; // Abre A tabela Login
if not(DM.cdsLogin.Locate(´Usuario´,frmLogin.edtApelido.Text,[LopartialKey,LocaseInsensitive]))and
not(DM.cdsLogin.Locate(´Senha´,frmLogin.edtSenha.Text,[LopartialKey,LocaseInsensitive])) then
begin
MessageDlg(´Nome ou senha do usuário inválidos.´+#13+13
+ ´Se você esqueceu sua senha, consulte ´+ 13
+ ´o administrador do sistema´, mtError, [mbOK], 0);
EdtSenha.Clear; // limpa o objeto EdtSenha
EdtSenha.SetFocus; //Ajusta o foco para o objeto EdtSenha
end
else
begin
FrmLogin.Hide; //Esconde a tela
FrmPrincipal.ShowModal; //chama a tela FrmMenuPrin no modo modal
FrmLogin.Release; //Remove a tela da memória
frmLogin.Close;
FrmLogin := Nil; //Atribui conteúdo nulo para a variável de tela FrmLogin
end;
end;

end.

tenho em minha tabela cadastrado :

usuario = lskskyblue
senha =123456
e

Usuario =qwer
Senha = 456789

Se eu digitar nos edit

Usuario = qwer
Senha = 123456

e também
Usuario = lskskyblue
Senha = 456789 irão também abrir o sistema como contorno esse problema?
Valeu Galera


Lskskyblue

Lskskyblue

Curtidas 0

Respostas

Rodc

Rodc

20/02/2008

Primeiramente, use a Tag CODE para postar código fonte. Fica mais entendível para que tenta te ajudar.
O comando Locale posiciona o dataset no registro encontrado, ou seja não precisa fazer Locale para a senha, apenas verifique no registro atual.
procedure TfrmLogin.btnOkClick(Sender: TObject);
var
s:string;
begin
    s:=IntToStr(StrToInt(edtSenha.Text));
    DM.cdsLogin.Open; // Abre A tabela Login
    if (DM.cdsLogin.Locate(´Usuario´,frmLogin.edtApelido.Text,[LopartialKey,LocaseInsensitive] and
    DM.cdsLogin.FieldByName(´Senha´).AsString = frmLogin.edtSenha.Text) then
    begin
        MessageDlg(´Nome ou senha do usuário inválidos.´+13+13
        + ´Se você esqueceu sua senha, consulte ´+ 13
        + ´o administrador do sistema´, mtError, [mbOK], 0);
        EdtSenha.Clear; // limpa o objeto EdtSenha
        EdtSenha.SetFocus; //Ajusta o foco para o objeto EdtSenha
    end
    else
    begin
        FrmLogin.Hide; //Esconde a tela
        FrmPrincipal.ShowModal; //chama a tela FrmMenuPrin no modo modal
        FrmLogin.Release; //Remove a tela da memória
        frmLogin.Close;
        FrmLogin := Nil; //Atribui conteúdo nulo para a variável de tela FrmLogin
    end;
end;



GOSTEI 0
Paullsoftware

Paullsoftware

20/02/2008

remova os
LopartialKey,LocaseInsensitive
do locate, deixe os [] em branco mesmo...
:idea: Não use Locate para identificação em login a forma mais segura é usando SQL:
Function ValidaUsuario(wNome,wSenha:String;aCds:TClientDataSet):Boolean;
begin
Result := False;
with aCds do
 begin
  close;
  commandtext := ´select nome, senha from usuarios where upper(nome)=Upper(:nome) and upper(senha)=upper(:senha)´;
  Params[0].Value := wNome;
  Params[1].Value := wSenha;
  Open;
  if IsEmpty then
   ExibeMensagem(´I´,´Nome ou Senha Invalidos! Proceda a Correção.´)
  else Result := True;
 Close;
 end;
end;
modo de usar:
if ValidaUsuario(EditNome.Text,EditSenha.Text,CdsLoginUsuarios) then
 begin
  //Instruções no caso de usuario encontrado
 end;
espero ter ajudado :wink:


GOSTEI 0
Lskskyblue

Lskskyblue

20/02/2008

Caro Amigo PaullSoftWare pelas suas resposta ao pessoal do forum da pra ver que você é fera em programação.Cara como eu iniciante ,e estou aprendendo muito com vocês ,poderias por gentileza me dizer onde eu declaro essa função ,seria no implementation,ou onde?
no meu form tenho dois edits e dois botoes
edtusuario ,edtSenha,btnLogar,btnCancelar sera que você poderia esse codigo na unit para mim entender como ele funciona ,pois não sei fazer.
desde já eu lhe agradeço!!!


GOSTEI 0
Paullsoftware

Paullsoftware

20/02/2008

Caro Amigo PaullSoftWare pelas suas resposta ao pessoal do forum da pra ver que você é fera em programação.Cara como eu iniciante ,e estou aprendendo muito com vocês ,poderias por gentileza me dizer onde eu declaro essa função ,seria no implementation,ou onde? no meu form tenho dois edits e dois botoes edtusuario ,edtSenha,btnLogar,btnCancelar sera que você poderia esse codigo na unit para mim entender como ele funciona ,pois não sei fazer. desde já eu lhe agradeço!!!

Obrigado amigo, mais ainda tenho muito a aprender... Vivo deixando o pessoal aqui do forum com os ´Cabelos Brancos´ hehehe...
Você pode acrescentar ela abaixo da seção Implemetation, acima da primeira procedure que você tiver ai na sua unit, ou então, como você é iniciante vamos adaptar ao seu botão de login, blz??
procedure TForm1.Button1Click(Sender:TObject);
begin 
with aCds do 
 begin 
  close; 
  commandtext := ´select nome, senha from usuarios where upper(nome)=Upper(:nome) and upper(senha)=upper(:senha)´; 
  Params[0].Value := EditNome.Text; 
  Params[1].Value := EditSenha.Text; 
  Open; 
  if IsEmpty then 
   ExibeMensagem(´I´,´Nome ou Senha Invalidos! Proceda a Correção.´) 
  Close; 
 end; 
end;
daí você não precisa mais usar a função que te passei, agora deve dar uma melhorada, certo? fiz sem testar nada...
dá uma olhada nesse artigo do Everson Borges sobre a ultilização de Telas de login...
https://www.devmedia.com.br/articles/viewcomp.asp?comp=470&;hl=
Curso completo do Luciano Pimenta: [url=https://www.devmedia.com.br/articles/viewcomp.asp?comp=4746&hl=]Criando um Sistema Complento com Delphi 7 DbExpress e FireBird[/url] as aulas são 0800 para assinantes da ClubeDelphi, Um abraço! :wink:


GOSTEI 0
Obrunno

Obrunno

20/02/2008

Maneira correta de login:

Crie uma Query com o Nome QLogin, que tenha os campos ´usuario´ e ´senha´. Na propriedade SQL digite:

select * from [NomedaTabeladeUsuarios] where usuario =:USER

No botão logar digite:

with DM.QLogin do
begin
close;
parameters[0].value := frmLogin.edtApelido.Text;
open;
end;
  if DM.QLogin.RecordCount = 1 then
begin
if DM.QloginSenha.Value = frmLogin.edtSenha.Text then
begin
FrmLogin.Hide;
FrmPrincipal.ShowModal;
FrmPrincipal.Free;
close;
end;
else
begin
showmessage(´Senha não confere!´);
frmLogin.edtSenha.Text := ´´;
frmLogin.edtSenha.SetFocus;
end;
end
else
begin
showmessage(´Usuário inexistente!´);
frmLogin.edtApelido.Text := ´´;
frmLogin.edtSenha.Text := ´´;
frmLogin.edtApelido.SetFocus;
end;

Obs.: A instrução acima funciona perfitamente com conexões de banco de dados ADO. Se vc estiver usando BDE troque ´parameters[0].value := frmLogin.edtApelido.Text;´ por ´params[0].value := frmLogin.edtApelido.Text;´.

Vlw´s


GOSTEI 0
POSTAR