Array
(
)

Logar usuário no sistema.

Peninha
   - 17 set 2004

Ola pessoal, estou tentando fazer um login em meu sistema, para isto criei este código:#Código

BtnLogar.Tag:=BtnLogar.Tag + 1;
IF DmBasedados.IBTab_Usuario.Locate(´Login´,EdtLogin.Text,[]) 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,[mBOK],0);
Edtsenha.Text:=´´;
EdtSenha.SetFocus;
end
ELSE
Begin
MessageDlg(´Usuário Não Existe!´,Mtinformation,[mBOK],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.


Vinicius2k
   - 18 set 2004

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 :
#Código

BtnLogar.Tag:=BtnLogar.Tag + 1;
{ **** }
if DmBasedados.IBTab_Usuario.Locate(´Login´,EdtLogin.Text,[]) 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,[mBOK],0);
Edtsenha.Text:=´´;
EdtSenha.SetFocus;
end;
end
else
begin
MessageDlg(´Usuário Não Existe!´,Mtinformation,[mBOK],0);
EdtLogin.Text:=´´;
EdtLogin.SetFocus;
end;
{ **** }
If BtnLogar.Tag = 3 Then Application.Terminate;


Espero ter ajudado...
T+


Peninha
   - 18 set 2004

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


Vinicius2k
   - 18 set 2004

Bem, então a única explicação lógica é que a segunda condição não está sendo atendida...
Nesta linha:
#Código

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+


Sandra
   - 18 set 2004

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:
#Código

BtnLogar.Tag:=BtnLogar.Tag + 1; 
IF DmBasedados.IBTab_Usuario.Locate(´Login´,EdtLogin.Text,[]) 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:
#Código
...
MessageDlg(´Usuário Não Existe!´,Mtinformation,[mBOK],0);
EdtLogin.Text:=´´;
Edtsenha.Text:=´´;
EdtLogin.SetFocus;
...


Boa sorte!!


Vinicius2k
   - 18 set 2004

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: