Fazer login no sistema.

25/09/2004

Ola pessoal. Estou tentando a alguns dias fazer este código funcionar, mas infelizmente ainda não tive nenhum progresso.

procedure TFrmSenha.BtnLogarClick(Sender: TObject);
begin
  With DmBasedados.IBQuery_Login do
      Begin
       Sql.Clear;
       Sql.Add(´Select lOGIN, SENHA From TabCad_Usuario´);
       SQL.add(´Where Login like ´+#39+(edtLogin.Text)+39´ and senha like ´+39+(edtsenha.Text)+39´´);
       Open;
    end;
    If Dmbasedados.IBQuery_Login.IsEmpty then
       Begin
         Application.MessageBox (´ACESSO NEGADO´,´DADOS INVÁLIDOS´,mb_IconError + mb_OK);
         EdtLogin.Text:=´´;
         EdtSenha.Text:=´´;
         EdtLogin.SetFocus;
       END
    else
       begin
         MessageDlg(´CONFIRMAMOS SUA SENHA!´, mtInformation, &91;mbOK&93;,0);
       end;
      Application.CreateForm(TFrmPrincipal,FrmPrincipal);
      FrmPrincipal.ShowModal;
      FrmPrincipal.Release;
end;

Será que alguém ai pode me ajudar com alguma dica ou quem sabe uma forma mais facil.
Peninha.


Peninha

Respostas

25/09/2004

Otto

a senha grava no banco é criptografada, ou é gravada normal mesmo??

vc pode usar um Locate:

  if not Zq1.Locate(´Login;Senha´,VarArrayOf([edLogin.Text, edSenha.Text&93;),
                                             &91;loCaseInsensitive&93;) Then
         begin
           MessageBox(0,´O Login e ou Senha não confere.´ +13+
                        ´Favor tente novamente.´,´VALIDAÇÃO´, MB_OK+MB_ICONERROR);
           edLogin.Clear;
           edSenha.Clear;
           edLogin.SetFocus();
         end



Responder Citar

25/09/2004

Peninha

Amigo Otto.
Por favor se vc poder ser mais especifico eu agradeceria muito.
Infelizmente não consegui assimilar sua resposta.
Obrigado.


Responder Citar

25/09/2004

Bruno Belchior

olha só

procedure TFrmSenha.BtnLogarClick(Sender: TObject); 
begin 
  With DmBasedados.IBQuery_Login do 
      Begin 
       Sql.Clear; 
       Sql.Add(´Select lOGIN, SENHA From TabCad_Usuario´); 
       SQL.add(´Where Login = :ParLogin and Senha = :ParSenha´´); 
       SQL.ParamByName(´ParLogin´).Value := EdLogin.Text;
       SQL.ParamByName(´ParSenha  := EdSenha.Text;
       Open; 
    end; 
    If (Dmbasedados.IBQuery_Login.RecordCount=0) then 
       Begin 
         Application.MessageBox (´ACESSO NEGADO´,´DADOS INVÁLIDOS´,mb_IconError + mb_OK); 
         EdtLogin.Text:=´´; 
         EdtSenha.Text:=´´; 
         EdtLogin.SetFocus; 
       END 
    else 
       begin 
         MessageDlg(´CONFIRMAMOS SUA SENHA!´, mtInformation, [mbOK&93;,0); 
       end; 
      Application.CreateForm(TFrmPrincipal,FrmPrincipal); 
      FrmPrincipal.ShowModal; 
      FrmPrincipal.Release; 
end; 



espero que ajude, a ideia é retornar pelo menos um registro onde a senha é igual o EdSenha.Text e o login é igual ao EdLogin.Text para que o login seja válido...


Responder Citar

25/09/2004

Otto

Amigo Otto. Por favor se vc poder ser mais especifico eu agradeceria muito. Infelizmente não consegui assimilar sua resposta. Obrigado.



assim, na tabela, vc tem o campo login e o campo senha..
quando vc cadastra um novo usuário, vc criptografa a senha pra poder salvar no banco, ou salva normal, exemplo:

login: otto
senha: blablabla
// modo normal

login: otto
senha: df87a890a07ds
// modo criptografado



na rotina que te mostrei, faz um locate onde o campo Login é igual ao valor que ta no edLogin e assim com a senha...

seguinte:

if not Query.Locate(´LOGIN;SENHA´,VarArrayOf([editLogin.Text, editSenha.Text&93;),&91;loCaseInsensitive&93;) Then 
// não achou nada



Responder Citar

25/09/2004

Peninha

Amigos, qualquer código que ue possa usar, quando eu clicko no botão BtnLogar mesmo que os dados que inseridos nele estiverem errados me retornado uma mensagem que o campo Cod_Cliente da Tabela Cad_Usuario não foi encontrado.
Verifiquei todas as possibilidadesm mais isto não pode ser possivel, por que se ue for cadastrar um novo usuario ele é gravado.
O que pode estar acontecendo.


Responder Citar

25/09/2004

Ariovaldo

Peninha vamos ver se entendi para te ajudar

A Primeira coisa que é estranho é vc dar um Like no campo usuario e Senha na minha opnião isso não deve existir pois o sistema pode validar coisa que não existe, mas faz o select desta forma:

procedure TFrmSenha.BtnLogarClick(Sender: TObject);
begin
With DmBasedados.IBQuery_Login do
Begin
Sql.Clear;
Sql.Add(´Select lOGIN, SENHA From TabCad_Usuario´);
SQL.add(´Where Login like :login´);
SQL.Add(´And Senha Like :Senha´);
Parambyname(´Login´).asstring := ´¬´ + edtLogin.Text + ´¬´;
Parambyname(´Senha´).asstring := ´¬´ + edtsenha.Text + ´¬´;
Open;
end;
If Dmbasedados.IBQuery_Login.IsEmpty then
Begin
Application.MessageBox (´ACESSO NEGADO´,´DADOS INVÁLIDOS´,mb_IconError + mb_OK);
EdtLogin.Text:=´´;
EdtSenha.Text:=´´;
EdtLogin.SetFocus;
END
else
begin
MessageDlg(´CONFIRMAMOS SUA SENHA!´, mtInformation, [mbOK],0);
end;
Application.CreateForm(TFrmPrincipal,FrmPrincipal);
FrmPrincipal.ShowModal;
FrmPrincipal.Release;
end;


Espero ter ajudado


Responder Citar

25/09/2004

Peninha

È amigo infelizmente não adiantou.
Vou tentando por aqui.
Obrigado.


Responder Citar

25/09/2004

Beppe

Não se usa like pra encontrar dados exatos, como é o caso. Assim basta ter um único usuário cadastrado para o proceimento suceder. Além disso o apóstrofo(#39) era desnecessário.

with DmBasedados.IBQuery_Login do
begin
  Sql.Clear;
  Sql.Add(´select LOGIN, SENHA from TabCad_Usuario´);
  Sql.Add(´where LOGIN = ´ + edtLogin.Text + ´ and SENHA = ´ + edtSenha.Text);
  Open;
  try
    if IsEmpty then
    begin
      Application.MessageBox(´ACESSO NEGADO´, ´DADOS INVÁLIDOS´, mb_IconError + mb_OK); 
      edtLogin.Text := ´´; 
      edtSenha.Text := ´´; 
      edtLogin.SetFocus; 
    end
    else
    begin
      MessageDlg(´CONFIRMAMOS SUA SENHA!´, mtInformation, &91;mbOK&93;, 0);
      Application.CreateForm(TFrmPrincipal, frmPrincipal); 
      try
        frmPrincipal.ShowModal;
      finally
        frmPrincipal.Release;
      end;
    end;
  finally
    Close;
  end;
end;


Eu particularmente prefiro abrir uma janela de login dentro do form principal, e não o contrário.


Responder Citar

26/09/2004

Peninha

Bom pessoal muito obrigado por terem me ajudado em mais um problema, pois juntando informações de várias perguntas consegui finalmente.
Agradeço a todos aqueles que me ajudaram e até a próxima.
Peninha.


Responder Citar

26/09/2004

Ariovaldo

Peninha qual o erro que esta dando este código??


Responder Citar