Ajuda sobre login
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
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
Curtidas 0
Respostas
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.
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
20/02/2008
remova os
:idea: Não use Locate para identificação em login a forma mais segura é usando SQL:
modo de usar:
espero ter ajudado :wink:
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;
if ValidaUsuario(EditNome.Text,EditSenha.Text,CdsLoginUsuarios) then begin //Instruções no caso de usuario encontrado end;
GOSTEI 0
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!!!
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
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;
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
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
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