Array
(
)

Fazer login no sistema.

Peninha
   - 25 set 2004

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

#Código

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, [mbOK],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.


Otto
   - 25 set 2004

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

vc pode usar um Locate:

#Código

if not Zq1.Locate(´Login;Senha´,VarArrayOf([edLogin.Text, edSenha.Text]),
[loCaseInsensitive]) 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



Peninha
   - 25 set 2004

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


Bruno Belchior
   - 25 set 2004

olha só

#Código


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],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...


Otto
   - 25 set 2004


Citação:
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:

#Código

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:

#Código
if not Query.Locate(´LOGIN;SENHA´,VarArrayOf([editLogin.Text, editSenha.Text]),[loCaseInsensitive]) Then 
// não achou nada



Peninha
   - 25 set 2004

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.


Ariovaldo
   - 25 set 2004

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


Peninha
   - 25 set 2004

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


Beppe
   - 25 set 2004

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.

#Código

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, [mbOK], 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.


Peninha
   - 26 set 2004

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.


Ariovaldo
   - 26 set 2004

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