Logar usuário no sistema.

17/09/2004

Ola pessoal, estou tentando fazer um login em meu sistema, para isto criei este código:
BtnLogar.Tag:=BtnLogar.Tag + 1;
  IF DmBasedados.IBTab_Usuario.Locate(´Login´,EdtLogin.Text,[&93;) Then
  IF Dmbasedados.IBTab_UsuarioSENHA.Value = EdtSenha.Text Then
    begin
      Application.CreateForm(TFrmPrincipal,FrmPrincipal);
      FrmPrincipal.ShowModal;
      FrmPrincipal.Release;
      EparaFechar:=True;
      Close;
    end
  ELSE
    begin
      MessageDlg(´Senha Incorreta!´,Mtinformation,&91;mBOK&93;,0);
      Edtsenha.Text:=´´;
      EdtSenha.SetFocus;
    end
  ELSE
    Begin
     MessageDlg(´Usuário Não Existe!´,Mtinformation,&91;mBOK&93;,0);
     EdtLogin.Text:=´´;
     EdtLogin.SetFocus;
    end;
     If BtnLogar.Tag = 3 Then
        Application.Terminate;

end;

Entrei antes e registrei um usuario com o nome ´ MARIA´ e senha ´1234´ coloco sempre o nome e senha correto mas a mensagem senha imcorreta me aprece sempre.
Tem alguém que pode me ajudar.
elmarinho.


Peninha

Respostas

18/09/2004

Vinicius2k

Colega,

Creio ser apenas um problema de estruturação de código...
Observe que no seu código o primeiro bloco do primeiro desvio (IF) não foi delimitado com begin..end

Eu implementaria assim :
BtnLogar.Tag:=BtnLogar.Tag + 1;
{ **** }
if DmBasedados.IBTab_Usuario.Locate(´Login´,EdtLogin.Text,[&93;) Then
  begin
    if Dmbasedados.IBTab_UsuarioSENHA.Value = EdtSenha.Text Then
      begin
        Application.CreateForm(TFrmPrincipal,FrmPrincipal);
        FrmPrincipal.ShowModal;
        FrmPrincipal.Release;
        EparaFechar:=True;
        Close;
      end
    else
      begin
        MessageDlg(´Senha Incorreta!´,Mtinformation,&91;mBOK&93;,0);
        Edtsenha.Text:=´´;
        EdtSenha.SetFocus;
      end;
  end 
else
  begin
    MessageDlg(´Usuário Não Existe!´,Mtinformation,&91;mBOK&93;,0);
    EdtLogin.Text:=´´;
    EdtLogin.SetFocus;
  end;
{ **** }
If BtnLogar.Tag = 3 Then Application.Terminate;


Espero ter ajudado...
T+


Responder Citar

18/09/2004

Peninha

Amigo, infelizmente continuou acontecendo a mesma coisa, vou tentar outra forma, mas se tiver outra segetão sera bem vinda .
Obrigado.
elmarinho.


Responder Citar

18/09/2004

Vinicius2k

Bem, então a única explicação lógica é que a segunda condição não está sendo atendida...
Nesta linha:
if Dmbasedados.IBTab_UsuarioSENHA.Value = EdtSenha.Text

o resultado da comparação é False.

Vc não teria mais de um usuário ´MARIA´ na base?
Lembre-se de que vc está localizando o primeiro e se a coluna ´Login´ não for chave primária, vc pode ter outro usuário com o mesmo nome e senha diferente...

T+


Responder Citar

18/09/2004

Sandra

Peninha,

Sem desmerecer as respostas do Vinícius, sugiro uma alteração no 2º if. Não sei qual o banco de dados está utilizando, mas... altere para:
BtnLogar.Tag:=BtnLogar.Tag + 1; 
  IF DmBasedados.IBTab_Usuario.Locate(´Login´,EdtLogin.Text,[&93;) Then 
  IF Dmbasedados.IBTab_UsuarioSENHA.asString = EdtSenha.Text Then 
    begin 
...

Pode ser que funcione. :D

Outro detalhe que estava vendo é quando o ´usuário não foi encontrado´, você está limpando apenas o Edit do Login. Acho que seria interessante limpar também o Edit da senha. Assim:
...
     MessageDlg(´Usuário Não Existe!´,Mtinformation,&91;mBOK&93;,0); 
     EdtLogin.Text:=´´; 
     Edtsenha.Text:=´´;
     EdtLogin.SetFocus; 
...


Boa sorte!!


Responder Citar

18/09/2004

Vinicius2k

Bem, * teoricamente *, não existiria diferença... mas na nossa profissão a teoria costuma fallhar não é mesmo? :D

A sua solução, Sandra, é a mais correta, pq .Value é Variant, e Variants são mais lentos, mas, em tese, até onde eu sei, o resultado deveria ser o mesmo... mas não custa nada fazer o teste... :wink:


Responder Citar